Построение двумерной NURBS-кривой

Функция

MbResultType NurbsCurve( const SArray<MbCartPoint> & pointList,
                         const SArray<double> &      weightList,
                               size_t                degree,
                         const SArray<double> &      knotList,
                               bool                  curveClosed,
                               MbCurve *&            result );

выполняет построение двумерной NURBS-кривой на заданном множестве контрольных точек.

Входными параметрами функции являются:

  • pointList - множество контрольных точек;

  • weightList - множество весов контрольных точек;

  • degree - порядок B-сплайна;

  • knotList - множество параметрических узлов (узловой вектор);

  • curveClosed - флаг циклической замкнутости кривой.

Выходным параметром функции является построенная кривая result.

При успешном завершении работы функция возвращает rt_Success, в противном случае функция возвращает код ошибки из перечисления MbResultType.

Функция объявлена в файле action_curve.h.

Рассматриваемая функция строит NURBS-кривую (кривую на основе B-сплайнов), которая описана в подразделе Двумерная NURBS-кривая MbNurbs.

Множество весов weightList должно быть согласовано с множеством контрольных точек pointList.

Порядок degree кривой не должен превосходить количество контрольных точек.

Параметр curveClosed определяет циклическую замкнутость построенной кривой.

Узловой вектор knotList представляет собой неубывающую последовательность действительных чисел и определяет область определения параметра кривой и форму кривой.

Для curveClosed = false узловой вектор должен содержать число элементов, равное числу контрольных точек плюс порядок кривой.

Для curveClosed = true узловой вектор должен содержать число элементов, равное числу контрольных точек плюс удвоенный порядок кривой и минус единица.

Чтобы незамкнутая NURBS-кривая проходила через крайние контрольные точки, необходимо, чтобы первые degree элементов узлового вектора knotList были равны между собой и последние degree элементов узлового вектора knotList были равны между собой.

На рис. 1 приведена замкнутая NURBS-кривая четвертого порядка:

../../../../_images/M.3.4.1.png

Рис. 1

На рис. 2 приведена незамкнутая NURBS-кривая четвертого порядка, проходящая через крайние контрольные точки:

../../../../_images/M.3.4.2.png

Рис. 2

На рис. 3 приведены три замкнутые NURBS-кривые различного порядка, построенные по одним и тем же контрольным точкам:

../../../../_images/M.3.4.3.png

Рис. 3

На рис. 4 приведены три незамкнутые NURBS-кривые различного порядка, построенные по одним и тем же контрольным точкам:

../../../../_images/M.3.4.4.png

Рис. 4

На рис. 5 приведены три незамкнутые NURBS-кривые четвертого порядка, имеющие различные значения весов контрольных точек:

../../../../_images/M.3.4.5.png

Рис. 5

На рис. 6 приведена незамкнутая NURBS-кривая третьего порядка, по форме совпадающая с дугой окружности. Расстояние между контрольными точками pointList[0] и pointList[1] равно расстоянию между контрольными точками pointList[1] и pointList[2], а вес weightList[1] средней контрольной точки кривой равен весу крайних контрольных точек, умноженному на косинус половины угла дуги.

../../../../_images/M.3.4.6.png

Рис. 6

Функция

MbResultType NurbsCopy( const MbCurve &   curve,
                              MbCurve *&  result );

выполняет построение NURBS-копии заданной двумерной кривой.

Входным параметром функции является исходная кривая curve.

Выходным параметром функции является построенная кривая result.

Рассматриваемая функция строит NURBS-кривую, форма которой копирует форму исходной кривой. Для большинства типов кривых NURBS-копия по форме полностью совпадает с исходной кривой. В случае невозможности точно воспроизвести форму исходной кривой NURBS-копия аппроксимирует исходную кривую.

В тестовом приложении test.exe построение двумерной NURBS-кривой выполняется командой меню «Создать→Кривую в пространстве→По точкам→NURBS».