Рациональные кривые

Узлы

 

На рис. 12.10 все базовые функции имеют одинаковую форму и размещены на равных расстояниях друг от друга. Это очень симметрично и элегантно, но на самом деле желательно варьировать длины интервалов таким образом, чтобы определенные контрольные точки влияли на значительно больший сегмент кривой, а определенные — на меньший. Это создает условие для неоднородности (Non-Uniform) в описании кривой.

 

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

 

Точки, разграничивающие интервалы, получили название узлов (knots), а их упорядоченный список — название узлового вектора (knot vector).

 

Узловой вектор базовой функции, представленный на рис. 12.11, имеет вид {0.0, 1,0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0}.

 

Это пример однородного узлового вектора (uniform knot vector), в котором все функции определены на одинаковых временных интервалах.

 

 

Рис. 12.11. Пример однородного узлового вектора

 

Следующий рисунок (рис. 12.12) представляет пример кривой, созданной на основе такого узлового вектора.

 

 

Рис. 12.12. NURBS-кривая с однородным узловым вектором

 

Если изменить узловой вектор, например, следующим образом: {0.0, 1.0, 2.0, 3.75, 4.0, 4.25, 6.0, 7.0}, то получится другое множество неоднородных (non-uniform) базовых функций (рис. 12.13) и, соответственно, другая форма кривой (рис. 12.14), которая строится на тех же контрольных точках, что и на рис. 12.12.

 

 

Рис. 12.13. Неоднородные базовые функции для множества контрольных точек

 

 

Рис. 12.14. NURBS-кривая с неоднородным узловым вектором

Характеристика семейства базовых функций

 

Для любого значения параметра t сумма всех базовых функций строго равна 1.

 

Если веса всех контрольных точек положительны, кривая лежит в области, полученной соединением крайних (внешних) контрольных точек. Такой "габаритный" контейнер получил название "выпуклой оболочки" (convex hull).

 

 

Обратимся к ключевой букве в названии NURBS — "R", что означает "rational" (рациональный). Рациональные кривые, в сравнении с обычными (нерациональными — "non-rational") В-сплайнами, обладают двумя дополнительными и очень важными свойствами:

-они обеспечивают корректный результат при проекционных трансформациях (например, масштабировании), а нерациональные В-сплайны — только при аффинных трансформациях (например, перемещениях);

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

 

Эти свойства (кстати, весьма значительные) достигаются за счет четырехмерного представления обычной трехмерной контрольной точки {х, у, z}. Это значит, что каждая контрольная точка представляется четырьмя координатами {х, у, z, w}. Последняя координата w означает вес (weight) контрольной точки, о котором уже упоминалось ранее (вспомним пример с гравитацией или холодильником).

 

Замечание

"Вес" в математическом смысле — это значение, важность, влияние, которое выражается особой функцией или числовым значением. Это одно из важных понятий в теории принятия решений.

 

Изначально координата w равняется единице, но при увеличении этого значения для контрольной точки увеличивается степень ее воздействия на форму кривой и последняя сильнее выгибается в сторону контрольной точки (рис. 12.15).

 

Рис. 12.15. Изменение формы кривой при изменении веса контрольной точки

 

Замечание

Важно заметить, что существенным является только относительное изменение весов контрольных точек. Если вдвое увеличить веса всех контрольных точек, то форма кривой не изменится.

 

Пример

Квадратичная (второй степени) NURBS-кривая определяется тремя контрольными точками (рис. 12.16). У всех трех кривых узловой вектор имеет вид {0.0, 0.0, 0.0, 1.0, 1.0, 1.0}. Веса первой и последней контрольных точек у каждой кривой равны 1. Если вес центральной вершины меньше 1, то результирующая кривая представляет собой сегмент эллипса (рис. 12.16, а). Если ее вес равняется 1, образуется парабола (рис. 12.16, б). Если же ее вес гораздо больше 1, то кривая преобразуется в гиперболу (рис. 12.16, в).

Рис. 12.16. NURBS-кривые с различными весами центральной контрольной точки

 

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

 

Кривая Безье (формулы и принципы построения)

В общем случае кривая Безье — это частный случай В-СПЛАЙНОВ (NURBS-кривых), которые можно определить как взвешенная сумма n+1 контрольных точек, где весовыми коэффициентами являются полиномы Бернштейна. Рассмотрим определения первых трех степеней кривой Безье.

 

