From 563a26f11296dba57708af9a81d5713da95564ba Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ju=CC=88rg=20Lehni?= <juerg@scratchdisk.com>
Date: Sat, 4 Apr 2015 15:54:34 +0200
Subject: [PATCH] Clean up PathFitter fix a bit.

---
 src/path/PathFitter.js | 44 +++++++++++++++++++++---------------------
 1 file changed, 22 insertions(+), 22 deletions(-)

diff --git a/src/path/PathFitter.js b/src/path/PathFitter.js
index 6780c2f6..a7b4a57f 100644
--- a/src/path/PathFitter.js
+++ b/src/path/PathFitter.js
@@ -171,31 +171,33 @@ var PathFitter = Base.extend({
         // If alpha negative, use the Wu/Barsky heuristic (see text)
         // (if alpha is 0, you get coincident control points that lead to
         // divide by zero in any subsequent NewtonRaphsonRootFind() call.
-        var segLength = pt2.getDistance(pt1);
-        epsilon *= segLength;
-        if (alpha1 < epsilon || alpha2 < epsilon) {
+        var segLength = pt2.getDistance(pt1),
+            eps = epsilon * segLength,
+            handle1,
+            handle2;
+        if (alpha1 < eps || alpha2 < eps) {
             // fall back on standard (probably inaccurate) formula,
             // and subdivide further if needed.
             alpha1 = alpha2 = segLength / 3;
-        }
-
-        // Check if the found control points are in the right order when
-        // projected onto the line through pt1 and pt2.
-        var line = pt2.subtract(pt1),
+        } else {
+            // Check if the found control points are in the right order when
+            // projected onto the line through pt1 and pt2.
+            var line = pt2.subtract(pt1);
             // Control points 1 and 2 are positioned an alpha distance out
             // on the tangent vectors, left and right, respectively
-            cp1Delta = tan1.normalize(alpha1),
-            cp2Delta = tan2.normalize(alpha2);
-        if (cp1Delta.dot(line) - cp2Delta.dot(line) > segLength * segLength) {
-            // Fall back to the Wu/Barsky heuristic above.
-            alpha1 = alpha2 = segLength / 3;
-            cp1Delta = tan1.normalize(alpha1);
-            cp2Delta = tan2.normalize(alpha2);
+            handle1 = tan1.normalize(alpha1);
+            handle2 = tan2.normalize(alpha2);
+            if (handle1.dot(line) - handle2.dot(line) > segLength * segLength) {
+                // Fall back to the Wu/Barsky heuristic above.
+                alpha1 = alpha2 = segLength / 3;
+                handle1 = handle2 = null; // Force recalculation
+            }
         }
 
         // First and last control points of the Bezier curve are
         // positioned exactly at the first and last data points
-        return [pt1, pt1.add(cp1Delta), pt2.add(cp2Delta), pt2];
+        return [pt1, pt1.add(handle1 || tan1.normalize(alpha1)),
+                pt2.add(handle2 || tan2.normalize(alpha2)), pt2];
     },
 
     // Given set of points and their parameterization, try to find
@@ -205,12 +207,10 @@ var PathFitter = Base.extend({
             u[i - first] = this.findRoot(curve, this.points[i], u[i - first]);
         }
         // Detect if the new parameterization has reordered the points.
-        // In that case, we would fit the points of the path in the
-        // wrong order.
-        for (var j = 1, jLen = u.length; j < jLen; j++) {
-            if (u[j] <= u[j - 1]) {
-              return false;
-            }
+        // In that case, we would fit the points of the path in the wrong order.
+        for (var i = 1, l = u.length; i < l; i++) {
+            if (u[i] <= u[i - 1])
+                return false;
         }
         return true;
     },