unitsize(1cm); pair z0=(0,0), z1=(7,0), c0=(1,3), c1=(5,5); // On déduit du quadruplet de points précédents (z0, c0, c1, z1) // (par construction de 6 milieux) le point z2 sur la courbe de bézier. // En procédant de même pour les quadruplets (z0, m0, m3, z2) // et (z2, m4, m2, z1), on obtiendrait deux nouveaux points de la courbe, // et c'est en continuant ainsi, par récursivité, que la courbe est construite. pair m0=(z0+c0)/2, m1=(c0+c1)/2, m2=(c1+z1)/2, m3=(m0+m1)/2, m4=(m1+m2)/2, z2=(m3+m4)/2; // Courbe (spline) de Bézier cubique (définie par 4 points). path CourbeBezier = z0 .. controls c0 and c1 .. z1; draw(CourbeBezier,2bp+blue); // Les traits et points de construction path lignebrisee = z0 -- c0 -- c1 -- z1; draw(lignebrisee^^m0--m1--m2^^m3--m4,dashed); dot(lignebrisee^^m0--m1--m2^^m3--m4^^z2,5bp+red); // Pour finir, on ajoute le nom des points. label("$z_0$",z0,S); label("$z_1$",z1,S); label("$c_0$",c0,N); label("$c_1$",c1,N); label("$m_0$",m0,NW); label("$m_1$",m1,N); label("$m_2$",m2,NE); label("$m_3$",m3,N); label("$m_4$",m4,N); label("$z_2$",z2,N); shipout(bbox(3mm,white));