Це здається, що ви хочете тримати швидкість об єкта на деякому постійному значенні по всій кривій - знаючи довжину дуги не допоможе вам це зробити. Це допоможе вам обчислити, в який час об’єкт досяг своєї кінцевої точки, якби він рухався з такою швидкістю, тож це буде краще, ніж у вас зараз (об’єкт матиме однакову середню швидкість між усіма точками), але фактична швидкість об'єкта все ще буде змінюватися в міру його переміщення по кривій.
Кращим рішенням було б змінити наш параметричний параметр (параметр, який переходить від 0 до 1, який я закликаю, s
щоб уникнути плутанини t = time
) із змінною швидкістю ds/dt
, яка визначається якою швидкістю ви хочете, щоб об'єкт рухався з що точка на кривій. Отже, іншими словами, замість того, щоб змінювати s
по 0,01 кожен кадр, ми можемо змінити його на 0,005 одного кадру, 0,02 наступного тощо.
Ми робимо це, обчислюючи похідні x
( dx/ds
) і y
( dy/ds
) кожного кадру, а потім встановлюємо
ds / dt = швидкість / sqrt ((dx / ds) 2 + (dy / ds) 2 )
Тобто, приймаючи швидкість, яку ми хочемо йти, і ділимо на швидкість, якою ми насправді будемо їхати, якби ми змінювалися s
з фіксованим кроком.
Доказ
Ми хочемо, щоб швидкість нашого об’єкта була постійною; давайте назвемо цю постійну назву speed
.
З обчислення другого курсу ми дізнаємось, що для параметричних рівнянь x(s)
і y(s)
,
швидкість = sqrt ((dx / dt) 2 + (dy / dt) 2 )
Ми також це дізнаємось
dx / dt = dx / ds * ds / dt (правило ланцюга)
Таким чином,
швидкість = sqrt ((dx / ds) 2 (ds / dt) 2 + (dy / ds) 2 (ds / dt) 2 )
Розв’язуючи для ds/dt
, отримуємо наведене рівняння.
Розрахунок похідних
Я ніколи не працював з цими конкретними сплайнами, але я розумію, що вони просто дають x(s)
і y(s)
з точки зору кубічних рівнянь s
. Таким чином, ми можемо dx/ds
легко знайти похідну : якщо
x (s) = a * s 3 + b * s 2 + c * s + e
потім
dx / ds = 3a * s 2 + 2b * s + c
( Те ж саме для dy/ds
) Звичайно, вам потрібно знати точні значення a
, b
і c
зробити це. Відповідно до цієї сторінки , ці значення легко знайти.
Нарешті, щоб відповісти на запитання у заголовку: пошук рівняння довжини дуги параметричної функції передбачає розв’язання досить складного визначеного інтеграла ; Навіть для простого випадку кубічного рівняння це взагалі неможливо зробити.
Таким чином, вам доведеться оцінити інтеграл чисельно . "Розрізання сплайну на 10 прямих і підсумовування їх довжин", як ви пропонуєте, це один дуже простий спосіб зробити це ; однак, є трохи складніші методи, які дадуть вам набагато більш точні результати, використовуючи менше рядкових сегментів.