È più una domanda di matematica. Quindi, una curva di Bézier ha la seguente formula , sia nella xe ycomponente.
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 lunghezza percorsa tlungo una curva gammaè data da:
length_gamma(t) = integration( sqrt( derivative( gamma_x(s) ) ^2 + derivative( gamma_y(s) ) ^2 ) )
Non esiste una soluzione scrivibile dall'uomo all'integrale, quindi è necessario approssimarsi.
Sostituisci gamma(t)con l'espressione B(t)per ottenere la lunghezza length_Bpercorsa tlungo il segmento più bezier. Diciamo che viaggia da 0a L.
Ora scegli i nvalori tra 0e Lche corrispondono ai punti equidistanti. Ad esempio, lunghezze del modulo k*L/nper kda 0a n.
Ora è necessario invertire la funzione length_B, in modo da poter calcolare la parte tposteriore dalla lunghezza l. È un bel po 'di matematica e io sono pigro da morire, prova a farlo da solo. Se non ci riesci, puoi andare allo scambio di stack matematici . Per una risposta più completa, puoi comunque andare lì.
Una volta che hai quella length_Bfunzione inversa (o un'approssimazione ragionevole), il tuo processo è abbastanza semplice.
- Crea lunghezze
l[k]della distanza del percorso data lontano dall'origine (P0_x,P1_x).
- Calcola il loro
t[k]utilizzo corrispondente length_B_inverse.
- Positivo usando i punti
(B_x(t[k]),B_y(t[k])).
tdi, diciamo, 100 passi e misurando le distanze tra i punti risultanti. Quindi, interpolare lungo questa polilinea come desiderato.