From c2cb2377f5dc0b86faaa4a793fb901b0fcd56de8 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Thu, 12 Mar 2015 19:34:36 -0400 Subject: [PATCH] Made Bezier code slightly more easy to read --- src/DrawingCallback.cc | 15 +++++++++------ src/DrawingCallback.h | 4 ---- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/DrawingCallback.cc b/src/DrawingCallback.cc index 46a6d45947..6d7244722f 100644 --- a/src/DrawingCallback.cc +++ b/src/DrawingCallback.cc @@ -95,24 +95,27 @@ void DrawingCallback::line_to(Vector2d to) pen = to; } +// Quadric Bezier curve void DrawingCallback::curve_to(Vector2d c1, Vector2d to) { for (unsigned long idx = 1;idx <= fn;idx++) { 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; - const double y = pen[1] * t(a, 2) + c1[1] * 2 * t(a, 1) * a + to[1] * a * a; - add_vertex(Vector2d(x, y)); + add_vertex(pen * pow(1-a, 2) + + c1 * 2 * pow(1-a, 1) * a + + to * pow(a, 2)); } pen = to; } +// Cubic Bezier curve void DrawingCallback::curve_to(Vector2d c1, Vector2d c2, Vector2d to) { for (unsigned long idx = 1;idx <= fn;idx++) { 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; - 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; - add_vertex(Vector2d(x, y)); + add_vertex(pen * pow(1-a, 3) + + c1 * 3 * pow(1-a, 2) * a + + c2 * 3 * pow(1-a, 1) * pow(a, 2) + + to * pow(a, 3)); } pen = to; } diff --git a/src/DrawingCallback.h b/src/DrawingCallback.h index 825b1b8ce5..7b58bdb0f3 100644 --- a/src/DrawingCallback.h +++ b/src/DrawingCallback.h @@ -56,8 +56,4 @@ class DrawingCallback { std::vector polygons; void add_vertex(Vector2d v); - - inline double t(double t, int exp) const { - return pow(1.0 - t, exp); - } };