mirror of
https://github.com/scratchfoundation/paper.js.git
synced 2025-07-25 13:19:09 -04:00
Introduce separate epsilon for fat-line clipping code, and reduce curve-time epsilon.
This commit is contained in:
parent
e9c3e72f60
commit
bafb6794a6
2 changed files with 8 additions and 4 deletions
src
|
@ -1422,7 +1422,6 @@ new function() { // Scope for intersection using bezier fat-line clipping
|
||||||
return;
|
return;
|
||||||
// Let P be the first curve and Q be the second
|
// Let P be the first curve and Q be the second
|
||||||
var q0x = v2[0], q0y = v2[1], q3x = v2[6], q3y = v2[7],
|
var q0x = v2[0], q0y = v2[1], q3x = v2[6], q3y = v2[7],
|
||||||
epsilon = /*#=*/(Numerical.CURVETIME_EPSILON / 10),
|
|
||||||
getSignedDistance = Line.getSignedDistance,
|
getSignedDistance = Line.getSignedDistance,
|
||||||
// Calculate the fat-line L for Q is the baseline l and two
|
// Calculate the fat-line L for Q is the baseline l and two
|
||||||
// offsets which completely encloses the curve P.
|
// offsets which completely encloses the curve P.
|
||||||
|
@ -1479,7 +1478,8 @@ new function() { // Scope for intersection using bezier fat-line clipping
|
||||||
parts[1], v1, c2, c1, locations, param,
|
parts[1], v1, c2, c1, locations, param,
|
||||||
t, uMax, tMinNew, tMaxNew, tDiff, !reverse, recursion);
|
t, uMax, tMinNew, tMaxNew, tDiff, !reverse, recursion);
|
||||||
}
|
}
|
||||||
} else if (Math.max(uMax - uMin, tMaxNew - tMinNew) < epsilon) {
|
} else if (Math.max(uMax - uMin, tMaxNew - tMinNew)
|
||||||
|
< /*#=*/Numerical.CLIPPING_EPSILON) {
|
||||||
// We have isolated the intersection with sufficient precision
|
// We have isolated the intersection with sufficient precision
|
||||||
var t1 = tMinNew + (tMaxNew - tMinNew) / 2,
|
var t1 = tMinNew + (tMaxNew - tMinNew) / 2,
|
||||||
t2 = uMin + (uMax - uMin) / 2;
|
t2 = uMin + (uMax - uMin) / 2;
|
||||||
|
|
|
@ -99,13 +99,13 @@ var Numerical = new function() {
|
||||||
* cannot be smaller, because errors add up to around 8e-7 in the bezier
|
* cannot be smaller, because errors add up to around 8e-7 in the bezier
|
||||||
* fat-line clipping code as a result of recursive sub-division.
|
* fat-line clipping code as a result of recursive sub-division.
|
||||||
*/
|
*/
|
||||||
CURVETIME_EPSILON: 8e-7,
|
CURVETIME_EPSILON: 4e-7, // NOTE: 2e-7 doesn't work in some edge-cases!
|
||||||
/**
|
/**
|
||||||
* The epsilon to be used when performing "geometric" checks, such as
|
* The epsilon to be used when performing "geometric" checks, such as
|
||||||
* point distances and examining cross products to check for
|
* point distances and examining cross products to check for
|
||||||
* collinearity.
|
* collinearity.
|
||||||
*/
|
*/
|
||||||
GEOMETRIC_EPSILON: 4e-7, // NOTE: 1e-7 doesn't work in some edge-cases!
|
GEOMETRIC_EPSILON: 4e-7, // NOTE: 2e-7 doesn't work in some edge-cases!
|
||||||
/**
|
/**
|
||||||
* The epsilon to be used when performing winding contribution checks.
|
* The epsilon to be used when performing winding contribution checks.
|
||||||
*/
|
*/
|
||||||
|
@ -115,6 +115,10 @@ var Numerical = new function() {
|
||||||
* as examining cross products to check for collinearity.
|
* as examining cross products to check for collinearity.
|
||||||
*/
|
*/
|
||||||
TRIGONOMETRIC_EPSILON: 1e-7,
|
TRIGONOMETRIC_EPSILON: 1e-7,
|
||||||
|
/**
|
||||||
|
* The epsilon to be used in the fatline clipping code.
|
||||||
|
*/
|
||||||
|
CLIPPING_EPSILON: 1e-7,
|
||||||
// Kappa, see: http://www.whizkidtech.redprince.net/bezier/circle/kappa/
|
// Kappa, see: http://www.whizkidtech.redprince.net/bezier/circle/kappa/
|
||||||
KAPPA: 4 * (sqrt(2) - 1) / 3,
|
KAPPA: 4 * (sqrt(2) - 1) / 3,
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue