Гладкая кривая Безье - PullRequest
       12

Гладкая кривая Безье

1 голос
/ 08 сентября 2011

Я хочу сгладить некоторые линии рисования руки в iphone. Я использовал следующий код в http://webdocs.cs.ualberta.ca/~graphics/books/GraphicsGems/gems/FitCurves.c

Однако я обнаружил, что некоторые кривые Безье были неправильными, вторая контрольная точка и конечная точка недопустимы. У кого-нибудь была такая же проблема раньше? Спасибо.

1 Ответ

2 голосов
/ 22 ноября 2012

Кривые Безье не предназначены для прохождения от до предоставленных вершин! Они предназначены для формирования плавной кривой под влиянием контрольных точек.

Сначала вы должны решить, хотите ли вы интерполировать пропущенные точки, или если вы хотите отфильтровать негладкие данные:

Фильтрация

Вы должны смотреть на «скользящее среднее» с небольшим окном усреднения. (попробуйте 5 - 10 пикселей). Это работает следующим образом: (ищите вики для подробного описания)

Я использую здесь среднее окно из 10 пунктов:
начать с вычисления среднего значения точек 0 - 9 и вывести результат в виде точки результата 0
затем вычислите среднее значение по точке 1 - 10 и выведите результат 1
И так далее.

Интерполяция Если вы хотите интерполировать между (отсутствующими) точками, используя плавную кривую, вы можете использовать кусочные сплайны:

Вы рассчитываете коэффициенты кубического многоугольника через 3 вершины. Вы начинаете с вычисления кубического многоугольника через:
Точка [0] - Точка [2], но вы выводите свой вывод только из Точки [0] в Точку [1].
Затем вы переходите на один шаг: и рассчитываете через
Точка [1] - Точка [3], но вы рисуете только от p1 до p2. И так далее.

Вам нужно найти в вики для кубической интерполяции подробное объяснение, как вычислять кубический многоугольник (иногда называемый кубическим сплайном).

...