C'est plus une question mathématique. Ainsi, une courbe de Bézier a la formule suivante , à la fois dans le composant xet y.
B_x(t) = (1-t)^3 * P0_x + (1-t)^2 * t * P1_x + (1-t) * t^2 * P2_x + t^3 * P3_x
B_y(t) = (1-t)^3 * P0_y + (1-t)^2 * t * P1_y + (1-t) * t^2 * P2_x + t^3 * P3_y
La longueur parcourue le tlong d'une courbe gammaest donnée par:
length_gamma(t) = integration( sqrt( derivative( gamma_x(s) ) ^2 + derivative( gamma_y(s) ) ^2 ) )
Il n'y a pas de solution inscriptible par l'homme à l'intégrale, vous devez donc approximer.
Remplacez l' gamma(t)expression par B(t)pour obtenir la longueur length_Bparcourue le tlong du segment de Bézier. Disons que ça voyage de 0à L.
Choisissez maintenant des nvaleurs comprises entre 0et Lqui correspondent aux points régulièrement espacés. Par exemple, les longueurs du formulaire k*L/npour kde 0à n.
Vous devez maintenant inverser la fonction length_B, afin de pouvoir calculer le tdos à partir de la longueur l. C'est beaucoup de mathématiques et je suis paresseux comme l'enfer, essayez de le faire vous-même. Si vous ne le pouvez pas, vous pouvez accéder à l' échange de pile mathématique . Pour une réponse plus complète, vous pouvez quand même vous y rendre.
Une fois que vous avez cette length_Bfonction inverse (ou une approximation raisonnable), votre processus est assez simple.
- Créez des longueurs
l[k]de distance de chemin données à partir de l'origine (P0_x,P1_x).
- Calculez leur
t[k]utilisation correspondante length_B_inverse.
- Positionner les points en utilisant
(B_x(t[k]),B_y(t[k])).
t, disons, 100 pas, et mesurez les distances entre les points résultants. Ensuite, interpolez le long de cette polyligne comme vous le souhaitez.