MCPcopy Create free account
hub / github.com/phaserjs/phaser / ContainsArray

Function ContainsArray

src/geom/triangle/ContainsArray.js:22–74  ·  view source on GitHub ↗
(triangle, points, returnFirst, out)

Source from the content-addressed store, hash-verified

20 * @return {Phaser.Math.Vector2[]} An array containing all the points from `points` that are within the triangle, if an array was provided as `out`, points will be appended to that array and it will also be returned here.
21 */
22var ContainsArray = function (triangle, points, returnFirst, out)
23{
24 if (returnFirst === undefined) { returnFirst = false; }
25 if (out === undefined) { out = []; }
26
27 var v0x = triangle.x3 - triangle.x1;
28 var v0y = triangle.y3 - triangle.y1;
29
30 var v1x = triangle.x2 - triangle.x1;
31 var v1y = triangle.y2 - triangle.y1;
32
33 var dot00 = (v0x * v0x) + (v0y * v0y);
34 var dot01 = (v0x * v1x) + (v0y * v1y);
35 var dot11 = (v1x * v1x) + (v1y * v1y);
36
37 // Compute barycentric coordinates
38 var b = ((dot00 * dot11) - (dot01 * dot01));
39 var inv = (b === 0) ? 0 : (1 / b);
40
41 var u;
42 var v;
43 var v2x;
44 var v2y;
45 var dot02;
46 var dot12;
47
48 var x1 = triangle.x1;
49 var y1 = triangle.y1;
50
51 for (var i = 0; i < points.length; i++)
52 {
53 v2x = points[i].x - x1;
54 v2y = points[i].y - y1;
55
56 dot02 = (v0x * v2x) + (v0y * v2y);
57 dot12 = (v1x * v2x) + (v1y * v2y);
58
59 u = ((dot11 * dot02) - (dot01 * dot12)) * inv;
60 v = ((dot00 * dot12) - (dot01 * dot02)) * inv;
61
62 if (u >= 0 && v >= 0 && (u + v < 1))
63 {
64 out.push({ x: points[i].x, y: points[i].y });
65
66 if (returnFirst)
67 {
68 break;
69 }
70 }
71 }
72
73 return out;
74};
75
76module.exports = ContainsArray;

Callers 3

RectangleToTriangleFunction · 0.85
TriangleToTriangleFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…