NURBS-поверхность MbSplineSurface
Класс MbSplineSurface объявлен в файле surf_spline_surface.h.
NURBS-поверхность (NonUniform Rational B-Spline поверхность) MbSplineSurface описывается контрольными точками SArray<MbCartPoint3D> points[i][j], i = 0, 1, …, vcount − 1, j = 0, 1, …, ucount − 1, условно расположенными в узлах прямоугольной таблицы с ucount колонками и vcount строками, весами контрольных точек, заданных в таблице weight[i][j], порядком B-сплайнов вдоль первого параметра поверхности udegree, порядком B-сплайнов вдоль второго параметра поверхности vdegree, узловым вектором вдоль первого параметра uknots, узловым вектором вдоль второго параметра vknots, признаками периодичности поверхности по первому и второму параметрам uclosed и vclosed. У поверхности есть ещё некоторые данные, которые не обязательны и служат для ускорения работы методов поверхности.
Порядок B-сплайнов вдоль параметров поверхности совпадает с порядком разделённой разности, по которой вычисляются соответствующие B-сплайны. Узловые векторы uknots и vknots представляют собой неубывающие последовательности действительных чисел и определяют область определения параметров поверхности и её форму. Пусть узловой вектор uknots содержит uknotsCount элементов, а количество точек в каждой строке прямоугольной таблицы равно ucount. Для непериодической по первому параметру NURBS-поверхности количества элементов в множествах связаны равенством ucount + degree = uknotsCount. Для периодической NURBS-поверхности количество элементов в множествах связаны равенством knotsCount + 2 degree − 1 = knotsCount.
В методе PointOn( double u, double v, MbCartPoint3D & s ) радиус-вектор поверхности s описывается векторной функцией
где \(N_i^{vdegree}(v)\) и \(N_j^{udegree}(u)\) — B‑сплайны.
На рис. 1 приведены отрезки, связывающие соседние контрольные точки points[i][j].
Рис. 1
Рис. 1 демонстрирует условное расположение контрольных точек в узлах прямоугольной таблицы. NURBS-поверхность, построенная на тех же контрольных точках, приведена на рис. 2:
Рис. 2
Кривые на поверхности s(const, v) и s(u, const) с параметрами u = const или v = const представляют собой B-кривые степени udegree и vdegree соответственно. По первому параметру поверхность имеет порядок udegree, а по второму параметру поверхность имеет порядок vdegree. Область изменения параметров непериодической NURBS-поверхности представляет собой прямоугольник: uknots[udegree − 1] ≤ u ≤ uknots[ucount], vknots[vdegree − 1] ≤ v ≤ vknots[vcount].
Поверхность может быть периодической как по первому параметру, так и по второму параметру. Для периодически замкнутой поверхности узловые векторы uknots и vknots имеют на udegree − 1 и vdegree − 1 элементов соответственно больше. Область изменения параметров периодической по обоим параметрам NURBS-поверхности представляет собой прямоугольник: uknots[udegree − 1] ≤ u ≤ uknots[ucount + udegree − 1], vknots[vdegree − 1] ≤ v ≤ vknots[vcount + vdegree − 1].
Каждая поверхность может построить свою NURBS-копию виртуальным методом NurbsSurface( const MbNurbsParameters & uParam, const MbNurbsParameters & vParam ).