C'est plus une question mathématique. Ainsi, une courbe de Bézier a la formule suivante , à la fois dans le composant x
et 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 t
long d'une courbe gamma
est 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_B
parcourue le t
long du segment de Bézier. Disons que ça voyage de 0
à L
.
Choisissez maintenant des n
valeurs comprises entre 0
et L
qui correspondent aux points régulièrement espacés. Par exemple, les longueurs du formulaire k*L/n
pour k
de 0
à n
.
Vous devez maintenant inverser la fonction length_B
, afin de pouvoir calculer le t
dos à 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_B
fonction 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.