Анна Шмелева

Каждый работавший в CorelDraw! знаком с оригинальной манерой рисования, предлагаемой этим пакетом. Не секрет, что материал задает художнику стиль; что гравюра по металлу всегда тонка, а акварель прозрачна; что дерево получает точеные формы, а бронза литые… А вот каким станет рисунок на компьютере? Если художник еще не вполне с освоился с машиной, его творение будет натужным, полным заемных эффектов, серым и вычурным. Такое встречается, к сожалению, пока достаточно часто. Но вообще-то для компьютерного стиля характерны скорее легкость, непринужденность и элегантность. Машинная графика не требует такой сосредоточенности, как традиционная – сделать Undo можно в любой момент, и, на мой взгляд, ничто не снимает стресс полнее, чем компьютерное рисование на досуге.

Самый привычный, стандартный графический редактор Paint подходит разве что для карикатур. Особенно если орудуешь не пером, а обычной мышью. А вот Corel... Там для рисования предлагается функция, именуемая Bezier (рис. 1). Проводишь линию – и на экране остается кривая замысловатой формы. На двух ее концах стоят опорные точки, а от них тянутся в стороны "резиновые нити", которые наши художники, едва увидев, тотчас же окрестили "усами". 06_01.gif Теперь лучше всего перейти в режим редактирования кривой. Выровнять ее там, где рука дрогнула, отшлифовать нужную форму... Все это делают, двигая мышью "усы" и конечные точки. И что же? Кривая очень послушна, но вместе с тем она как бы живет собственной жизнью. Как неожиданно она выгибается, если подальше оттянуть "ус"! Это уже не штриховая графика, где растровая карта фиксирует малейший трепет пера. У "Безье" собственный характер, и рисунок, сделанный с ее помощью, не спутаешь ни с каким другим. Больше всего такое рисование напоминает забытую ныне технику – выгибание контура из проволоки. Но кривая Безье – это далеко не один только Corel. Функция "Безье" присутствует в любом современном графическом пакете, будь то Adobe Illustrator, Macromedia Freehand или Fontographer. В программах редактирования графики для не умеющих рисовать из кривых Безье строятся так называемые маски. Гибкость этой кривой приходит на помощь, когда нужно очертить на сканированной фотографии объект сложнее прямоугольника.


06_02.jpg Профессор Пьер Безье. Инженер и математик. Работал в области станкостроения, автоматического управления и CAD/CAM. В начале 70-х годов, проектируя на компьютере корпуса автомобилей "Рено", впервые применил для этой цели уравнения, впоследствии названные его именем.
Пьер Безье родился в 1910 году. У него четверо детей и 11 внуков, с которыми он, как гласит молва, время от времени занимается математикой


