+ Real x0123 = x123*t + x012*one_minus_t;
+
+ // Y Coordinates
+ Real y01 = y1*t + y0*one_minus_t;
+ Real y12 = y2*t + y1*one_minus_t;
+ Real y23 = y3*t + y2*one_minus_t;
+
+ Real y012 = y12*t + y01*one_minus_t;
+ Real y123 = y23*t + y12*one_minus_t;
+
+ Real y0123 = y123*t + y012*one_minus_t;
+
+ return Bezier(x0123, y0123, x123, y123, x23, y23, x3, y3);
+ }
+
+ Bezier ReParametrise(const Real& t0, const Real& 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]
+ Real new_t0 = t0 / t1;
+ //Debug("New t0 = %f", Double(new_t0));
+ new_bezier = new_bezier.DeCasteljauSubdivideRight(new_t0);
+
+ //Debug("%s becomes %s", this->Str().c_str(), new_bezier.Str().c_str());