save work in progress

git-svn-id: http://skia.googlecode.com/svn/trunk@3141 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/experimental/Intersection/LineParameterization.cpp b/experimental/Intersection/LineParameterization.cpp
new file mode 100644
index 0000000..4455cf2
--- /dev/null
+++ b/experimental/Intersection/LineParameterization.cpp
@@ -0,0 +1,34 @@
+#include "CurveIntersection.h"
+
+/* This rejects coincidence with two muls, two adds, and one cmp.
+   Coincident candidates will take another four muls and two adds, but may still
+   fail if they don't overlap. (The overlap test isn't performed here.)
+ */
+bool implicit_matches(const _Line& one, const _Line& two) {
+    _Point oneD, twoD;
+    tangent(one, oneD);
+    tangent(two, twoD);
+    /* See if the slopes match, i.e. 
+                        dx1 / dy1 ==               dx2 / dy2
+          (dy1 * dy2) * dx1 / dy1 == (dy1 * dy2) * dx2 / dy2
+                 dy2  * dx1       ==  dy1        * dx2
+     */
+    if (!approximately_equal(oneD.x * twoD.y, twoD.x * oneD.y)) {
+        return false;
+    }
+    /* See if the axis intercepts match, i.e.
+               y0 - x0 * dy / dx  ==       y1 - x1 * dy / dx
+         dx * (y0 - x0 * dy / dx) == dx * (y1 - x1 * dy / dx)
+         dx *  y0 - x0 * dy       == dx *  y1 - x1 * dy
+     */
+    if (!approximately_equal(oneD.x * one[0].y - oneD.y * one[0].x,
+            oneD.x * two[0].y - oneD.y * two[0].x)) {
+        return false;
+    }
+    return true;
+}
+
+void tangent(const _Line& line,  _Point& result) {
+    result.x = line[0].x - line[1].x;
+    result.y = line[0].y - line[1].y;
+}