Основу метода Безье составляет аппроксимация многочленами Бернштейна. Однако можно выбрать и другие наборы базисных функций, например B-сплайны, по отношению к которым базис Бернштейна является частным случаем. В сравнении с многочленами Бернштейна B-сплайны обладают следующими дополнительными преимуществами [15], [16]:
1. Аппроксимация B-сплайнами обеспечивает более точное приближение ломаной, чем аппроксимация многочленами Бернштейна.
2. При аппроксимации методом Безье на значения координат каждой точки кривой оказывают влияние все вершины ломаной Безье. Это затрудняет корректирование отдельных участков кривой. В то же время аппроксимация B-сплайнами обладает желательной локальностью. Этим способом можно производить локальные изменения кривой без полного пересчета.
3. Единственным путем увеличения (уменьшения) порядка кривой Безье является увеличение (уменьшение) числа вершин и соответствующей ломаной Безье. В методе B-сплайнов эти два параметра независимы и, следовательно, могут быть выбраны произвольно.
Кривая, построенная на основе B-сплайн-базиса, описывается следующим образом [см. СПИСОК ЛИТЕРАТУРЫ]:
где - радиус-вектор точек на кривой, - вершины аппроксимируемой ломаной (всего вершин n+1), а Nik(t) - весовая функция i-й нормализованной B-сплайн базисной кривой порядка k (т. е. степени k-1), задаваемая рекуррентными соотношениями:
(5.13)
(5.14)
Здесь xi – элементы узлового вектора, а t – параметр, изменяющийся в диапазоне от 0 до tmax=(n – k+2).
Узловой вектор, длина которого (n+k+1), вводится для учета собственной кривизны B-сплайн-кривых и представляет собой неубывающую последовательность целых чисел - параметрических узлов. Узловой вектор определяется числом точек в аппроксимируемой ломаной, порядком кривой, а также наличием сложных (кратных) узлов.
Из (5.13) и (5.14) следует, что B-сплайн-кривая является полиномом степени (k–1) на каждом интервале (xi, xi+1) и что все ее производные до (k–2)-го порядка включительно непрерывны вдоль всей кривой. То есть эта кривая представляет собой сплайн-функцию порядка k (степени k–1).
На рис.5.9 изображены несколько B-сплайн-кривых различного порядка, аппроксимирующих ломаную с шестью вершинами. При этом кривая пятого порядка является кривой Безье для заданной ломаной, кривая четвертого порядка - кубическим сплайном, а кривая второго порядка - последовательностью связанных отрезков, совпадающих с исходной ломаной. Представляет интерес также кривая третьего порядка - она касается внутренних отрезков ломаной в их средних точках. Заметим, что с ростом порядка B-сплайн-кривые как бы спрямляются, их форма все в большей степени становится отличной от аппроксимируемой ломаной.
В формируемые кривые можно вносить изломы путем включения в соответствующую ломаную кратных вершин. Так, для образования излома в кривой третьего порядка необходима сдвоенная вершина (рис.5.10). А чтобы создать излом в кривой четвертого порядка, потребуется вершина с кратностью три и т. д.
Большое количество примеров, иллюстрирующих различные способы построения B-сплайн-кривых, читатель может найти в [см. СПИСОК ЛИТЕРАТУРЫ].
Аппроксимация B-сплайнами реализована в программах BSPLN2 и BSPLN3. Первая из них предназначена для формирования плоских, а вторая - пространственных B-сплайн-кривых.
Программа BSPLN2(K,XP,YP,NPLG,XC,YC,NPTS,WFUN,NWF,VKNOTS,NKNOTS) позволяет вычислить значения координат точек плоской B-сплайн-кривой, аппроксимирующей заданную совокупность точек. Программа имеет следующие параметры:
- K
- порядок аппроксимирующей кривой (ее степень равна K-1), 2 < K < NPLG;
- XP,YP
- векторы значений соответственно X-, и Y-координат заданной совокупности точек (аппроксимируемой ломаной) длины NPLG;
- NPLG
- число точек в аппроксимируемой ломаной;
- XC,YC
- векторы значений соответственно X-, и Y-координат аппроксимирующей B-сплайн-кривой (длины NPTS);
- NPTS
- число точек в аппроксимирующей B-сплайн-кривой;
- WFUN
- двумерный рабочий массив, предназначенный для размещения весовых функций B-сплайн-базиса, размером (NW,K);
- NWF
- максимальное значение, принимаемое первым индексом рабочего массива WFUN, NWF = (NPLG+K-1);
- VKNOTS
- одномерный рабочий массив, предназначенный для размещения элементов узлового вектора, длины NKNOTS;
- NKNOTS
- длина узлового вектора, NKNOTS = (NPLG+K).
Программа BSPLN3(K,XP,YP,ZP,NPLG,XC,YC,ZC,NPTS,WFUN,NWF,VKNOTS,NKNOTS) позволяет вычислить значения координат точек пространственной B-сплайн-кривой, аппроксимирующей заданную совокупность точек. Параметры программы следующие:
- XP,YP,ZP
- векторы значений соответственно X-, Y- и Z-координат заданной совокупности точек аппроксимируемой ломаной длины NPLG;
- XC,YC,ZC
- векторы значений соответственно X-,Y- и Z-координат аппроксимирующей B-сплайн-кривой длины NPTS.
Остальные параметры имеют то же значение, что и в программе BSPLN2.
В программах BSPLN2 и BSPLN3 используются служебные программы KNOTV2(K,XP,YP,NPLG,VKNOTS,NKNOTS) и KNOTV3(K,XP,YP,ZP,NPLG,VKNOTS,NKNOTS) с помощью которых строятся узловые векторы соответственно для двумерного и трехмерного случаев. Параметры этих программ имеют то же значение, что и в программах BSPLN2 и BSPLN3.
Ниже приведена программа, с помощью которой выполнялось построение рис.5.10.
REAL XP(6),YP(6) REAL XC1(41),YC1(41),XC2(41),YC2(41),XC3(41),YC3(41) REAL WF1(8,3),WF2(10,5),WF3(11,6),VK(13) DATA XP/2.,1.,2*5.,9.,8./ DATA YP/9.,5.,2*1.,5.,9./,NP,NS/6,41/ CALL BSPLN2(3,XP,YP,NP,XC1,YC1,NS,WF1,8,VK,9) CALL BSPLN2(5,XP,YP,NP,XC2,YC2,NS,WF2,10,VK,11) CALL BSPLN2(6,XP,YP,NP,XC3,YC3,NS,WF3,11,VK,12) CALL PAGE(18.,18.,'5.10',4,0) CALL REGION(1.,1.,16.,16.,0,0,1) CALL AXES('X',1,0.,5,'Y',1,0.,5,0) CALL LINEMO(XP,YP,NP,1,-1) CALL LINEO(XC1,YC1,NS) CALL LINEO(XC2,YC2,NS) CALL LINEO(XC3,YC3,NS) CALL ENDPG(0) END