Это больше математический вопрос. Таким образом, кривая Безье имеет следующую формулу , как в компоненте , так xи в 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
Длина, пройденная tпо кривой gamma, определяется как:
length_gamma(t) = integration( sqrt( derivative( gamma_x(s) ) ^2 + derivative( gamma_y(s) ) ^2 ) )
Нет понятного человеку решения для интеграла, поэтому вы должны приблизиться.
Замените на gamma(t)выражение, B(t)чтобы получить длину, length_Bпройденную tвдоль сегмента Безье. Допустим, он путешествует из 0в L.
Теперь выберите nзначения между 0и Lкоторые соответствуют равномерно распределенным точкам. Например, длины формы k*L/nдля kот 0до n.
Теперь вам нужно инвертировать функцию length_B, чтобы вы могли вычислить tспину по длине l. Это довольно много математики, и я чертовски ленив, попробуй сделать это сам. Если вы не можете, вы можете перейти к математике стек обмена . Для более полного ответа, вы можете пойти туда в любом случае.
Когда у вас есть эта обратная length_Bфункция (или разумное приближение), вы обрабатываете ее довольно просто.
- Создать длины
l[k]заданного пути пути от начала координат (P0_x,P1_x).
- Рассчитайте их соответствующее
t[k]использование length_B_inverse.
- Постановка точек с помощью
(B_x(t[k]),B_y(t[k])).
t, скажем, на 100 шагов, и измерить расстояния между полученными точками. Затем интерполируйте вдоль этой полилинии по желанию.