mirror of
https://github.com/photonstorm/phaser
synced 2024-12-24 12:03:36 +00:00
dx1 !== 0 was an unnecessary restriction
In the previous version, if x1 == x2 the code was never able to detect an intersection even if there was one. This limitation was because of the unnecessary division by dx1. With its removal it should work now.
This commit is contained in:
parent
699e81e008
commit
a0838c184f
1 changed files with 8 additions and 8 deletions
|
@ -40,22 +40,22 @@ var GetLineToLine = function (line1, line2, out)
|
||||||
var dx2 = x4 - x3;
|
var dx2 = x4 - x3;
|
||||||
var dy2 = y4 - y3;
|
var dy2 = y4 - y3;
|
||||||
|
|
||||||
var denom = dy2 * dx1 - dx2 * dy1;
|
var denom = (dx1*dy2 - dy1*dx2);
|
||||||
|
|
||||||
// Make sure there is not a division by zero - this also indicates that the lines are parallel.
|
// Make sure there is not a division by zero - this also indicates that the lines are parallel.
|
||||||
// If numA and numB were both equal to zero the lines would be on top of each other (coincidental).
|
// If numA and numB were both equal to zero the lines would be on top of each other (coincidental).
|
||||||
// This check is not done because it is not necessary for this implementation (the parallel check accounts for this).
|
// This check is not done because it is not necessary for this implementation (the parallel check accounts for this).
|
||||||
|
|
||||||
if (dx1 === 0 || denom === 0)
|
if (denom === 0)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var T2 = (dx1 * (y3 - y1) + dy1 * (x1 - x3)) / (dx2 * dy1 - dy2 * dx1);
|
var t = ((x3 - x1)*dy2 - (y3 - y1)*dx2) / denom;
|
||||||
var T1 = (x3 + dx2 * T2 - x1) / dx1;
|
var u = ((y1 - y3)*dx1 - (x1 - x3)*dy1) / denom;
|
||||||
|
|
||||||
// Intersects?
|
// Intersects?
|
||||||
if (T1 < 0 || T2 < 0 || T2 > 1)
|
if (t < 0 || t > 1 || u < 0 || u > 1)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -66,9 +66,9 @@ var GetLineToLine = function (line1, line2, out)
|
||||||
}
|
}
|
||||||
|
|
||||||
return out.set(
|
return out.set(
|
||||||
x1 + dx1 * T1,
|
x1 + dx1 * t,
|
||||||
y1 + dy1 * T1,
|
y1 + dy1 * t,
|
||||||
T1
|
t
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue