Це здається, що ви хочете тримати швидкість об єкта на деякому постійному значенні по всій кривій - знаючи довжину дуги не допоможе вам це зробити. Це допоможе вам обчислити, в який час об’єкт досяг своєї кінцевої точки, якби він рухався з такою швидкістю, тож це буде краще, ніж у вас зараз (об’єкт матиме однакову середню швидкість між усіма точками), але фактична швидкість об'єкта все ще буде змінюватися в міру його переміщення по кривій.
Кращим рішенням було б змінити наш параметричний параметр (параметр, який переходить від 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 прямих і підсумовування їх довжин", як ви пропонуєте, це один дуже простий спосіб зробити це ; однак, є трохи складніші методи, які дадуть вам набагато більш точні результати, використовуючи менше рядкових сегментів.