3. АНИМАЦИЯ В ВЕКТОРНОЙ ГРАФИКЕ
3.1 Вместо вступления.
Для того, чтобы ЭФФЕКТИВНО использовать работу
с векторной графикой, от программиста, в принципе, требуется знание
некоторых наук (хотя бы двух) - аналитической геометрии и матричной
алгебры. Невредно также еще знать основы начертательной геометрии. С
другой стороны, мы понимаем, что далеко не все наши читатели имеют
высшее образование, а нногие из тех, кто его и имеют, либо не изучали
этих дисциплин, либо успели их прочно подзабыть.
Поэтому мы постараемся обойтись без них,
оставаясь в рамках того, что Вам известно из курса средней школы, но
при этом нам придется пойти на значительные упрощения. У этих упрощений
есть неприятная особенность. С одной стороны, они (упрощения) облегчают
понимание основных принципов и идей (и это хорошо), но с другой стороны
они же усложняют практическую реализацию тех же самых принципов и идей
(а это уже плохо).
Чтобы совместить несовместимое, мы подойдем к
векторной графике поэтапно. Во-первых, простыми словами мы изложим
основные понятия и приемы, не выходя в высшую математику, а во- вто
рых, мы подскажем, как и для чего впоследствии Вы сможете применить эту
высшую математику, если все же решитесь заняться этими вопросами более
глубоко.
Итак, обратите внимание на следующее:
Знание НАЧЕРТАТЕЛЬНОЙ ГЕОМЕТРИИ Вам может
пригодиться для того, чтобы образно представлять, как ведут себя точки,
линии, плоские геометрические фигуры и объемные тела в пространстве.
Чтобы представлять, как они могут располагаться относительно друг
друга, что образуется в результате пересечения одних объектов с другими
и т.п. Это знание не является необходимым, а только полезным.
Знание АНАЛИТИЧЕСКОЙ ГЕОМЕТРИИ необходимо для
того, чтобы представлять линии, геометрические фигуры и тела в виде
уравнений и систем уравнений. Тогда определить, например, пересекает ли
данная линия данное тело или нет (попал в Вас луч лазера, выпущенный
противником или нет?), можно путем решения системы уравнений. Это легко
поручается компьютеру. При этом будут получены и координаты точек
пересечения (можно узнать, в какой отсек Вашего корабля попал враг).
Можно делать и такие вещи, как строить в виде функции перпендикуляр к
криволинейной поверхности, определять, находится ли данное дерево в
тени данного холма или нет, если солнце расположено там-то и там-то.
Одним словом, аналитическая геометрия нужна, чтобы использовать
ФУНКЦИОНАЛЬНОЕ ПРЕДСТАВЛЕНИЕ для всевозможных геометрических объектов
она как бы помогает забыть о том, что в программе летают корабли,
стреляют лазеры, светят звезды. Вместо всего этого есть только
уравнения, уравнения и еще раз уравнения. А все перипетии космических
баталий - это решения этих уравнений. Решаем уравнения, проверяем
результат. Если он такой-то или такой то, значит цель поражена получите
премию за уничтоженного пирата.
Для кого-то луч лазера - это смертоносный
заряд, а с точки зрения аналитической геометрии это всего лишь
уравнение прямой. Орбитальная станция вовсе и не' станция, а набор
граней, каждая из которых вовсе и не грань, а набор отрезков, каждый из
которых тоже описывается уравнением прямой. Так что, вопрос поражения
станции лазерным лучом это решение системы полученных уравнений.
Можно ли обойтись без такого функционального
представления? На простых задачах, по видимому да Но чтобы не
запутаться в сложных ситуациях, к нему придется все-таки обратиться.
Знание МАТРИЧНОЙ АЛГЕБРЫ тоже необходимо, но по
другой причине. Оно необходимо, чтобы программы были ЭФФЕКТИВНЫМИ.
Когда корабль летит в пространстве и при этом кувыркается, а окружающие
его объекты тоже не стоят на месте, постоянно приходится пересчитывать
координаты всех точек и концов отрезков, изображаемых на экране. Можно
написать сотни процедур, охватывающих всевозможные комбинации
преобразований, ио на это не хватит ни компьютерной памяти, ни скорости
работы процессора, ни собственного ума.
Поэтому программисты стараются во-первых
разбить всевозможные преобразования координат на простые составляющие,
каждое из них описывают простейшим алгоритмом, а потом оказывается, что
любые самые сложные операции можно "собирать" иэ простей ших, как из
набора кубиков детского конструктора, если сделать так, чтобы эти
"кубики" были похожи друг на друга (то есть принадлежали бы одному
набору). Для этого и служит матричная алгебра. Сначала все уравнения,
описывающие поведение объектов в пространстве представляют в матричной
форме (в виде однотипных кубиков), а затем из этих кубиков собирают
необходимую подпрограмму. "Кубики" при этом "стыкуются" друг с другом
по правилам операций с матрицами (сложение матриц, умножение матриц на
постоянный коэффициент, перемножение матриц между собой, обращение
матриц). Обратите внимание на то, что полученная в результате
подпрограмма может работать по-разному, в зависимости от того, какие
"кубики" в нее вставили. А "вставляются" всякий раз разные .
Процедуру, которая "собирает" другие процедуры
("кубики") в конструкцию для решения задачи называют ПОРОЖДАЮЩЕЙ
ПРОЦЕДУРОЙ- Когда программист устраивает головоломные сражения на
экране, он фактически работает только с ней и всякий раз "подсо Бывает"
ей нужные параметры. А она просмотрев эти параметры "собирает" в одну
конструкцию множество прочих процедур и запускает их.
В рамках нашей кииги мы не будем вторгаться ни в анали ги ческую
геометрию, ни в алгебру матриц, иначе нам пришлось бы увеличить размеры
этой книги в несколько раз и потерять при этом основную массу
читателей. Так что, предоставим тем, кому это нужно, развивать свои
знания в этом направлении самостоятельно. Самое же общее понятие о том,
зачем все это нужно, мы Вам дали.
3.2 Системы координат.
Анимация в векторной графике фактически
происходит за счет перемещения тела в пространстве, т.е. за счет
изменения его положения относительно некоторой системы координат.
Разбираясь с этим вопросом, мы никак не сможем обойтись без того, чтобы
не уделить некоторое внимание обзору основных координатных систем. Мы
понимаем, что эти вопросы известны нашим читателям из программы средней
школы и потому затронем их очень кратко.
Прежде всего, скажем, что задать систему
координат - это значит указать, где находится ее начало и как заданы
основные направления.