Made Bezier code slightly more easy to read

master
Marius Kintel 2015-03-12 19:34:36 -04:00
parent 72ca3c849d
commit c2cb2377f5
2 changed files with 9 additions and 10 deletions

View File

@ -95,24 +95,27 @@ void DrawingCallback::line_to(Vector2d to)
pen = to; pen = to;
} }
// Quadric Bezier curve
void DrawingCallback::curve_to(Vector2d c1, Vector2d to) void DrawingCallback::curve_to(Vector2d c1, Vector2d to)
{ {
for (unsigned long idx = 1;idx <= fn;idx++) { for (unsigned long idx = 1;idx <= fn;idx++) {
const double a = idx * (1.0 / (double)fn); const double a = idx * (1.0 / (double)fn);
const double x = pen[0] * t(a, 2) + c1[0] * 2 * t(a, 1) * a + to[0] * a * a; add_vertex(pen * pow(1-a, 2) +
const double y = pen[1] * t(a, 2) + c1[1] * 2 * t(a, 1) * a + to[1] * a * a; c1 * 2 * pow(1-a, 1) * a +
add_vertex(Vector2d(x, y)); to * pow(a, 2));
} }
pen = to; pen = to;
} }
// Cubic Bezier curve
void DrawingCallback::curve_to(Vector2d c1, Vector2d c2, Vector2d to) void DrawingCallback::curve_to(Vector2d c1, Vector2d c2, Vector2d to)
{ {
for (unsigned long idx = 1;idx <= fn;idx++) { for (unsigned long idx = 1;idx <= fn;idx++) {
const double a = idx * (1.0 / (double)fn); const double a = idx * (1.0 / (double)fn);
const double x = pen[0] * t(a, 3) + c1[0] * 3 * t(a, 2) * a + c2[0] * 3 * t(a, 1) * a * a + to[0] * a * a * a; add_vertex(pen * pow(1-a, 3) +
const double y = pen[1] * t(a, 3) + c1[1] * 3 * t(a, 2) * a + c2[1] * 3 * t(a, 1) * a * a + to[1] * a * a * a; c1 * 3 * pow(1-a, 2) * a +
add_vertex(Vector2d(x, y)); c2 * 3 * pow(1-a, 1) * pow(a, 2) +
to * pow(a, 3));
} }
pen = to; pen = to;
} }

View File

@ -56,8 +56,4 @@ private:
std::vector<const class Geometry *> polygons; std::vector<const class Geometry *> polygons;
void add_vertex(Vector2d v); void add_vertex(Vector2d v);
inline double t(double t, int exp) const {
return pow(1.0 - t, exp);
}
}; };