@Jerryracoon

Можно ли из уравнения квадратной кривой Безье выразить значение параметра t?

У меня есть координаты трёх точек, с помощью которых строится кривая. Мне нужно найти координаты точек кривой для всех целочисленных x(т. е, для каждого целочисленного Х который входит в заданный промежуток нужно найти значение y).
Я хочу для каждого целого значения Х найти значение параметра t, а затем подставить его в уравнение для y. Можно ли это сделать?
  • Вопрос задан
  • 154 просмотра
Решения вопроса 1
@alexalexes
Можно.
Для трех точек кривая Безье описывается как:
P = (1−t)^2*P1 + 2(1−t)*t*P2 + t^2*P3
Для координат X уравнение примет вид:
X = (1−t)^2*X1 + 2(1−t)*t*X2 + t^2*X3.
X - эта координата на кривой Безье, и X1, X2, X3 - это координаты X опорных точек.
Очевидно, что X будет перебираться в области min(X1,X2,X3) до max(X1,X2,X3), но не факт что каждый X даст точку (или сразу две точки) на кривой Безье.
Получается, что X1,X2,X3 - вы задаете сами, а X перебираете исходя из условия выше.
Осталось разобраться, как найти t.
Перепишем уравнение, чтобы известные координаты стали константами квадратного уравнения.
X = X1 - 2*X1 + X1*t^2 + 2*X2*t - 2* X2 * t^2 + t^2*X3
X = (X1 - 2*X2 + X3) * t^2 + 2 * (X2 - X1) * t + X1
Получается квадратное уравнение:
(X1 - 2*X2 + X3) * t^2 + 2 * (X2 - X1) * t + X1 - X = 0
Коэф, которого:
a = X1 - 2*X2 + X3
b = 2 * (X2 - X1)
c = X1 - X
Решаете его, получаете 2 решения.
Если есть решение с t в отрезке от 0 до 1, значит точка определена на кривой Безье (могут быть оба решения входить в отрезок 0,1 - это две разные точки!).
Зная t, можно найти Y координату:
Y = (1−t)^2*Y1 + 2(1−t)*t*Y2 + t^2*Y3
Если решение уравнения не входит в данный отрезок, либо нет решения с действительным числом (дискриминант оказался отрицательным), то на данной координате X нет точки на кривой Безье.
PS: Скорее всего вы найдете Y близкие к целочисленным значениям с некоторой погрешностью, можно округлять к ближайшему целому.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы