Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Кривые / ReVoL 1423 [Computer Graphics 23]

.htm
Скачиваний:
27
Добавлен:
01.05.2014
Размер:
21.5 Кб
Скачать

ReVoL 1423 [Computer Graphics 23] Кривые Map1001401421423

B-сплайныПрактическая работа

Две характеристики базиса Бернштейна ограничивают кривизну получающихся кривых. Во-первых, это число вершин характеристического многоугольника, определяющего порядок полинома, который задает кривую. Так, кубическая кривая должна характеризоваться многоугольником с четырьмя вершинами и тремя промежутками. Многоугольник с шестью вершинами всегда дает кривую 5-го порядка. Единственным путем снижения порядка кривой является уменьшение числа вершин, и, наоборот, единственным путем увеличения порядка кривой является увеличение числа вершин.

Во-вторых, это значение весовой функции J(n, i, t), которое не является нулем для всех значений параметра в пределах внутреннего промежутка кривой. Поскольку любая точка на кривой Безье является результатом взвешивания значений всех определяющих вершин, то изменение в одной вершине влияет на весь внутренний промежуток. Практически это ограничивает возможность осуществлять независимые изменения внутри промежутка.

Так как наклоны концов кривой Безье устанавливаются направлениями первой и последней сторон многоугольника, то можно изменить среднюю вершину характеристического многоугольника без изменения направления концевых наклонов. Однако форма всей кривой определяется общей природой базиса Бернштейна. Невозможность независимого изменения наклона в некоторых случаях может создать значительные трудности.

Существует другой базис, называемый B-сплайн базисом, по отношению к которому базис Бернштейна представляет собой частный случай. Этот базис обычно не является глобальным. Локальный характер поведения B-сплайн кривых обусловлен тем, что каждая вершина Рi связана с единственной базисной функцией. Таким образом, каждая вершина влияет на форму кривой только в пределах диапазона значений параметра, где связанная с ней базисная функция не является нулем, B-сплайн базис позволяет также изменить порядок результирующей кривой без изменения числа вершин задающего многоугольника. Теория B-сплайнов впервые была предложена Шенбергом (Schoenberg I. J.). Рекуррентные формулы для численных вычислений были опубликованы Коксом (Cox M. G.) и Буром (Carl De Boor). Райзенфельд (Riesenfeld R. F.) применил B-сплайн базис для получения кривых.

Если Р(t) - векторы положения вдоль кривой в виде функции параметра t, то кривая, сформированная посредством B-сплайн базиса, задается соотношением

P(t) = SUM(i=0..n)[PiNi,k(t)]

где Рi - вершины характеристического многоугольника.

Для t-й нормализованной B-сплайн базисной кривой k-го порядка весовые функции Ni,k(t) определяются рекуррентными формулами

Ni,1(t) = 1 если Xi <= t <= Xi+1

Ni,1(t) = 0 если иначе

и

Ni,k(t) = ((t-Xi)Ni,k-1(t) / (Xj+k-1-Xi)) + ((Xi+k-t)Ni+1,k-1(t) / (Xj+k-Xi+1))

Величины Xi являются элементами узлового вектора, который рассматривается ниже. Параметр t изменяется от 0 до tmax вдоль кривой Р(t).

Для B-сплайн кривых необходимо использовать дополнительную переменную, чтобы учитывать их собственную кривизну. Это достигается за счет использования узлового вектора, являющегося последовательностью действительных целых чисел Xi, таких что Xi <= Xi+1 для всех Xi. Примерами узловых векторов являются векторы [0 1 2 3 4] и [0 0 0 1 1 2 3 3 3]. Значения Xi, рассматриваются как параметрические узлы. Они могут быть использованы для указания диапазона изменения параметра t, который используется для генерации B-сплайн кривой при 0 <= t <= tmax.

Диапазон изменения параметра для кривой Безье выбирался произвольно в пределах 0 <= t <= 1 для кривой любого порядка. Для построения B-сплайновой кривой узловой вектор характеризует изменение параметра кривой. Например, вектор [0 1 2 3 4] показывает, что параметр t изменяется от 0 до 4.

Число промежуточных узлов узлового вектора зависит от числа сторон задающего многоугольника. Двойной промежуточный узел указывает на то, что в этой точке находится двойная вершина (промежуток нулевой длины), а тройной промежуточный узел характеризует три совпадающие вершины (два промежутка нулевой длины).

Точка на B-сплайн кривой, которая соответствует параметрическому узлу t = Xi, называется геометрическим узлом. Удобно использовать равномерно расположенные узлы с единичными расстояниями между несовпадающими узлами, так как при этом получаются целочисленные значения компонент узлового вектора.

Дополнительно к узловому вектору должен быть задан порядок кривой. Если порядок k равен числу вершин многоугольника и не существует сложных вершин, то будет получена кривая Безье. По мере того как порядок уменьшается, генерируемая кривая приближается к задающему многоугольнику. При k = 2 полученная кривая является последовательностью прямых линий, которые идентичны задающему многоугольнику.

Порядок кривой отражается в узловом векторе, который используется для создания кривой. Необходимо задавать узлы сложности k как в начале, так и в конце серии узлов. Например, рассмотрим пятигранник (n + 1 = 5) без сдвоенных вершин. В таком случае параметр t изменяется от 0 до n - k + 2 в пределах всей кривой. Для кривой третьего порядка, заданной пятью вершинами, параметр tmax = 4 - 3 + 2 = 3. Полный узловой вектор с кратностью, равной 3 на каждом конце, в этом случае задается вектором [0 0 0 1 2 3 3 3]. Кривая второго порядка для того же задающего многоугольника имеет узловой вектор [0 0 1 2 3 4 4], а кривая четвертого порядка - вектор [0 0 0 0 1 2 2 2 2]. Если используется семь вершин многоугольника, то получится кривая третьего порядка, для которой узловой вектор имеет вид [0 0 0 1 2 3 4 5 5 5].

В качестве последнего примера рассмотрим многоугольник с четырьмя различными вершинами. Узловой вектор для кривой 2-го порядка имеет вид [0 0 1 2 3 3]. Если две центральные вершины совпадают и составной узел располагается между двумя конечными узлами, то узловым вектором для кривой второго порядка будет вектор [0 0 1 1 2 2].

Если гладкость достигается за счет введения производных более высокого порядка, то порядок кривой определяет, насколько она гладкая. Например, кривая четвертого порядка является непрерывной по первой и второй производной, а также и по положению точек вдоль всей кривой.

B-сплайн кривая математически задается как полиномиальная сплайн функция порядка k (степени k-1), поскольку она характеризует следующие два условия: функция Р(t) есть полином степени k-1 на каждом интервале (Xi <= t <= Xi+1); Р(t) и все ее производные порядка 1, 2, ..., k - 2 непрерывны вдоль всей кривой.

Таким образом, B-сплайн кривая четвертого порядка является кусочным кубическим сплайном.

Учитывая гибкость задания кривых на основе B-сплайнов, можно использовать различные способы коррекции формы кривой. Например, можно изменять порядок k (в пределах 2 <= k <= n + 1) введением кратных вершин или за счет изменения числа и (или) положения кратных вершин в задающем многоугольнике.

Эти процессы иллюстрируют рис. 14231-14236. На рис. 14231 показаны три B-сплайн кривые различного порядка, каждая из которых проходит через одни и те же четыре вершины многоугольника.

(14231)

Кривая второго порядка образует три прямые линии между четырьмя вершинами, кривая четвертого порядка соответствует кривой Безье для заданного многоугольника, кривая третьего порядка занимает промежуточное положение. Заметим, что все три кривые имеют одни и те же конечные наклоны, определяемые наклоном первого и последнего отрезков фазового многоугольника. Чем выше порядок кривой, тем больше ее форма будет отличаться от формы задающего многоугольника. Таким образом, увеличение порядка спрямляет кривую.

(14232)

Рис. 14232 иллюстрирует влияние сложных вершин в характеристическом многоугольнике. Для каждой из четырех кривых показано, что порядок кривой равен числу вершин характеристического многоугольника. Нижняя кривая на рис. 14232 идентична нижней кривой на рис. 14231, где кривая четвертого порядка определена четырьмя вершинами многоугольника. Вторая кривая на рис. 14232 является кривой пятого порядка со сдвоенной вершиной в точке 4. Третья кривая является кривой шестого порядка с тройной вершиной в точке 4. Последняя кривая седьмого порядка имеет задающий многоугольник с четырьмя кратными вершинами в точке 4.

Из рис. 14232 ясно, каким образом можно провести кривую ближе к определенной вершине за счет использования кратных вершин, сохраняя при этом одни и те же конечные наклоны для каждой кривой. С другой стороны, понижение порядка приводит к смещению кривой по направлению к вершинам многоугольника.

(14233)

На рис. 14233 в задающем многоугольнике четвертая вершина сдвоенная. Здесь кривые деформируются за счет изменения их порядка при неизменном виде характеристического многоугольника.

Первая кривая является кривой седьмого порядка; порядок этой кривой равен числу вершин многоугольника. Вторая кривая - это кривая пятого порядка. Ее форма ближе к исходному многоугольнику, особенно около сдвоенной вершины. Третья кривая имеет порядок, равный трем. Заметим, что в сдвоенной вершине имеется излом, поскольку наклон и кривизна в ней не являются непрерывными. Сдвоенная вершина необходима для того, чтобы создать излом в кривой третьего порядка. Утроенная вершина образует излом в кривой четвертого порядка. Это свойство обычно используют при проектировании кораблей.

(14234)

Рис. 14234 демонстрирует, как можно осуществить локальные изменения, не нарушая формы кривой в целом. Каждая кривая является кривой пятого порядка и задается характеристическим многоугольником с семью вершинами, среди которых нет сложных. Единственное различие между кривыми заключается в расположении пятой вершины многоугольника, как показано на рисунке. Из рис. 14234 следует, что начальная часть каждой кривой не изменяется. Это обусловлено локальной природой B-сплайн базиса.

(14235)

На рис. 14235 изображены кривые от третьего до пятого порядка, полученные с помощью многоугольника с шестью вершинами, также не содержащего сложных вершин. Кривая четвертого порядка является кубическим сплайном. Метод B-сплайн кривой позволяет построить кубический сплайн с помощью многоугольника с тремя и большим числом вершин. Поскольку в этом многоугольнике имеется пять отрезков, то кривая пятого порядка является кривой Безье. Особенно интересна кривая третьего порядка, так как она представляет собой касательную к внутренним отрезкам многоугольника в их средних точках.

(14236)

Это иллюстрирует также рис. 14236, где кривая третьего порядка формируется с помощью характеристического многоугольника с восемью вершинами.

Источник - Роджерс Д., Адамс Дж. Математические основы машинной графики: Пер. с англ. - М.: Машиностроение, 1980. - 240 с., ил. Рисунки выполнены при помощи проекта GRA205.

Начало страницы

Практическая работа GRA205Для выполнения работы необходимо установить интерфейс GREEN, скачать и распаковать шаблон проекта GRA205. В ходе выполнения работы нужно определить две процедуры. Процедура Knot предназначена для вычисления и отображения узлового вектора. Процедура BSpline вычисляет точки B-сплайновой кривой. В процедуре Draw затем по рассчитанным точкам строится кривая, а также характеристический многоугольник.

Для хранения векторов в шаблоне используется тип Point:

Private Type Point X As Double Y As Double End Type

Параметрами процедуры Knot являются:

U - число вершин характеристического многоугольника минус 1;

K - порядок кривой;

V() - массив координат вершин;

X() - возвращаемый узловой вектор;

Алгоритм построения узлового вектора:

Вычислить размер вектора M = U + K Инициализировать массив X полученным размером M Изменяя I от 0 до M Если (I > K - 1) То Если (I < U + 2) То Вычислить номер вершины J = I - K Если вершина J совпадает с вершиной J + 1 То X(I) = X(I - 1) Иначе X(I) = X(I - 1) + 1 Конец Если Иначе X(I) = X(I - 1) Конец Если Иначе X(I) = 0 Конец Если К строке узлового вектора добавить пробел и узел Следующее I Вывести строку узлового вектора на форму и обновить

Параметрами процедуры BSpline являются:

U - число вершин характеристического многоугольника минус 1;

K - порядок кривой;

V() - массив координат вершин;

R() - возвращаемый массив точек кривой;

L - число отрезков для построения кривой

Алгоритм вычисления B-сплайн кривой:

Вычислить узловой вектор Вычислить интервал изменения параметра DT Инициализировать массив точек R нулевой размерностью Присвоить нулевой точке массива R значение нулевой вершины Принять текущую точку кривой P равной 0 Изменяя W от K - 1 до U + 1 Инициализировать массив весовых функций N диапазонами 0..U + 1, 1..K Если X(W) не равно X(W + 1) То N(W, 1) = 1 Изменяя T от X(W) до X(W + 1) - DT / 2 шаг DT Вычислить все весовые функции для данного T Добавить точку кривой P = P + 1 Расширить массив точек кривой R Вычислить точку кривой P Присвоить P точке массива R вычисленное значение Следующее T Конец Если Следующее W Добавить точку кривой P = P + 1 Расширить массив точек кривой R Присвоить P точке массива R значение U вершины

Вычисление весовых функций:

Изменяя C от 2 до K Изменяя I от 0 до U J = I + 1 M = C - 1 Если (N(I, M) = 0) То D = 0 Иначе D = ((T - X(I)) * N(I, M)) / (X(I + M) - X(I)) Конец Если Если (N(J, M) = 0) То E = 0 Иначе E = ((X(I + C) - T) * N(J, M)) / (X(I + C) - X(J)) Конец Если N(I, C) = D + E Следующее I Следующее С

Вычисление точки кривой:

Изменяя I от 0 до U R(P).X = R(P).X + V(I).X * N(I, K) R(P).Y = R(P).Y + V(I).Y * N(I, K) Следующее I

Примечания:

Кривая строится в промежутках узлового вектора, равных 1. Например, если узловой вектор равен

[0 0 0 0 1 1 1 1]

то кривая строится в промежутке от 0 - 1, то есть от t = X(3) до t = X(4), а если узловой вектор равен

[0 0 0 1 2 2 2]

то кривая строится в двух промежутках:

промежуток 0 - 1, от t = X(2) до t = X(3)

промежуток 1 - 2, от t = X(3) до t = X(4)

Число промежутков равно tmax. В каждом из промежутков вычисляется 1 / DT точек, а общее число точек кривой равно tmax / DT. Отсюда следует, что DT следует вычислять по формуле

DT = tmax / число линий (точек).

Тем не менее, можно использовать формулу

DT = 1 / число линий (точек).

В этом случае каждый из сегментов кривой (промежуток) будет строиться из указанного числа точек, а общее число точек будет равно tmax * L, где L - задаваемое число точек.

Начало страницы

Map1001401421423 © 2003 ReVoL © 2003 rico web mastering

Соседние файлы в папке Кривые