Это больше математический вопрос. Таким образом, кривая Безье имеет следующую формулу , как в компоненте , так 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 шагов, и измерить расстояния между полученными точками. Затем интерполируйте вдоль этой полилинии по желанию.