mirror of
https://github.com/scratchfoundation/paper.js.git
synced 2024-12-28 17:02:24 -05:00
Introduce Numerical.isMachineZero()
Used in places requiring smaller epsilons for zero comparisons
This commit is contained in:
parent
978cd94a9e
commit
15e00e0b99
6 changed files with 12 additions and 8 deletions
|
@ -141,7 +141,7 @@ var Line = Base.extend(/** @lends Line# */{
|
|||
}
|
||||
var cross = v1x * v2y - v1y * v2x;
|
||||
// Avoid divisions by 0, and errors when getting too close to 0
|
||||
if (!Numerical.isZero(cross)) {
|
||||
if (!Numerical.isMachineZero(cross)) {
|
||||
var dx = p1x - p2x,
|
||||
dy = p1y - p2y,
|
||||
u1 = (v2x * dy - v2y * dx) / cross,
|
||||
|
@ -175,7 +175,7 @@ var Line = Base.extend(/** @lends Line# */{
|
|||
v2y = y - py,
|
||||
// ccw = v2.cross(v1);
|
||||
ccw = v2x * vy - v2y * vx;
|
||||
if (!isInfinite && Numerical.isZero(ccw)) {
|
||||
if (!isInfinite && Numerical.isMachineZero(ccw)) {
|
||||
// If the point is on the infinite line, check if it's on the
|
||||
// finite line too: Project v2 onto v1 and determine ccw based
|
||||
// on which side of the finite line the point lies. Calculate
|
||||
|
|
|
@ -2091,7 +2091,7 @@ new function() { // Scope for bezier intersection using fat-line clipping
|
|||
return locations;
|
||||
}
|
||||
|
||||
function getLoopIntersection(v1, c1, locations, include) {
|
||||
function getSelfIntersection(v1, c1, locations, include) {
|
||||
var info = Curve.classify(v1);
|
||||
if (info.type === 'loop') {
|
||||
var roots = info.roots;
|
||||
|
@ -2131,7 +2131,7 @@ new function() { // Scope for bezier intersection using fat-line clipping
|
|||
}
|
||||
if (self) {
|
||||
// First check for self-intersections within the same curve.
|
||||
getLoopIntersection(values1, curve1, locations, include);
|
||||
getSelfIntersection(values1, curve1, locations, include);
|
||||
}
|
||||
// Check for intersections with other curves.
|
||||
// For self-intersection, we can start at i + 1 instead of 0.
|
||||
|
@ -2314,7 +2314,7 @@ new function() { // Scope for bezier intersection using fat-line clipping
|
|||
var v1 = this.getValues(),
|
||||
v2 = curve && curve !== this && curve.getValues();
|
||||
return v2 ? getCurveIntersections(v1, v2, this, curve, [])
|
||||
: getLoopIntersection(v1, this, []);
|
||||
: getSelfIntersection(v1, this, []);
|
||||
},
|
||||
|
||||
statics: /** @lends Curve */{
|
||||
|
|
|
@ -59,7 +59,7 @@ var CurveLocation = Base.extend(/** @lends CurveLocation# */{
|
|||
|
||||
_setCurve: function(curve) {
|
||||
var path = curve._path;
|
||||
// We only store the path to verify versions for cachd values.
|
||||
// We only store the path to verify versions for cached values.
|
||||
// To ensure we use the right path (e.g. after splitting), we shall
|
||||
// always access the path on the result of getCurve().
|
||||
this._path = path;
|
||||
|
|
|
@ -231,7 +231,7 @@ var PathFitter = Base.extend({
|
|||
diff = pt.subtract(point),
|
||||
df = pt1.dot(pt1) + diff.dot(pt2);
|
||||
// u = u - f(u) / f'(u)
|
||||
return Numerical.isZero(df) ? u : u - diff.dot(pt1) / df;
|
||||
return Numerical.isMachineZero(df) ? u : u - diff.dot(pt1) / df;
|
||||
},
|
||||
|
||||
// Evaluate a bezier curve at a particular parameter value
|
||||
|
|
|
@ -1172,7 +1172,7 @@ PathItem.inject(new function() {
|
|||
return inter && inter._overlap && inter._path === path;
|
||||
}
|
||||
|
||||
// First collect all overlaps and crossings while taking not of the
|
||||
// First collect all overlaps and crossings while taking note of the
|
||||
// existence of both.
|
||||
var hasOverlaps = false,
|
||||
hasCrossings = false,
|
||||
|
|
|
@ -168,6 +168,10 @@ var Numerical = new function() {
|
|||
return val >= -EPSILON && val <= EPSILON;
|
||||
},
|
||||
|
||||
isMachineZero: function(val) {
|
||||
return val >= -MACHINE_EPSILON && val <= MACHINE_EPSILON;
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns a number whose value is clamped by the given range.
|
||||
*
|
||||
|
|
Loading…
Reference in a new issue