2014-12-19 2 views
2

Я разрабатываю 3D-графическое приложение, в котором пользователь может рисовать кривые. Я записываю кривую, которая нарисована пользователем, и я хотел бы создать гладкий nurb из записанного набора точек. Я попытался использовать библиотеку openNurbs, но не смог найти способ сделать фитинг с помощью библиотеки. Как я могу установить набор точек в nurb?Создание плавного nurb из списка точек

ответ

1

Прежде всего, я не думаю, что вам нужны nurbs. Приближение кривой B-сплайна к вашим точкам данных должно быть достаточно хорошим.

Если у вас всего несколько десятков точек, то, скорее всего, вы хотите, чтобы кривая B-сплайна точно проходила через эти точки данных. В этом случае вы ищете алгоритмы интерполяции сплайнов. Если это так, вы можете использовать сплайн Catmull Rom или сплайн Overhauser для интерполяции ваших точек данных. Оба будут создавать C1 кубические сплайны, и оба их легко реализовать без необходимости решения набора линейных уравнений.

Если у вас несколько сотен точек, то, скорее всего, вы хотите, чтобы кривая B-сплайна находилась близко к точкам данных. Затем алгоритм, который вы ищете, является наименее квадратным. В этой области вы можете найти множество статей (например, link1). Типичный алгоритм для наименьшего квадрата с B-сплайновой кривой будет включать следующие этапы:

1) Выберите параметризацию для своих точек данных. Параметризация длины аккорда обычно является хорошим выбором для наименьшего квадрата.
2) Выберите степень для B-сплайна. Как правило, мы используем степень 3, то есть кубический B-сплайн.
3) Определите количество контрольных точек для вашего B-сплайна.
4) Определите вектор узла на основе информации в первые 3 шага.
5) Решите линейное уравнение, чтобы найти контрольные точки B-сплайна.

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