Все компьютерные шрифты, кроме растровых для DOS-приложений, состоят из кривых Безье. В Quake 3 нерациональными кривыми Безье описаны уровни. Да и в любой трехмерной игре со сплайн-графикой, как правило, "работает" тот же самый механизм. Так что же это за кривая? Какими особыми свойствами она обладает? Почему она стала основой буквально всей компьютерной графики? И кто такой Безье? 06_03.JPG Аналитические выражения для кривой Безье приводятся, например, в документации фирмы Adobe – авторитетнейшего в мире разработчика контурных компьютерных шрифтов. Посмотрим на эти уравнения, хотя вообще-то вся их прелесть состоит именно в невидимости. Тысячи художников работают с ними, вовсе ничего о них не зная – а если учесть армию любителей компьютерных игр, то дело с уравнениями-невидимками имеют многие миллионы. Но может быть, вы захотите на пробу запрограммировать их собственноручно? Ведь это несложно – зато какое удовольствие подергать за "усы" кривую собственного изготовления! Классическая кривая Безье представляет собой график параметрического уравнения третьей степени
X(t) = axt3+bxt2+cxt+x0
Y(t) = ayt3+byt2+cyt+y0,
где переменная t пробегает условные значения от 0 (начало кривой) до 1 (конец кривой). Коэффициенты уравнения определяются из координат четырех точек, которые мы двигаем мышью по плоскости рисунка:
cx =3(x1 - x0)
bx =3(x2 – x1) - cx
ax = x3 - x0 - bx - cx
cy =3(y1 - y0)
by =3(y2 – y1) – cy
ay = y3 - y0 – by – cy
Начальная точка кривой имеет координаты (x0,y0), конечная точка - (x3,y3), первая управляющая точка (конец первого "уса") - (x1,y1), вторая управляющая точка (конец второго "уса") - (x2,y2) (рис. 1). "Усы" у кривой растут из начальной и конечной точек и являются касательными к ней в этих точках. Это было сразу видно на рисунке, а теперь мы можем доказать то же самое аналитически, получив производную функции в точке (x0,y0) и имея в виду, что (y1 - y0)/( x1 - x0) = cy/cx. Интересны такие опыты с кривой Безье, как ее превращение в эллипс, окружность, прямую. Рассмотрим совсем простой вариант с переходом кривой в прямую и наоборот. Построим на экране прямолинейный отрезок (Line) и выберем опцию "to Curve". У отрезка сразу возникнут обращенные внутрь "усики", плотно прижатые к "туловищу" и готовые к дальнейшим "мышиным" манипуляциям. Длина каждого "усика" будет, на глазок, равна трети длины всего отрезка. Проверим это! Пусть точки (x1,y1) и (x2,y2) лежат на самой кривой на расстояниях t=1/3 и t=2/3 от ее начала. Тогда
x1 - x0 = x2 – x1 = x3 – x2 = (x3 - x0)/3 = Tx/3
y1 - y0 = y2 – y1 = y3 – y2 = Ty/3 (см. рис. 3)
cx =3(x1 - x0) = Tx
bx =3(x2 – x1) - cx = Tx - Tx = 0
ax = x3 - x0 - bx - cx = Tx - Tx = 0
Аналогично,
cy = Ty, ay = 0, by = 0
и уравнение кубической кривой Безье вырождается в уравнение прямой. Из формул Безье следует также, что при t=1/3 максимум влияния на форму кривой имеет положение первого "уса", а при t=2/3 – второго. Доказывать это мы не станем, а только проиллюстрируем (см. рис. 4а и 4б),перемещая одну управляющую точку кривой и оставляя вторую неподвижной. 06_04.JPG Кроме возможности легкого, интуитивного управления, кривая Безье хороша своей гладкостью. Заметим, что отрезками такой кривой можно аппроксимировать сколь угодно сложный контур. В CorelDraw! произвольная линия, состоящая из отрезков кривой Безье, может иметь изломы в местах сочленений. Это более чем очевидно, поскольку в месте излома у кривой оказывается две касательные. Но по команде Smooth (сравните рис. 5а и 5б) управляющие точки соседних отрезков "легко и непринужденно" выстраиваются в одну линию, то есть излом исчезает. До появления формул Безье контуры компьютерных персонажей были ломаными, поверхности – гранеными, а движение – прерывистым, скачкообразным, неестественным. Взяв четыре кривых в пространстве (16 управляющих точек), мы определим поверхность Безье, обладающую теми же полезными свойствами, что и кривая. Мало того, кривая Безье – наиболее общий и интуитивно понятный способ управления движением. Параметрам кривой можно поставить в соответствие параметры движения компьютерного персонажа, и оно будет происходить по тем же рассмотренным нами правилам. Таким образом, знаменитая кривая используется не только в компьютерной графике, но и в анимации. Рассмотрим напоследок одну прикладную задачу, также связанную с кривыми Безье. Среди компьютерных легенд есть предание о шрифтах-убийцах. Причиной сбоя в работе системы, гласит оно, может быть шрифт, точнее, даже одна какая-нибудь буква в нем. Правда это или чистый вымысел? 06_05.JPG Попробуем разобраться. Используемый в текстовом редакторе шрифтовой файл работает как подпрограмма, содержащая наборы команд и опорных точек для построения символов из отрезков кривых. Затем при выводе на экран или бумагу символы проецируются в изображение мозаичного характера – bitmap, или растр. Пересчетом контура в мозаику занимается специальная программа, именуемая растеризатором. Результат расчета корректируется с помощью директивных указаний (hints), касающихся того, как должны выглядеть растровые символы. К примеру, толщина "ножек" у буквы должна получиться одинаковой, в какую бы сторону растеризатор ее не округлял. И только после этого мы видим текст – либо на экране с заданным размером "зерна", либо на распечатке, тоже состоящей, как известно, из отдельных точек. А теперь представим себе, что криволинейный контур буквы имеет неожиданную петлю или излом такого свойства, что растеризатор "не знает", как его обработать. При переводе линии в границу мозаики возникает или неопределенность (программа не видит, где у буквы наружная, а где внутренняя сторона), или, допустим, задача деления длины какого-нибудь отрезка на очень малую величину (деление на ноль). Вся система в этом случае, скорее всего, повиснет. Это случится либо при попытке вывода проблемного контура на экран, либо при попытке его напечатать. При этом дефект действительно может содержаться в одном-единственном символе шрифта! Впрочем, я вовсе не утверждаю, что все происходит именно так. Миф есть миф. Специализированные программные средства шрифтового дизайна автоматически отслеживают "ненормативные" перегибы, поэтому ни в один фирменный шрифт ошибка такого рода попасть не может. Но теоретически шрифтовой файл можно создать и другими способами, а создав – переписать на CD, пустить в Сеть, короче, отправить гулять по свету. В компьютерных делах многое приходится решать просто исходя из опыта. Живы или нет "шрифты-убийцы" – неизвестно, но совершенно очевидно, что в законно приобретенных библиотеках их быть не может. Так что вывод ясен: мойте руки перед едой и не доверяйте пиратским компакт-дискам.