Ini lebih merupakan pertanyaan matematika. Jadi kurva bezier memiliki rumus berikut , baik dalam komponen xdan 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
Panjang perjalanan tsepanjang kurva gammadiberikan oleh:
length_gamma(t) = integration( sqrt( derivative( gamma_x(s) ) ^2 + derivative( gamma_y(s) ) ^2 ) )
Tidak ada solusi yang dapat ditulis manusia untuk integral, jadi Anda harus memperkirakan.
Ganti gamma(t)dengan ekspresi B(t)untuk mendapatkan panjang yang length_Bditempuh tsepanjang segmen bezier. Katakanlah itu bergerak dari 0ke L.
Sekarang pilih nnilai antara 0dan Lyang sesuai dengan poin yang berjarak sama. Misalnya, panjang formulir k*L/nuntuk kdari 0hingga n.
Sekarang Anda perlu membalik fungsi length_B, sehingga Anda dapat menghitung tkembali dari panjangnya l. Ini matematika yang cukup banyak dan saya malas sekali, coba lakukan sendiri. Jika tidak bisa, Anda bisa pergi ke pertukaran stack matematika . Untuk jawaban yang lebih lengkap, Anda bisa tetap pergi ke sana.
Setelah Anda memiliki length_Bfungsi terbalik (atau perkiraan yang masuk akal), proses Anda cukup sederhana.
- Buat panjang
l[k]jarak jalur yang diberikan jauh dari titik asal (P0_x,P1_x).
- Hitung
t[k]penggunaannya sesuai length_B_inverse.
- Positing poin menggunakan
(B_x(t[k]),B_y(t[k])).
t, katakanlah, 100 langkah, dan mengukur jarak antara titik yang dihasilkan. Kemudian, interpolasi sepanjang polyline ini seperti yang diinginkan.