diff --git a/src/path/Path.js b/src/path/Path.js index e11a9759..310574f3 100644 --- a/src/path/Path.js +++ b/src/path/Path.js @@ -34,27 +34,19 @@ Path = PathItem.extend({ // Code ported from: // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html var segments = this._segments; - var first = segments[0]; + var first = segments[0], prev = first; if (!first) return null; - var p0 = first.point, prev = first; - var min = { - x: p0.x, - y: p0.y - }; - var max = { - x: p0.x, - y: p0.y - }; + var min = first.point.clone(), max = min.clone(); var coords = ['x', 'y']; function processSegment(segment) { - var p1 = p0.add(prev.handleOut); - var p3 = segment.point; - var p2 = p3.add(segment.handleIn); for (var i = 0; i < 2; i++) { var coord = coords[i]; - var v0 = p0[coord], v1 = p1[coord], - v2 = p2[coord], v3 = p3[coord]; + + var v0 = prev.point[coord], + v1 = v0 + prev.handleOut[coord], + v3 = segment.point[coord], + v2 = v3 + segment.handleIn[coord]; function bounds(value) { if (value < min[coord]) { @@ -96,7 +88,6 @@ Path = PathItem.extend({ if (0 < t2 && t2 < 1) bounds(f(t2)); } - p0 = p3; prev = segment; } for (var i = 1, l = segments.length; i < l; i++)