Я думаю, вы имели в виду класс QuadCurve2D, который является квадратичной кривой Безье.
Кажется, для этого нет готового метода, и проблема заключается в расстоянии от точки до кривой Безье.
Пусть P0 будет вашей точкой, P1
- начальная точка, P2
- контрольная точка, а P3
- конечная точка вашей кривой.
Тогда точка на кривой будет иметь вид
P = B(t)
Существует такой t
, для которого расстояние между P
и P0
будет минимальным.
F(t) = (B(t)_x - P0_x)^2 + (B(t)_y - P0_y)^2 -> min
Если расстояние равно 0 или меньше определенной ошибки, то P0 находится на кривой.
t можно найти с помощью итерационного метода Netwon, минимизировав функцию стоимости
t_n = t_n-1 + F'(t) / F''(t)
, где F'
- первая производная функции стоимости, а F''
- ее вторая производная.
F'(t) = 2 * (B(t)_x - P0_x) * B'(t)_x + 2 * (B(t)_y - P0_y) * B'(t)_y
F''(t) = 2 * B'(t)_x * B'(t)_x + 2 * (B(t)_x - P0_x) * B''(t)_x +
2 * B'(t)_y * B'(t)_y + 2 * (B(t)_y - P0_x) * B''(t)_y
Первая производная квадратичной кривой Безье B '(t) - это отрезок с начальной точкой (P2 - P1)
и конечной точкой (P3 - P2)
. Вторая производная B''(t)
является точкой P3 - 2 * P2 + P1
.
Объединение всего вместе даст формулу для t
, для которой F(t)
минимально.