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

    @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 близкие к целочисленным значениям с некоторой погрешностью, можно округлять к ближайшему целому.
    Ответ написан
    Комментировать