+ BReal x012 = x12*t + x01*one_minus_t;
+ BReal x123 = x23*t + x12*one_minus_t;
+
+ BReal x0123 = x123*t + x012*one_minus_t;
+
+ // Y Coordinates
+ BReal y01 = y1*t + y0*one_minus_t;
+ BReal y12 = y2*t + y1*one_minus_t;
+ BReal y23 = y3*t + y2*one_minus_t;
+
+ BReal y012 = y12*t + y01*one_minus_t;
+ BReal y123 = y23*t + y12*one_minus_t;
+
+ BReal y0123 = y123*t + y012*one_minus_t;
+
+ return Bezier(x0123, y0123, x123, y123, x23, y23, x3, y3);
+ }
+
+ Bezier ReParametrise(const BReal& t0, const BReal& t1)
+ {
+ //Debug("Reparametrise: %f -> %f",Double(t0),Double(t1));
+ Bezier new_bezier;
+ // Subdivide to get from [0,t1]
+ new_bezier = DeCasteljauSubdivideLeft(t1);
+ // Convert t0 from [0,1] range to [0, t1]
+ BReal new_t0 = t0 / t1;
+ //Debug("New t0 = %f", Double(new_t0));
+ new_bezier = new_bezier.DeCasteljauSubdivideRight(new_t0);