shape ops work in progress
working on quad/quad intersection
git-svn-id: http://skia.googlecode.com/svn/trunk@5326 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/experimental/Intersection/QuadraticLineSegments.cpp b/experimental/Intersection/QuadraticLineSegments.cpp
index ee6ffee..5e26d35 100644
--- a/experimental/Intersection/QuadraticLineSegments.cpp
+++ b/experimental/Intersection/QuadraticLineSegments.cpp
@@ -6,3 +6,29 @@
*/
#include "QuadraticLineSegments.h"
+// http://cagd.cs.byu.edu/~557/text/cagd.pdf 2.7
+// A hodograph is the first derivative curve
+void hodograph(const Quadratic& quad, _Line& hodo) {
+ hodo[0].x = 2 * (quad[1].x - quad[0].x);
+ hodo[0].y = 2 * (quad[1].y - quad[0].y);
+ hodo[1].x = 2 * (quad[2].x - quad[1].x);
+ hodo[1].y = 2 * (quad[2].y - quad[1].y);
+}
+
+// A 2nd hodograph is the second derivative curve
+void secondHodograph(const Quadratic& quad, _Point& hodo2) {
+ _Line hodo;
+ hodograph(quad, hodo);
+ hodo2.x = hodo[1].x - hodo[0].x;
+ hodo2.y = hodo[1].y - hodo[0].y;
+}
+
+// The number of line segments required to approximate the quad
+// see http://cagd.cs.byu.edu/~557/text/cagd.pdf 10.6
+double subDivisions(const Quadratic& quad) {
+ _Point hodo2;
+ secondHodograph(quad, hodo2);
+ double dist = sqrt(hodo2.x * hodo2.x + hodo2.y * hodo2.y);
+ double segments = sqrt(dist / (8 * FLT_EPSILON));
+ return segments;
+}