From ed572e7d48c442f67600fe6b7a91a99ecf74fa8e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=BCrg=20Lehni?= <juerg@scratchdisk.com>
Date: Fri, 24 May 2013 17:14:23 -0700
Subject: [PATCH] Do not pre-calculate numeric values, count on optimizing JS
 engines to do that for us.

---
 fatline/Intersect.js | 74 ++++++++++++++++++++++----------------------
 1 file changed, 37 insertions(+), 37 deletions(-)

diff --git a/fatline/Intersect.js b/fatline/Intersect.js
index 09730a39..d35fc675 100644
--- a/fatline/Intersect.js
+++ b/fatline/Intersect.js
@@ -73,8 +73,10 @@ paper.Curve.getIntersections2 = function(v1, v2, curve1, curve2, locations, _v1t
 		(Math.abs(v1t.t2 - v1t.t1) > TOLERANCE || Math.abs(v2t.t2 - v2t.t1) > TOLERANCE)) {
 		++iterate;
 		// First we clip v2 with v1's fat-line
-		tmpt.t1 = v2t.t1; tmpt.t2 = v2t.t2;
-		var intersects1 = _clipBezierFatLine(_v1, _v2, tmpt);
+		tmpt.t1 = v2t.t1;
+        tmpt.t2 = v2t.t2;
+		var intersects1 = _clipBezierFatLine(_v1, _v2, tmpt),
+            intersects2 = 0;
 		// Stop if there are no possible intersections
 		if (intersects1 === 0) {
 			return;
@@ -86,7 +88,7 @@ paper.Curve.getIntersections2 = function(v1, v2, curve1, curve2, locations, _v1t
 // markCurve(_v2, '#0ff', false);
 			// Next we clip v1 with nuv2's fat-line
 			tmpt.t1 = v1t.t1; tmpt.t2 = v1t.t2;
-			var intersects2 = _clipBezierFatLine(_v2, _v1, tmpt);
+			intersects2 = _clipBezierFatLine(_v2, _v1, tmpt);
 			// Stop if there are no possible intersections
 			if (intersects2 === 0) {
 				return;
@@ -144,8 +146,8 @@ paper.Curve.getIntersections2 = function(v1, v2, curve1, curve2, locations, _v1t
 			locations.push(new CurveLocation(curve1, v1t.t1, curve1.getPointAt(v1t.t1, true), curve2));
 			return;
 		} else {
-			var curve1Flat = Curve.isFlatEnough(_v1, /*#=*/ TOLERANCE);
-			var curve2Flat = Curve.isFlatEnough(_v2, /*#=*/ TOLERANCE);
+			var curve1Flat = Curve.isFlatEnough(_v1, TOLERANCE);
+			var curve2Flat = Curve.isFlatEnough(_v2, TOLERANCE);
 			if (curve1Flat && curve2Flat) {
 				_getLineLineIntersection(_v1, _v2, curve1, curve2, locations);
 				return;
@@ -178,13 +180,11 @@ function _clipBezierFatLine(v1, v2, v2t) {
 	var d2 = _getSignedDist(p0x, p0y, p3x, p3y, p2x, p2y) || 0;
 	var dmin, dmax;
 	if (d1 * d2 > 0) {
-		// 3/4 * min{0, d1, d2}
-		dmin = 0.75 * Math.min(0, d1, d2);
-		dmax = 0.75 * Math.max(0, d1, d2);
+		dmin = 3 / 4 * Math.min(0, d1, d2);
+		dmax = 3 / 4 * Math.max(0, d1, d2);
 	} else {
-		// 4/9 * min{0, d1, d2}
-		dmin = 0.4444444444444444 * Math.min(0, d1, d2);
-		dmax = 0.4444444444444444 * Math.max(0, d1, d2);
+		dmin = 4 / 9 * Math.min(0, d1, d2);
+		dmax = 4 / 9 * Math.max(0, d1, d2);
 	}
 	// Calculate non-parametric bezier curve D(ti, di(t)) -
 	// di(t) is the distance of Q from the baseline l of the fat-line,
@@ -245,7 +245,7 @@ function _clipBezierFatLine(v1, v2, v2t) {
 		}
 		if (tmaxdmin > tmax) { tmax = 1; }
 // Debug: Plot the non-parametric graph and hull
-// plotD_vs_t(500, 110, Dt, [dq0, dq1, dq2, dq3], v1, dmin, dmax, tmin, tmax, 1.0 / (tmax - tmin + 0.3))
+// plotD_vs_t(500, 110, Dt, [dq0, dq1, dq2, dq3], v1, dmin, dmax, tmin, tmax, 1 / (tmax - tmin + 0.3))
 		// tmin and tmax are within the range (0, 1). We need to project it to the original
 		// parameter range for v2.
 		var v2tmin = v2t.t1;
@@ -274,18 +274,18 @@ function _clipBezierFatLine(v1, v2, v2t) {
  * much easier than a set of arbitrary points.
  */
 function _convexhull(dq0, dq1, dq2, dq3) {
-	var distq1 = _getSignedDist(0.0, dq0, 1.0, dq3, 0.3333333333333333, dq1);
-	var distq2 = _getSignedDist(0.0, dq0, 1.0, dq3, 0.6666666666666666, dq2);
+	var distq1 = _getSignedDist(0, dq0, 1, dq3, 1 / 3, dq1);
+	var distq2 = _getSignedDist(0, dq0, 1, dq3, 2 / 3, dq2);
 	// Check if [1/3, dq1] and [2/3, dq2] are on the same side of line [0,dq0, 1,dq3]
 	if (distq1 * distq2 < 0) {
 		// dq1 and dq2 lie on different sides on [0, q0, 1, q3]
 		// Convexhull is a quadrilateral and line [0, q0, 1, q3] is NOT part of the convexhull
 		// so we are pretty much done here.
 		Dt = [
-			[ 0.0, dq0, 0.3333333333333333, dq1 ],
-			[ 0.3333333333333333, dq1, 1.0, dq3 ],
-			[ 0.6666666666666666, dq2, 0.0, dq0 ],
-			[ 1.0, dq3, 0.6666666666666666, dq2 ]
+			[ 0, dq0, 1 / 3, dq1 ],
+			[ 1 / 3, dq1, 1, dq3 ],
+			[ 2 / 3, dq2, 0, dq0 ],
+			[ 1, dq3, 2 / 3, dq2 ]
 		];
 	} else {
 		// dq1 and dq2 lie on the same sides on [0, q0, 1, q3]
@@ -297,30 +297,30 @@ function _convexhull(dq0, dq1, dq2, dq3) {
 		distq2 = Math.abs(distq2);
 		var vqa1a2x, vqa1a2y, vqa1Maxx, vqa1Maxy, vqa1Minx, vqa1Miny;
 		if (distq1 > distq2) {
-			dqmin = [ 0.6666666666666666, dq2 ];
-			dqmax = [ 0.3333333333333333, dq1 ];
+			dqmin = [ 2 / 3, dq2 ];
+			dqmax = [ 1 / 3, dq1 ];
 			// apex is dq3 and the other apex point is dq0
 			// vector dqapex->dqapex2 or the base vector which is already part of c-hull
-			vqa1a2x = 1.0;
+			vqa1a2x = 1;
 			vqa1a2y = dq3 - dq0;
 			// vector dqapex->dqmax
-			vqa1Maxx = 0.6666666666666666;
+			vqa1Maxx = 2 / 3;
 			vqa1Maxy = dq3 - dq1;
 			// vector dqapex->dqmin
-			vqa1Minx = 0.3333333333333333;
+			vqa1Minx = 1 / 3;
 			vqa1Miny = dq3 - dq2;
 		} else {
-			dqmin = [ 0.3333333333333333, dq1 ];
-			dqmax = [ 0.6666666666666666, dq2 ];
+			dqmin = [ 1 / 3, dq1 ];
+			dqmax = [ 2 / 3, dq2 ];
 			// apex is dq0 in this case, and the other apex point is dq3
 			// vector dqapex->dqapex2 or the base vector which is already part of c-hull
-			vqa1a2x = -1.0;
+			vqa1a2x = -1;
 			vqa1a2y = dq0 - dq3;
 			// vector dqapex->dqmax
-			vqa1Maxx = -0.6666666666666666;
+			vqa1Maxx = -2 / 3;
 			vqa1Maxy = dq0 - dq2;
 			// vector dqapex->dqmin
-			vqa1Minx = -0.3333333333333333;
+			vqa1Minx = -1 / 3;
 			vqa1Miny = dq0 - dq1;
 		}
 		// compare cross products of these vectors to determine, if
@@ -330,18 +330,18 @@ function _convexhull(dq0, dq1, dq2, dq3) {
 		if (vcrossa1Max_a1Min * vcrossa1a2_a1Min < 0) {
 			// Point [2/3, dq2] is inside the triangle and the convex hull is a triangle
 			Dt = [
-				[ 0.0, dq0, dqmax[0], dqmax[1] ],
-				[ dqmax[0], dqmax[1], 1.0, dq3 ],
-				[ 1.0, dq3, 0.0, dq0 ]
+				[ 0, dq0, dqmax[0], dqmax[1] ],
+				[ dqmax[0], dqmax[1], 1, dq3 ],
+				[ 1, dq3, 0, dq0 ]
 			];
 		} else {
 			// Convexhull is a quadrilateral and we need all lines in the correct order where
 			// line [0, q0, 1, q3] is part of the convex hull
 			Dt = [
-				[ 0.0, dq0, 0.3333333333333333, dq1 ],
-				[ 0.3333333333333333, dq1, 0.6666666666666666, dq2 ],
-				[ 0.6666666666666666, dq2, 1.0, dq3 ],
-				[ 1.0, dq3, 0.0, dq0 ]
+				[ 0, dq0, 1 / 3, dq1 ],
+				[ 1 / 3, dq1, 2 / 3, dq2 ],
+				[ 2 / 3, dq2, 1, dq3 ],
+				[ 1, dq3, 0, dq0 ]
 			];
 		}
 	}
@@ -408,8 +408,8 @@ var _getCurveLineIntersection = function(v1, v2, curve1, curve2, locations, _oth
 
 var _getLineLineIntersection = function(v1, v2, curve1, curve2, locations) {
 	var point = Line.intersect(
-						v1[0], v1[1], v1[6], v1[7],
-						v2[0], v2[1], v2[6], v2[7], false);
+			v1[0], v1[1], v1[6], v1[7],
+			v2[0], v2[1], v2[6], v2[7], false);
 	if (point) {
 		// Avoid duplicates when hitting segments (closed paths too)
 		var first = locations[0],