Можно ли получить значение у кривой кубического Безье на основе значения х?

Я работаю с кривыми Безье для представления волновых данных для аудио. Затем я хочу сэмплировать волну с координатой x и получить координату y, чтобы затем преобразовать ее в данные PCM. Теперь, поскольку кривая Безье представлена ​​параметрическим уравнением, это может создавать проблемы, поскольку может быть несколько значений y и значения x, но с помощью кривых, которые я бы выбрал, я могу гарантировать, что они соответствуют критериям функции, только они все еще представлены метрический. Итак, мой вопрос, есть ли способ непосредственно выбрать значение у на основе значения х? Если нет, то какой будет лучший способ сделать это? Моя лучшая идея сейчас - двигаться по кривой, пока я не достигну желаемого значения x, а затем использую это значение y, но это кажется медленным и неэффективным. Спасибо.

1 ответ

Решение

Да, это возможно, но это несколько сложно. Вы должны решить для t в данном x и затем вычислить y из t. Это может быть аппроксимировано методом Ньютона-Рафсона. Эта ссылка гораздо лучше объясняет, как ее реализовать: http://greweb.me/2012/02/bezier-curve-based-easing-functions-from-concept-to-implementation/

Другой вариант - использовать явную кривую Безье, а не параметрическую кривую Безье. Явное значение, что у является функцией х (т. Е. У = F (х)). В отличие от параметрического уравнения, где и x, и y являются функциями t (то есть x=f(t) и y=f(t)). Пока значения x контрольных точек расположены равномерно, кривая является явной, и вы можете считать, что x=t.

РЕДАКТИРОВАТЬ: я должен отметить, что мое утверждение равнорасположенных координат х означает, что х = т является чрезмерным упрощением. Это было бы верно, если бы координаты x были равномерно распределены между 0 и 1. В противном случае вам необходимо преобразовать координату x в значение между 0 и 1. Например, если координаты x были равномерно расположены и расположены в 3,4,5,6 тогда t = (x - 3) / (6 - 3).

Другие вопросы по тегам