UNPKG

phaser

Version:

A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.

71 lines (59 loc) 2.28 kB
/** * @author Richard Davey <rich@phaser.io> * @copyright 2013-2025 Phaser Studio Inc. * @license {@link https://opensource.org/licenses/MIT|MIT License} */ var Vector2 = require('../../math/Vector2'); // Adapted from http://bjornharrtell.github.io/jsts/doc/api/jsts_geom_Triangle.js.html /** * Computes the determinant of a 2x2 matrix. Uses standard double-precision arithmetic, so is susceptible to round-off error. * * @function det * @private * @since 3.0.0 * * @param {number} m00 - The [0,0] entry of the matrix. * @param {number} m01 - The [0,1] entry of the matrix. * @param {number} m10 - The [1,0] entry of the matrix. * @param {number} m11 - The [1,1] entry of the matrix. * * @return {number} the determinant. */ function det (m00, m01, m10, m11) { return (m00 * m11) - (m01 * m10); } /** * Computes the circumcentre of a triangle. The circumcentre is the centre of * the circumcircle, the smallest circle which encloses the triangle. It is also * the common intersection point of the perpendicular bisectors of the sides of * the triangle, and is the only point which has equal distance to all three * vertices of the triangle. * * @function Phaser.Geom.Triangle.CircumCenter * @since 3.0.0 * * @generic {Phaser.Math.Vector2} O - [out,$return] * * @param {Phaser.Geom.Triangle} triangle - The Triangle to get the circumcenter of. * @param {Phaser.Math.Vector2} [out] - The Vector2 object to store the position in. If not given, a new Vector2 instance is created. * * @return {Phaser.Math.Vector2} A Vector2 object holding the coordinates of the circumcenter of the Triangle. */ var CircumCenter = function (triangle, out) { if (out === undefined) { out = new Vector2(); } var cx = triangle.x3; var cy = triangle.y3; var ax = triangle.x1 - cx; var ay = triangle.y1 - cy; var bx = triangle.x2 - cx; var by = triangle.y2 - cy; var denom = 2 * det(ax, ay, bx, by); var numx = det(ay, ax * ax + ay * ay, by, bx * bx + by * by); var numy = det(ax, ax * ax + ay * ay, bx, bx * bx + by * by); out.x = cx - numx / denom; out.y = cy + numy / denom; return out; }; module.exports = CircumCenter;