skia2/experimental/Intersection/QuadraticLineSegments.cpp
caryclark@google.com a7e483d130 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
2012-08-28 20:44:43 +00:00

35 lines
1.1 KiB
C++

/*
* Copyright 2012 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#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;
}