.. role:: blue :class: blue Построение двумерной NURBS-кривой ================================= .. _Constructing_Two-Dimensional_NURBS_Curve: .. версия ядра: 118058 Функция .. code-block:: cpp MbResultType NurbsCurve( const SArray & pointList, const SArray & weightList, size_t degree, const SArray & knotList, bool curveClosed, MbCurve *& result ); выполняет построение двумерной NURBS-кривой на заданном множестве контрольных точек. Входными параметрами функции являются: - **pointList** - множество контрольных точек; - **weightList** - множество весов контрольных точек; - **degree** - порядок B-сплайна; - **knotList** - множество параметрических узлов (узловой вектор); - **curveClosed** - флаг циклической замкнутости кривой. Выходным параметром функции является построенная кривая **result**. При успешном завершении работы функция возвращает :blue:`rt_Success`, в противном случае функция возвращает код ошибки из перечисления :ref:`MbResultType `. Функция объявлена в файле *action_curve.h*. Рассматриваемая функция строит NURBS-кривую (кривую на основе *B*-сплайнов), которая описана в подразделе :ref:`Двумерная NURBS-кривая MbNurbs `. Множество весов **weightList** должно быть согласовано с множеством контрольных точек **pointList**. Порядок **degree** кривой не должен превосходить количество контрольных точек. Параметр **curveClosed** определяет циклическую замкнутость построенной кривой. Узловой вектор **knotList** представляет собой неубывающую последовательность действительных чисел и определяет область определения параметра кривой и форму кривой. Для **curveClosed** = *false* узловой вектор должен содержать число элементов, равное числу контрольных точек плюс порядок кривой. Для **curveClosed** = *true* узловой вектор должен содержать число элементов, равное числу контрольных точек плюс удвоенный порядок кривой и минус единица. Чтобы незамкнутая NURBS-кривая проходила через крайние контрольные точки, необходимо, чтобы первые **degree** элементов узлового вектора **knotList** были равны между собой и последние **degree** элементов узлового вектора **knotList** были равны между собой. На рис. 1 приведена замкнутая NURBS-кривая четвертого порядка: .. figure:: /MODELER/TWO-DIMENSIONAL_CURVE_CONSTRUCTION_METHODS/pictures/M.3.4.1.png :width: 16cm :align: center Рис. 1 На рис. 2 приведена незамкнутая NURBS-кривая четвертого порядка, проходящая через крайние контрольные точки: .. figure:: /MODELER/TWO-DIMENSIONAL_CURVE_CONSTRUCTION_METHODS/pictures/M.3.4.2.png :width: 16cm :align: center Рис. 2 На рис. 3 приведены три замкнутые NURBS-кривые различного порядка, построенные по одним и тем же контрольным точкам: .. figure:: /MODELER/TWO-DIMENSIONAL_CURVE_CONSTRUCTION_METHODS/pictures/M.3.4.3.png :width: 16cm :align: center Рис. 3 На рис. 4 приведены три незамкнутые NURBS-кривые различного порядка, построенные по одним и тем же контрольным точкам: .. figure:: /MODELER/TWO-DIMENSIONAL_CURVE_CONSTRUCTION_METHODS/pictures/M.3.4.4.png :width: 16cm :align: center Рис. 4 На рис. 5 приведены три незамкнутые NURBS-кривые четвертого порядка, имеющие различные значения весов контрольных точек: .. figure:: /MODELER/TWO-DIMENSIONAL_CURVE_CONSTRUCTION_METHODS/pictures/M.3.4.5.png :width: 16cm :align: center Рис. 5 На рис. 6 приведена незамкнутая NURBS-кривая третьего порядка, по форме совпадающая с дугой окружности. Расстояние между контрольными точками **pointList**\[0\] и **pointList**\[1\] равно расстоянию между контрольными точками **pointList**\[1\] и **pointList**\[2\], а вес *weightList*\[1\] средней контрольной точки кривой равен весу крайних контрольных точек, умноженному на косинус половины угла дуги. .. figure:: /MODELER/TWO-DIMENSIONAL_CURVE_CONSTRUCTION_METHODS/pictures/M.3.4.6.png :width: 12cm :align: center Рис. 6 Функция .. code-block:: cpp MbResultType NurbsCopy( const MbCurve & curve, MbCurve *& result ); выполняет построение NURBS-копии заданной двумерной кривой. Входным параметром функции является исходная кривая **curve**. Выходным параметром функции является построенная кривая **result**. Рассматриваемая функция строит NURBS-кривую, форма которой копирует форму исходной кривой. Для большинства типов кривых NURBS-копия по форме полностью совпадает с исходной кривой. В случае невозможности точно воспроизвести форму исходной кривой NURBS-копия аппроксимирует исходную кривую. В тестовом приложении *test.exe* построение двумерной NURBS-кривой выполняется командой меню «Создать→Кривую в пространстве→По точкам→NURBS».