2016-06-01 6 views
0

Как интерполировать заданный набор n точек и его производных с использованием сплайна Безье?Интерполяция сплайна безье

В настоящее время я использую библиотеку (SDL_gfx), которая имеет функцию bezierRGBA(), которая рисует кривую Безье с учетом ее контрольных точек.

Я искал в Интернете, но мне не ясно, как получить контрольные точки безье от заданного набора точек и его производных.

+0

Что вы имеете в виду контрольные точки безье от заданного набора точек? Если вы хотите иметь кривую Безье, вам нужно знать ее контрольные точки. –

+0

Не удается определить контрольные точки касательными? Точки в этом случае известны ** положениями ** тела с течением времени. Я надеялся нарисовать предполагаемую траекторию, используя последовательные кривые Безье. Скорость тела (первая производная) доступна для каждой точки. – Hydren

+1

Кривые Безье не интерполируют точки, кроме первой и последней ... Если вы хотите интерполировать, вы можете использовать Catmull-Rom, например ... Вы можете поместить кривую Безье на множество точек, хотя .. Это происходит при решении системы наименьших квадратов для нахождения контрольных точек ... Это может быть сформировано для траекторий или фактических точек ... –

ответ

0

В кривой Безье у вас есть набор контрольных точек P, которые умножаются на полиномы Бернштейна, которые определены по параметру u. Точкой на кривой Безье является Q (u) = sum (i от 0 до d) Pi * Bi, d, в которой d - количество контрольных точек и также определяет степень. Вы можете проверить мой сайт: http://pages.cpsc.ucalgary.ca/~amahdavi/pmwiki-2.2.8/uploads/Site/last1.pdf, чтобы увидеть фактическую формулу. Вы можете найти формулу касательной и эффективный способ реализации кривых Безье (алгоритм де Кастеляу)

+1

Это плохое объяснение. http://cubic-bezier.com/, https://www.jasondavies.com/animated-bezier, и https://pomax.github.io/bezierinfo - гораздо лучшие места для отправки людей. –

+0

Это веб-сайт университета, который я уверен в его содержании. Если у вас есть лучший ответ, вы можете отправить его в качестве другого ответа здесь. –

+0

@ Mike'Pomax'Kamermans Я читаю ваш сайт. Это довольно интересно. Вы должны отправить свой ответ в качестве ответа, чтобы он был доступен другим. О комментарии к интерполяции, как вы знаете, кривые Безье являются результатом линейной интерполяции контрольных точек. Однако они не интерполируют свои контрольные точки. Поэтому они не интерполируются. Поэтому, если у вас есть набор точек для интерполирования, если вы берете их в качестве контрольных точек, ваша кривая Безье не проходит через них, что относится к этому вопросу (я считаю).Взгляните на мой сайт и сообщите мне, что youngink –

2

Если у вас есть вектор положения и вектор первой производной в каждой точке, вы можете легко создать кубическую кривую Безье в между двумя последовательными точками. Обозначая две точки, как P0 и P1 и первые производные в качестве р'0 и P'1, то управление кубической кривой Безье в точках Qi (I = 0 ~ 3) может быть найдена как

Q0=P0 
Q1=P'0/3 + P0 
Q2=P1-P'1/3 
Q3=P1 

Повторите этот процесс для каждой из двух последовательных точек (и первых производных) ваших точек данных, и вы получите серию кубических кривых Безье, которые соединены с помощью C1.

+0

Спасибо fang, с вашими уравнениями полученная кривая работала и действительно имела параметрическую непрерывность C1, но она была слишком осциллирующей. Знаете ли вы какие-либо уравнения для получения контрольных точек для ** квадратичной кривой безье? Я думаю, что он должен лучше соответствовать форме траектории. – Hydren

+0

Если кривая колеблется слишком сильно, она, как правило, из-за величины первых производных слишком велика. Если вы знаете, что это не фактические первые производные векторы, а только касательные векторы (т. Е. Величина действительно нерешина), есть хороший способ определить «хорошие» величины для уменьшения колебаний. – fang

+0

Вы не всегда можете выбрать квадратичную кривую Безье из двух точек и двух первых производных, например, когда две первые производные параллельны друг другу, но не к прямой, определяемой двумя конечными точками. – fang

 Смежные вопросы

  • Нет связанных вопросов^_^