Построение двумерной 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-кривая четвертого порядка:
Рис. 1
На рис. 2 приведена незамкнутая NURBS-кривая четвертого порядка, проходящая через крайние контрольные точки:
Рис. 2
На рис. 3 приведены три замкнутые NURBS-кривые различного порядка, построенные по одним и тем же контрольным точкам:
Рис. 3
На рис. 4 приведены три незамкнутые NURBS-кривые различного порядка, построенные по одним и тем же контрольным точкам:
Рис. 4
На рис. 5 приведены три незамкнутые NURBS-кривые четвертого порядка, имеющие различные значения весов контрольных точек:
Рис. 5
На рис. 6 приведена незамкнутая NURBS-кривая третьего порядка, по форме совпадающая с дугой окружности. Расстояние между контрольными точками pointList[0] и pointList[1] равно расстоянию между контрольными точками pointList[1] и pointList[2], а вес weightList[1] средней контрольной точки кривой равен весу крайних контрольных точек, умноженному на косинус половины угла дуги.
Рис. 6
Функция
MbResultType NurbsCopy( const MbCurve & curve,
MbCurve *& result );
выполняет построение NURBS-копии заданной двумерной кривой.
Входным параметром функции является исходная кривая curve.
Выходным параметром функции является построенная кривая result.
Рассматриваемая функция строит NURBS-кривую, форма которой копирует форму исходной кривой. Для большинства типов кривых NURBS-копия по форме полностью совпадает с исходной кривой. В случае невозможности точно воспроизвести форму исходной кривой NURBS-копия аппроксимирует исходную кривую.
В тестовом приложении test.exe построение двумерной NURBS-кривой выполняется командой меню «Создать→Кривую в пространстве→По точкам→NURBS».