class CubicBezier { pt p0 = new pt(0,0); pt p1 = new pt(0,0); pt p2 = new pt(0,0); pt p3 = new pt(0,0); CubicBezier() { p0.setTo(new pt(0,0)); p1.setTo(new pt(0,0)); p2.setTo(new pt(0,0)); p3.setTo(new pt(0,0)); } CubicBezier(pt _p0, pt _p1, pt _p2, pt _p3) { p0.setTo(_p0); p1.setTo(_p1); p2.setTo(_p2); p3.setTo(_p3); } CubicBezier make() { return new CubicBezier(p0, p1, p2, p3); } pt evaluate(float t) { float x = (1-t) * (1-t) * (1-t) * p0.x + 3 * t * (1-t) * (1-t) * p1.x + 3 * t * t * (1-t) * p2.x + t * t * t * p3.x; float y = (1-t) * (1-t) * (1-t) * p0.y + 3 * t * (1-t) * (1-t) * p1.y + 3 * t * t * (1-t) * p2.y + t * t * t * p3.y; return new pt(x,y); } /* QuadraticBezier derivate() { pt q0 = p1; q0.subPt(p0); q0.mul(3); pt q1 = p2; q1.subPt(p1); q1.mul(3); pt q2 = p3; q2.subPt(p2); q2.mul(3); return new QuadraticBezier(q0, q1, q2); }*/ } /*class QuadraticBezier { pt q0 = new pt(0,0); pt q1 = new pt(0,0); pt q2 = new pt(0,0); QuadraticBezier(pt _q0, pt _q1, pt _q2) { q0.setTo(_q0); q1.setTo(_q1); q2.setTo(_q2); } pt evaluate(float t) { float x = (1-t) * (1-t) * q0.x + 2 * t * (1-t) * q1.x + t * t * q2.x; float y = (1-t) * (1-t) * q0.y + 2 * t * (1-t) * q1.y + t * t * q2.y; return new pt(x,y); } }*/