Квадратичная c Кривая Безье может быть наилучшим образом представлена алгоритмом Де Кастельжау . Таким образом, для заданного t
между 0
и 1
точка p
на кривой определяется как:
- точка
q
между a
и b
: q = t*a + (1-t)*b
- точка
r
между b
и c
: r = t*b + (1-t)*c
- , тогда точка p равна
r = t*q + (1-t)*r
Итак, кривая Безье создается путем интерполяции между точками, которые, в свою очередь, также интерполируются. (Обратите внимание, что в отличие от первого изображения, ваше второе изображение не использует тот же t
для 3 интерполяций.)
В 2D у вас есть 2 уравнения для p
(одно для x
и один для своего y
). Допустим, указаны a
, c
и p
. Затем у вас есть 3 неизвестных: t
и x
и y
из b
. Решение уравнения даст b = (a*t^2 + c*t^2 - 2*c*t + c - p)/(2*t*(t - 1))
. Это означает, что b
может быть где угодно на сложной кривой. Чтобы исправить b
, вы можете выбрать фиксированное значение для t
, например 1/2
. Затем b = 2*p - (a + c)/2
.
Другие способы ограничения b
могут предполагать, что p
является самой дальней точкой на кривой. Это сделало бы (q,r)
параллельным (a,c)
и привело бы к немного более сложным уравнениям ((rx - qx) * (cy - ay) == (ry - qy) * (cx - ax)
). Наверное, их нужно решать численно.