Sepertinya Anda ingin menjaga kecepatan objek pada beberapa nilai konstan pada seluruh kurva - mengetahui panjang busur tidak akan membantu Anda melakukan ini. Ini akan membantu Anda menghitung pada waktu apa objek akan mencapai titik akhirnya jika bergerak dengan kecepatan itu, jadi itu akan lebih baik daripada apa yang Anda miliki sekarang (objek akan memiliki kecepatan rata-rata yang sama antara semua titik), tetapi kecepatan aktual objek masih akan bervariasi saat bergerak di sekitar kurva.
Solusi yang lebih baik adalah dengan mengubah parameter parametrik kami (parameter yang berubah dari 0 menjadi 1, yang akan saya panggil s
untuk menghindari kebingungan t = time
) pada laju variabel ds/dt
, yang ditentukan oleh kecepatan apa yang Anda inginkan dari objek yang akan dipindahkan. titik itu pada kurva. Jadi dengan kata lain, alih-alih mengubah s
0,01 setiap frame, kita dapat mengubahnya dengan 0,005 satu frame, 0,02 berikutnya, dll.
Kami melakukan ini dengan menghitung turunan dari x
( dx/ds
) dan y
( dy/ds
) setiap frame, lalu pengaturan
ds / dt = kecepatan / sqrt ((dx / ds) 2 + (dy / ds) 2 )
Yaitu, dengan mengambil kecepatan yang ingin kita tuju, dan membaginya dengan kecepatan yang sebenarnya kita tuju jika kita berubah s
dengan kenaikan tetap.
Bukti
Kami ingin kecepatan objek kami konstan; mari kita beri nama konstanta itu speed
.
Kita belajar dalam kalkulus tahun kedua itu, untuk persamaan parametrik x(s)
dan y(s)
,
kecepatan = sqrt ((dx / dt) 2 + (dy / dt) 2 )
Kami juga belajar itu
dx / dt = dx / ds * ds / dt (aturan rantai)
Jadi,
kecepatan = sqrt ((dx / ds) 2 (ds / dt) 2 + (dy / ds) 2 (ds / dt) 2 )
Memecahkan untuk ds/dt
, kita mendapatkan persamaan yang dinyatakan.
Menghitung turunannya
Saya tidak pernah bekerja dengan splines khusus itu, tapi saya mengerti mereka hanya memberi x(s)
dan y(s)
dalam hal persamaan kubik s
. Dengan demikian, kita dapat menemukan turunannya dx/ds
dengan mudah: jika
x (s) = a * s 3 + b * s 2 + c * s + e
kemudian
dx / ds = 3a * s 2 + 2b * s + c
(Sama untuk dy/ds
) Tentu saja, Anda harus tahu nilai-nilai yang tepat dari a
, b
, dan c
untuk melakukan hal ini. Menurut halaman ini , nilai-nilai itu mudah ditemukan.
Akhirnya, untuk menjawab pertanyaan dalam judul: menemukan persamaan panjang busur dari fungsi parametrik melibatkan penyelesaian integral tertentu yang cukup rumit ; bahkan untuk kasus sederhana dari persamaan kubik, ini umumnya tidak dapat dilakukan.
Dengan demikian, Anda harus memperkirakan integral secara numerik . "Memotong spline menjadi 10 garis lurus dan menjumlahkan panjangnya" seperti yang Anda sarankan adalah salah satu cara yang sangat sederhana untuk melakukan ini ; namun, ada metode yang sedikit lebih rumit yang akan memberi Anda hasil yang jauh lebih akurat menggunakan lebih sedikit segmen-garis.