Skip to content

Commit dcab0e1

Browse files
committed
Added Triangle.ContainsArray method, which is an optimized method of checking a whole array of points to see if they lie within a triangle.
1 parent 3d32383 commit dcab0e1

3 files changed

Lines changed: 54 additions & 1 deletion

File tree

v3/src/checksum.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
var CHECKSUM = {
2-
build: 'fb7ca1d0-15c1-11e7-a77e-25453d56c57c'
2+
build: 'bdd79e00-15c3-11e7-b07f-d559cbc191b8'
33
};
44
module.exports = CHECKSUM;
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// http://www.blackpawn.com/texts/pointinpoly/
2+
3+
// points is an array of Point-like objects with public x/y properties
4+
// returns an array with the same number of elements as the points array
5+
// each element contains either true or false depending if the point lay in the Triangle or not.
6+
7+
var ContainsArray = function (triangle, points, out)
8+
{
9+
if (out === undefined) { out = []; }
10+
11+
var v0x = triangle.x3 - triangle.x1;
12+
var v0y = triangle.y3 - triangle.y1;
13+
14+
var v1x = triangle.x2 - triangle.x1;
15+
var v1y = triangle.y2 - triangle.y1;
16+
17+
var dot00 = (v0x * v0x) + (v0y * v0y);
18+
var dot01 = (v0x * v1x) + (v0y * v1y);
19+
var dot11 = (v1x * v1x) + (v1y * v1y);
20+
21+
// Compute barycentric coordinates
22+
var b = ((dot00 * dot11) - (dot01 * dot01));
23+
var inv = (b === 0) ? 0 : (1 / b);
24+
25+
var u;
26+
var v;
27+
var v2x;
28+
var v2y;
29+
var dot02;
30+
var dot12;
31+
32+
var x1 = triangle.x1;
33+
var y1 = triangle.y1;
34+
35+
for (var i = 0; i < points.length; i++)
36+
{
37+
v2x = points[i].x - x1;
38+
v2y = points[i].y - y1;
39+
40+
dot02 = (v0x * v2x) + (v0y * v2y);
41+
dot12 = (v1x * v2x) + (v1y * v2y);
42+
43+
u = ((dot11 * dot02) - (dot01 * dot12)) * inv;
44+
v = ((dot00 * dot12) - (dot01 * dot02)) * inv;
45+
46+
out.push(u >= 0 && v >= 0 && (u + v < 1));
47+
}
48+
49+
return out;
50+
};
51+
52+
module.exports = ContainsArray;

v3/src/geom/triangle/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Triangle.CircumCenter = require('./CircumCenter');
1010
Triangle.CircumCircle = require('./CircumCircle');
1111
Triangle.Clone = require('./Clone');
1212
Triangle.Contains = require('./Contains');
13+
Triangle.ContainsArray = require('./ContainsArray');
1314
Triangle.ContainsPoint = require('./ContainsPoint');
1415
Triangle.CopyFrom = require('./CopyFrom');
1516
Triangle.Equals = require('./Equals');

0 commit comments

Comments
 (0)