Линейная кривая, кривая первой степени (прямая), определяется следующей параметрической формулой:

 

P(t) = (1 - t)P0+tP1

 

Это выражение представляет собой линейную интерполяцию между двумя точками (рис. 12.17).

Рис. 12.17. Кривая первой степени (прямая)

 

Квадратичная кривая, кривая второй степени, определяется формулой:

 

= (1 - t)2P0 + 2(1 - t)tP1 + t2P2.

 

Это выражение представляет собой линейную интерполяцию между линейными интерполяциями между точками (рис. 12.18):

Рис. 12.18. Кривая второй степени (квадратическая кривая)

 

Кубическая кривая, кривая третьей степени, определяется формулой:

P(t) = (1 - t)3Р0 + 3(1 - t)2tP1 + 3(1 - t)t2P2 + t3Р3.

 

Это выражение представляет собой линейную интерполяцию между линейными интерполяциями между линейными интерполяциями между точками (рис. 12.19).

Рис. 12.19. Кривая третьей степени (кубическая кривая)

Свойства кривых Безье

 

Кривые Безье любой степени обладают следующими важными свойствами. Начальная и конечная контрольные точки лежат на кривой.

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

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

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

Поскольку кривая Безье представляет собой взвешенное усреднение всех ее контрольных точек с положительными весами, а сумма их равна единице, кривая всегда располагается внутри выпуклого многоугольника из ее контрольных точек (рис. 12.20), как и рассмотренная выше NURBS-кривая.

Рис. 12.20. Кривая в выпуклом многоугольнике

Кривую Безье можно рассматривать как пошаговое уточнение формы многоугольника, получаемого последовательным соединением ее контрольных точек (рис. 12.21—12.24). При этом кривая Безье начинается и заканчивается в конечных точках данного многоугольника, а форма определяется относительным расположением оставшихся точек, через которые в общем случае она не проходит.

 

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

Рис. 12.21. Первый этап аппроксимации кривой

Рис. 12.22. Второй этап аппроксимации кривой

Рис. 12.23. Третий этап аппроксимации кривой

Рис. 12.24. Итоговая ломаная кривая

Канонический вид кривой Безье

 

Рассмотрим канонический вид кривой Безье и попытаемся понять, как из одной-единственной кривой получается бесконечно большое многообразие форм, которые используются в векторной компьютерной графике.

 

Общий вид кривой Безье имеет вот такую конструкцию (рис. 12.25).

Рис. 12.25. Канонический вид кривой Безье

 

Причем, это уже не математическое описание, а сугубо прикладное отображение, именно то, которое знакомо всем пользователям векторных программ.

 

Замечание

Такое отображение все чаще используется и в программах пиксельной графики, а также в программах верстки.

 

Для построения этой кривой требуются четыре контрольные точки. Но кривая физически проходит только через две из них, они получили название опорных. Одна из точек называется начальной (start point), а другая — конечной (end point). Две точки остаются в стороне, они получили название управляющих (control point).

 

И для того чтобы их не "потерять" (особенно когда в документе кривых насчитываются многие десятки и сотни), в программах векторной графики, да и в любых других программах, управляющие точки соединяются с опорными точками какой-нибудь линией. Иногда пунктирной, иногда тонкой сплошной.

 

Почему кривая располагает начальной и конечной точками? Потому что, вообще говоря, кривая Безье — это, прежде всего, вектор.

 

Справка

Слово "вектор" латинского происхождения: "vector" переводится как "несущий", в математике используется для обозначения отрезка определенной длины и направления. Два вектора считаются равными лишь в том случае, если у них не только одинаковы длины, но и совпадают направления (то есть они параллельны и одинаково ориентированы). При изменении направления меняется знак вектора. В естественных науках векторы изображают величины, которые имеют направление, например сила, скорость, ускорение и т. д.

 

Направление кривой, может быть, не всегда очевидно для пользователей векторной программы, но для самой программы оно всегда существенно. Направление контуров находит свою реализацию в так называемых составных контурах (compound paths). Если два векторных объекта, например образующих букву "о" и расположенных друг на друге, направлены в противоположные стороны (рис. 12.26), то изображение получится "с дыркой посередине".

 

 

Рис. 12.26. Составной контур с разнонаправленными векторами

 

Если те же векторные контуры направлены в одну сторону, то в этом случае один контур просто перекрывает другой, не образуя прозрачной области (рис. 12.27).

 

Рис. 12.27. Составной контур с однонаправленными векторами