From 9b86de418e536b38bdf0d95e75413d57fd8f76b5 Mon Sep 17 00:00:00 2001 From: "Johan B. C. Engelen" Date: Sat, 23 Aug 2014 19:14:02 +0200 Subject: properly attribute code (bzr r13341.1.158) --- src/live_effects/lpe-powerstroke-interpolators.h | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src') diff --git a/src/live_effects/lpe-powerstroke-interpolators.h b/src/live_effects/lpe-powerstroke-interpolators.h index f08259eb3..986bd3544 100644 --- a/src/live_effects/lpe-powerstroke-interpolators.h +++ b/src/live_effects/lpe-powerstroke-interpolators.h @@ -203,11 +203,18 @@ private: CubicBezier calc_bezier(Point p0, Point p1, Point p2, Point p3) const { // create interpolating bezier between p1 and p2 + // Part of the code comes from StackOverflow user eriatarka84 + // http://stackoverflow.com/a/23980479/2929337 + // calculate time coords (deltas) of points + // the factor 0.25 can be generalized for other Catmull-Rom interpolation types + // see alpha in Yuksel et al. "On the Parameterization of Catmull-Rom Curves", + // --> http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf double dt0 = powf(distanceSq(p0, p1), 0.25); double dt1 = powf(distanceSq(p1, p2), 0.25); double dt2 = powf(distanceSq(p2, p3), 0.25); + // safety check for repeated points double eps = Geom::EPSILON; if (dt1 < eps) -- cgit v1.2.3