Кривые Безье в векторной графике
План:
1. Принципы построения кривых Безье
1.1. Свойства кривых Безье
1.2. Канонический вид кривой Безье
1.3. Изменение формы кривой
1.4. Соединение нескольких секторов
2. Типы опорных точек
3. Историческая справка о кривых* (Для дополнительного изучения)
В общем случае кривая Безье — это частный случай В - сплайнов (NURBS-кривых), которые можно определить как взвешенная сумма п+1 контрольных точек, где весовыми коэффициентами являются полиномы Бернштейна.
Рассмотрим определения первых трех степеней кривой Безье.
Линейная кривая, кривая первой степени (прямая), определяется следующей параметрической формулой:
P(t) = (1 - t)P0+tP1
Это выражение представляет собой линейную интерполяцию между двумя точками (рис. 1).
Рис. 1. Кривая первой степени (прямая)
Квадратичная кривая, кривая второй степени, определяется формулой:
P(t) = (1 - t)2P0 + 2(1 - t)tP1 + t2P2.
Это выражение представляет собой линейную интерполяцию между линейными интерполяциями между точками (рис. 2):
Рис. 2. Кривая второй степени (квадратическая кривая)
Кубическая кривая, кривая третьей степени, определяется формулой:
P(t) = (1 - t)3Р0 + 3(1 - t)2tP1 + 3(1 - t)t2P2 + t3Р3.
Выражение представляет собой линейную интерполяцию между линейными интерполяциями между линейными интерполяциями между точками (рис. 3).
Рис. 3. Кривая третьей степени (кубическая кривая)
Кривые Безье любой степени обладают следующими свойствами:
Рис. 4. Кривая в выпуклом многоугольнике
Исходя из этого, можно представить канонический вид кривой Безье, который обычно используется в графических редакторах плоской графики.
Рис. 5. Первый этап аппроксимации кривой
Рис. 6. Второй этап аппроксимации кривой
Рис. 7. Третий этап аппроксимации кривой
Рис. 8. Итоговая ломаная кривая
Рассмотрим канонический вид кривой Безье и попытаемся понять, как из одной-единственной кривой получается бесконечно большое многообразие форм, которые используются в векторной компьютерной графике.
Общий вид кривой Безье имеет вот такую конструкцию (рис. 9). Это не математическое описание, а прикладное отображение, используемое в векторных и растровых программах, а также в программах верстки.
Рис. 9. Канонический вид кривой Безье
Для построения этой кривой требуются четыре контрольные точки.
Две точки, через которые физически проходит кривая Безье, называются опорными. Одна из них называется начальной (start point), а другая — конечной (end point). Две точки, которые остаются в стороне, получили название управляющих (control point).
Для визуализации управляющие точки соединяются с опорными какой-нибудь линией. Иногда пунктирной, иногда тонкой сплошной. Прежде всего, кривая Безье - это вектор. Поэтому она располагает начальной и конечной точками. Направление кривой, может быть, не всегда очевидно для пользователей векторной программы, но для программы оно существенно. Направление контуров находит свою реализацию в составных контурах (compound paths). Если два векторных объекта, например образующих букву "о" и расположенных друг на друге, направлены в противоположные стороны (рис. 10), то изображение получится верное. Если векторные контуры направлены в одну сторону, то один контур перекрывает другой, не образуя прозрачной области (рис. 11).
Рис. 10. Составной контур с разнонаправленными векторами
Рис. 11. Составной контур с однонаправленными векторами
В программах векторной графики существует единственный способ изменения формы кривой — интерактивное перемещение опорных и управляющих точек. Если перемещаются начальная или конечная точки, то кривая станет изменяться (вытягиваться или сжиматься). Перемещение управляющих точек изменяет кривизну соответствующей "половинки" кривой Безье, входящей в начальную или конечную точки (рис. 12).
Рис. 12. Способы изменения формы сегмента
Таким образом, с помощью перемещения этих четырех точек получают неограниченное количество форм кривой Безье, которая может быть всего-навсего одним отдельным сегментом сложного секторного контура.
Рассмотрим создание многообразия контуров с помощью соединения нескольких канонических кривых Безье в связанную последовательность(рис. 13).
Рис. 13. Примеры векторных контуров, составленных из кривых Безье
В каждом сегменте можно добавлять опорные точки, в данном случае появляются две дополнительные управляющие точки с управляющими линиями, которые тоже позволяют изменять форму кривой. Добавление новых опорных точек в пределах одного сегмента кривой не противоречит тому условию, что отдельные кривые соединяются в цепь. Просто кривая Безье добавляется не к концу контура, а размещается внутри уже имеющегося контура.
Для того чтобы отличать кривую как элементарную кривую, исходную кривую и кривую, которая уже находится в составе контура, последнюю принято называть сегментом (сегментом контура или сегментом кривой).
Любая векторная конструкция (векторный контур или векторная форма) создается из векторных сегментов, каждый из которых идентичен отдельной элементарной кривой Безье. Отсюда следует, что между ними образуются соединительные точки, которые иногда называются узлами (nodes в CorelDRAW). В Adobe Illustrator эти точки называются опорными (anchor point), якорными, или просто точками (Macromedia FreeHand). Для поддержки соотношения между элементарными сегментами существуют разные типы опорных точек.
Соединительные точки между сегментами бывают нескольких типов. В одном случае требуется обеспечить соединение криволинейного сегмента с прямым, в другом - получить идеально гладкое сочленение (сопряжение) без стыка или перегиба. В качестве образцов опорных точек составим таблицу для следующих векторных программ, использующих кривые Безье: CorelDRAW, Adobe Illustrator и Macromedia FreeHand. Типы опорных точек в трехмерной графике представлены на примере Autodesk 3D МАХ.
Тип опорной точки, соединяющий два сегмента и обеспечивающий независимость управляющих точек по направлению и длине друг от друга, называется изгибом (рис. 14).
В программе CorelDRAW такая точка называется перегиб (cusp). В других программах: угловая (corner).
Угловое сочленение сегментов (изгиб) не всегда разумно и выгодно. Например, для создания окружности необходимо обеспечить соединение, которое называют гладким сопряжением, когда одна кривая плавно переходит в другую. Такое сочление обеспечивает гладкая опорная точка (smooth) (рис. 15). Условием этого являются управляющие линии, лежащие на одной прямой. У такой точки направление управляющих линий фиксировано относительно друг друга, при перемещении одной управляющей линии другая также движется синхронно как рычаг. Вместе с тем, такие управляющие линии могут различаться по величине.
Рис. 14. Пример точки перегиба
Рис. 15. Пример гладкой точки
У программы CorelDRAW предусмотрен подвид гладкого сочленения, который называется симметричный узел (symm от слова "symmetrical") (рис. 16). Суть его состоит в том, что управляющие линии фиксируют не только по направлению, но и по величине (длина направляющих всегда одинакова). Если одну из них увеличивать или уменьшать, другая будет синхронно повторять это действие. В программах Adobe Illustrator и Macromedia Freehand такой тип опорной точки отсутствует, хотя его можно получить вручную.
В свою очередь, у программы FreeHand в отдельный вид опорных точек выделен случай гладкого сочленения прямолинейного и криволинейного сегментов (рис. 17). Такая точка получила название тангенциальной (connecter point). При выделении такая точка обозначается треугольником. Для того чтобы криволинейный сегмент гладко сопрягался с прямой линией, касательная криволинейного сегмента должна совпасть с продолжением прямого сегмента. Поэтому управляющая точка криволинейного сегмента способна двигаться только вдоль этой касательной. В программах CorelDRAW и Adobe Illustrator такое соединение также имеет место, но не выделено в специальный тип опорной точки.
Рис. 16. Симметричная опорная точка
Рис. 17. Пример тангенциальной точки в программе FreeHand
Типы опорных точек можно суммировать в виде следующей таблицы (табл. 1).
Таблица 1. Типы опорных точек в различных векторных программах
Тип опорной точки |
Adobe Illustrator |
Macromedia FreeHand |
CorelDRAW |
Угловая |
Corner anchor point |
Corner point |
Cusp node |
Гладкая |
Smooth anchor point |
Curve point |
Smooth node |
Тангенциальная |
— |
Connector point |
— |
Симметричная |
— |
— |
Symm node |
Типы опорных точек в трехмерной графике имеют ту же основу, но отличаются другими характеристиками (программа Autodesk 3D МАХ).
В докомпьютерные времена специалисты, которые работали с линейными изображениями (архитекторы, кораблестроители и инженеры) для создания своих проектов пользовались только бумагой, карандашами и простейшими чертежными инструментами (линейками, циркулями, угольниками и транспортирами). Однако при создании чертежей больших деталей в натуральную величину, например шпангоутов судов, возникали естественные сложности. Причем проблема состояла не только в размере, но скорее в том, чтобы провести гладкую кривую через определенное количество заранее фиксированных точек.
Решение было найдено: в больших помещениях нужную форму кривой получали, выгибая длинные тонкие полоски дерева или металла. Такие полоски называли сплайнами (splines). Для того чтобы придать упругой полоске нужную форму, ее фиксировали в требуемых точках с помощью особых свинцовых грузил, которые за сходство формы назывались "утятами" (ducks). Результирующая кривая получалась гладкой, а форма изменялась перемещением грузил (рис. 18).
Рис. 18. Чертежные сплайны
Впоследствии понятие сплайна стали применять в математике для похожей цели — описания кривых.
Резюме
Ø Кривые Безье получили широкое распространение, т. к. обладают следующими важными свойствами:
o начальная и конечная контрольные точки лежат на кривой;
o кривая на всем протяжении непрерывна, у нее отсутствуют разрывы;
o касательные к кривой в начальной и конечной контрольных точках являются отрезками, соединяющими их с двумя другими соседними контрольными точками;
o кривая всегда располагается внутри выпуклого многоугольника из ее контрольных точек
Ø Для построения кривой Безье требуются четыре контрольных точки, хотя кривая физически проходит только через две из них (опорные точки). Две точки остаются в стороне (управляющие точки).
Ø Кривая Безье - это вектор. Поэтому она располагает начальной и конечной точками. Направление контуров находит свою реализацию в составных контурах (compound paths).
Ø Соединительные точки между сегментами бывают нескольких типов, что позволяет обеспечить различные формы соединения (гладкую, тангенциальную или на изгиб).