aboutsummaryrefslogtreecommitdiffhomepage
path: root/experimental/Intersection/CurveIntersection.h
diff options
context:
space:
mode:
authorGravatar caryclark@google.com <caryclark@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-02-03 22:07:47 +0000
committerGravatar caryclark@google.com <caryclark@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-02-03 22:07:47 +0000
commitc682590538a27d73489bc91c098e000fdfb07ccf (patch)
tree90b03195e3a74cf47f4fa3a385e99575c46da37b /experimental/Intersection/CurveIntersection.h
parent2c23708e4478a83dcded2e9d5672bc57ee016919 (diff)
save work in progress
git-svn-id: http://skia.googlecode.com/svn/trunk@3141 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'experimental/Intersection/CurveIntersection.h')
-rw-r--r--experimental/Intersection/CurveIntersection.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/experimental/Intersection/CurveIntersection.h b/experimental/Intersection/CurveIntersection.h
new file mode 100644
index 0000000000..d6ca837881
--- /dev/null
+++ b/experimental/Intersection/CurveIntersection.h
@@ -0,0 +1,34 @@
+#include "DataTypes.h"
+
+class Intersections;
+
+// unit-testable utilities
+bool bezier_clip(const Cubic& cubic1, const Cubic& cubic2, double& minT, double& maxT);
+bool bezier_clip(const Quadratic& q1, const Quadratic& q2, double& minT, double& maxT);
+void chop_at(const Cubic& src, CubicPair& dst, double t);
+void chop_at(const Quadratic& src, QuadraticPair& dst, double t);
+int convex_hull(const Cubic& cubic, char order[4]);
+bool convex_x_hull(const Cubic& cubic, char connectTo0[2], char connectTo3[2]);
+bool implicit_matches(const Cubic& cubic1, const Cubic& cubic2);
+bool implicit_matches(const _Line& line1, const _Line& line2);
+bool implicit_matches(const Quadratic& quad1, const Quadratic& quad2);
+void sub_divide(const Cubic& src, double t1, double t2, Cubic& dst);
+void sub_divide(const _Line& src, double t1, double t2, Cubic& dst);
+void sub_divide(const Quadratic& src, double t1, double t2, Quadratic& dst);
+void tangent(const Cubic& cubic, double t, _Point& result);
+void tangent(const _Line& line, _Point& result);
+void tangent(const Quadratic& quad, double t, _Point& result);
+
+// main functions
+enum ReduceOrder_Flags {
+ kReduceOrder_NoQuadraticsAllowed,
+ kReduceOrder_QuadraticsAllowed
+};
+int reduceOrder(const Cubic& cubic, Cubic& reduction, ReduceOrder_Flags );
+int reduceOrder(const _Line& line, _Line& reduction);
+int reduceOrder(const Quadratic& quad, Quadratic& reduction);
+int horizontalIntersect(const Cubic& cubic, double y, double tRange[3]);
+bool intersect(const Cubic& cubic1, const Cubic& cubic2, Intersections& );
+int intersect(const Cubic& cubic, const _Line& line, double cRange[3], double lRange[3]);
+bool intersect(const Quadratic& q1, const Quadratic& q2, Intersections& );
+bool intersect(const Quadratic& quad, const _Line& line, Intersections& );