Skip to content

Commit 653c2ee

Browse files
committed
Parallel and divide by zero fix
1 parent 1c37e21 commit 653c2ee

1 file changed

Lines changed: 25 additions & 13 deletions

File tree

src/geom/intersects/GetLineToLine.js

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,23 +24,35 @@ var Vector3 = require('../../math/Vector3');
2424
*/
2525
var GetLineToLine = function (line1, line2, out)
2626
{
27-
var dx1 = line1.x2 - line1.x1;
28-
var dy1 = line1.y2 - line1.y1;
27+
var x1 = line1.x1;
28+
var y1 = line1.y1;
29+
var x2 = line1.x2;
30+
var y2 = line1.y2;
2931

30-
var dx2 = line2.x2 - line2.x1;
31-
var dy2 = line2.y2 - line2.y1;
32+
var x3 = line2.x1;
33+
var y3 = line2.y1;
34+
var x4 = line2.x2;
35+
var y4 = line2.y2;
3236

33-
var mag1 = Math.sqrt(dx1 * dx1 + dy1 * dy1);
34-
var mag2 = Math.sqrt(dx2 * dx2 + dy2 * dy2);
37+
var dx1 = x2 - x1;
38+
var dy1 = y2 - y1;
3539

36-
// Parallel?
37-
if (dx1 / mag1 === dx2 / mag2 && dy1 / mag1 === dy2 / mag2)
40+
var dx2 = x4 - x3;
41+
var dy2 = y4 - y3;
42+
43+
var denom = dy2 * dx1 - dx2 * dy1;
44+
45+
// Make sure there is not a division by zero - this also indicates that the lines are parallel.
46+
// If numA and numB were both equal to zero the lines would be on top of each other (coincidental).
47+
// This check is not done because it is not necessary for this implementation (the parallel check accounts for this).
48+
49+
if (dx1 === 0 || denom === 0)
3850
{
39-
return null;
51+
return false;
4052
}
4153

42-
var T2 = (dx1 * (line2.y1 - line1.y1) + dy1 * (line1.x1 - line2.x1)) / (dx2 * dy1 - dy2 * dx1);
43-
var T1 = (line2.x1 + dx2 * T2 - line1.x1) / dx1;
54+
var T2 = (dx1 * (y3 - y1) + dy1 * (x1 - x3)) / (dx2 * dy1 - dy2 * dx1);
55+
var T1 = (x3 + dx2 * T2 - x1) / dx1;
4456

4557
// Intersects?
4658
if (T1 < 0 || T2 < 0 || T2 > 1)
@@ -54,8 +66,8 @@ var GetLineToLine = function (line1, line2, out)
5466
}
5567

5668
return out.set(
57-
line1.x1 + dx1 * T1,
58-
line1.y1 + dy1 * T1,
69+
x1 + dx1 * T1,
70+
y1 + dy1 * T1,
5971
T1
6072
);
6173
};

0 commit comments

Comments
 (0)