mirror of
https://github.com/scratchfoundation/paper.js.git
synced 2025-01-03 19:45:44 -05:00
Implement a faster method to filter out beginnings of intersected curves.
This commit is contained in:
parent
a9a0857ba4
commit
7f245974e6
2 changed files with 9 additions and 8 deletions
|
@ -69,7 +69,7 @@ var Line = this.Line = Base.extend(/** @lends Line# */{
|
|||
* @param {Line} line
|
||||
* @return {Point} the intersection point of the lines
|
||||
*/
|
||||
intersect: function(line) {
|
||||
intersect: function(line, excludeStart, excludeEnd) {
|
||||
var cross = this.vector.cross(line.vector);
|
||||
// Avoid divisions by 0, and errors when getting too close to 0
|
||||
if (Numerical.isZero(cross))
|
||||
|
@ -79,8 +79,10 @@ var Line = this.Line = Base.extend(/** @lends Line# */{
|
|||
t2 = v.cross(this.vector) / cross;
|
||||
// Check the ranges of t parameters if the line is not allowed to
|
||||
// extend beyond the definition points.
|
||||
return (this.infinite || 0 <= t1 && t1 <= 1)
|
||||
&& (line.infinite || 0 <= t2 && t2 <= 1)
|
||||
return (this.infinite || (excludeStart ? 0 < t1 : 0 <= t1)
|
||||
&& (excludeEnd ? t1 < 1 : t1 <= 1))
|
||||
&& (line.infinite || (excludeStart ? 0 < t2 : 0 <= t2)
|
||||
&& (excludeEnd ? t2 < 1 : t2 <= 1))
|
||||
? this.point.add(this.vector.multiply(t1)) : null;
|
||||
},
|
||||
|
||||
|
|
|
@ -667,11 +667,10 @@ statics: {
|
|||
// See if the parametric equations of the lines interesct.
|
||||
var line1 = new Line(v1[0], v1[1], v1[6], v1[7], false),
|
||||
line2 = new Line(v2[0], v2[1], v2[6], v2[7], false),
|
||||
point = line1.intersect(line2);
|
||||
// Filter out beginnings of the curves, to avoid duplicate
|
||||
// solutions where curves join.
|
||||
if (point && !point.equals(line1.point)
|
||||
&& !point.equals(line2.point))
|
||||
// Filter out beginnings of the curves, to avoid duplicate
|
||||
// solutions where curves join.
|
||||
point = line1.intersect(line2, true, false);
|
||||
if (point)
|
||||
// Passing null for parameter leads to lazy determination of
|
||||
// parameter values in CurveLocation#getParameter() only
|
||||
// once they are requested.
|
||||
|
|
Loading…
Reference in a new issue