Гончаров Сx - Школа одарённых детей

advertisement
Департамент общего и профессионального образования Астраханской области.
ГБОШИ АО «Школа одаренных детей им. А.П.Гужвина»
Дипломная работа
Обработка матриц с использованием подпрограмм
Исполнитель:
Гончаров С.А.
Научный руководитель:
Дмитриева Т.В.
Астрахань 2015
Введение.
Представление данных на мониторе компьютера в графическом виде впервые
было реализовано в середине 50-х годов для больших ЭВМ, применявшихся в
научных и военных исследованиях. С тех пор графический способ отображения
данных стал неотъемлемой принадлежностью подавляющего числа
компьютерных систем, в
особенности персональных. Графический интерфейс пользователя сегодня
является стандартом “де-факто” для программного обеспечения разных классов,
начиная с операционных систем.
Существует специальная область информатики, изучающая методы и средства
создания и обработки изображений с помощью программно-аппаратных
вычислительных комплексов, – компьютерная графика. Она охватывает все
виды и формы представления изображений, доступных для восприятия человеком
либо на экране монитора, либо в виде копии на внешнем носителе (бумага,
кинопленка, ткань и прочее). Без компьютерной графики невозможно представить
себе не только
компьютерный, но и обычный, вполне материальный мир. Визуализация данных
находит применение в самых разных сферах человеческой деятельности. Для
примера назовем медицину (компьютерная томография), научные исследования
(визуализация
строения вещества, векторных полей и других данных), моделирование тканей и
одежды, опытно-конструкторские разработки.
В зависимости от способа формирования изображений компьютерную графику
принято подразделять на растровую, векторную и фрактальную. Моя
дипломная работа будет посвещена именно векторной графике.
Целью дипломной работы является изучение математических основ векторной
графики. Составление программ, отображающих кривые на мониторе. Раскрыть
достоинства и недостатки векторной графики.
2
Оглавление:
1. Введение.
2.
2. Теоретическая часть.
2.1.
Векторная графика. Основные понятия
4.
2.2.
Математические основы векторной графики
6.
2.3.
Основной принцип построения графические объектов.
18.
2.4.
Применение векторной графики.
19.
3. Практическая часть.
3.1
Кривые и повороты на нашем мониторе
22.
3.2
Листинг рисунка 1
26.
3.3
Листинг рисунка 2
27.
3.4
Листинг рисунка 3
28.
3.5
Листинг рисунка 4
32.
4. Заключение
35.
5. Литература
36.
3
Векторная графика. Основные понятия.
Для векторной графики (object-oriented graphics) характерно разбиение
изображения на ряд графических примитивов – точка, прямая, ломаная, дуга,
полигон. Таким образом, появляется возможность хранить не все точки
изображения, а координаты узлов примитивов и их свойства (цвет, связь с
другими узлами и т.д.). При использовании векторного представления
изображение представляет собой базу данных описаний примитивов. То есть, в
составе изображения могут быть отрезки, окружности, овалы, точки, кривые Безье
и так далее. А изображение будет представлять из себя массив описаний,
например:

отрезок (20,20-100,80)

окружность (50,40-30)

кривая Безье (20,20-50,30-100,50)
Рис.1.3. Пример векторного изображения
Векторное изображение может быть легко масштабировано без потери
деталей, т.к. это требует пересчета сравнительно небольшого числа координат
узлов.
Векторная графика описывает изображения с использованием прямых и
изогнутых линий, называемых векторами, а также параметров, описывающих
цвета и расположение. Например, изображение древесного листа описывается
4
точками, через которые проходит линия, создавая тем самым контур листа. Цвет
листа задается цветом контура и области внутри этого контура.
Если в растровой графике базовым элементом изображения является
точка, то в векторной графике — линия. Линия описывается математически как
единый объект, и потому объем данных для отображения объектасредствами
векторной графики существенно меньше, чем в растровой графике.
Линия — элементарный объект векторной графики. Как и любой объект,
линия обладает свойствами: формой (прямая, кривая), толщиной, цветом,
начертанием (сплошная, пунктирная). Окончание линии (то есть ее форма в
конечном узле) также выступает одним из свойств с изменяемыми параметрами.
Замкнутые линии приобретают свойство заполнения. Охватываемое ими
пространство может быть заполнено другими объектами (текстуры, карты) или
выбранным цветом. Заполнение бывает растровым и векторным. В последнем
случае иногда используют элементы фрактальной графики, являющейся частным
случаем векторной. Основные языки программирования при выводе графических
примитивов также используют понятия векторной графики.
Простейшая незамкнутая линия ограничена двумя точками, именуемыми
узлами. Узлы имеют ряд свойств, параметры которых влияют на форму конца
линии и характер сопряжения с другими объектами. Все прочие объекты
векторной графики, в том числе самые сложные, составляют из линий (Рис. 1.4).
Рис. 1.4. Разомкнутый контур, замкнутый контур, комбинированный контур
Для построения объектов векторной графики используют инструменты
рисования линий и управления заполнением контуров. Простые объекты могут
5
взаимодействовать различными способами, в том числе с применением булевых
операций объединения, вычитания и пересечения.
Эффекты, применимые к объектам векторной графики, воздействуют на
свойства линии, заполнения и узлов. В программах векторной графики все
эффекты являются модификаторами. Модификатор описывает математическими
методами параметры изменения свойств исходного объекта, не затрагивая его
основ. Именно на этом базируется возможность многоуровневого «отката», то
есть возврата к исходному состоянию объекта.
Математические основы векторной графики.
Рассмотрим подробнее способы представления различных объектов в
векторной графике.
Точка. Этот объект на плоскости представляется двумя числами (х, у),
указывающими его положение относительно начала координат (Рис. 1.5).
Рис. 1.5. Точка на плоскости в системе координат
Прямая линия. Ей соответствует уравнение у = kx + b. Указав параметры к
и b, всегда можно отобразить бесконечную прямую линию в известной системе
координат, то есть для задания прямой достаточно двух параметров (Рис. 1.6).
Отрезок прямой. Он отличается тем, что требует для описания еще двух
параметров — например, координат х1 и х2 начала и конца отрезка (Рис. 1.6).
6
Рис. 1.6. Прямая линия и отрезок в системе координат
Кривая второго порядка. К этому классу кривых относятся параболы,
гиперболы, эллипсы, окружности, то есть все линии, уравнения которых содержат
степени не выше второй (Рис. 1.7). Кривая второго порядка не имеет точек
перегиба. Прямые линии являются всего лишь частным случаем кривых второго
порядка. Формула кривой второго порядка в общем виде может выглядеть,
например, так: х2 + а1у2 + а2ху + а3х + а4у + а5 = 0
Рис. 1.7. Кривая второго порядка в системе координат
Для описания бесконечной кривой второго порядка достаточно пяти
параметров. Если требуется построить отрезок кривой, понадобятся еще два
параметра (Рис. 1.8).
7
Рис. 1.8. Бесконечная кривая второго порядка в системе координат
Кривая третьего порядка. Отличие этих кривых от кривых второго
порядка состоит в возможном наличии точки перегиба. Например, график функции
у = х3 имеет точку перегиба в начале координат. Именно эта особенность
позволяет сделать кривые третьего порядка основой отображения природных
объектов в векторной графике. Линии изгиба человеческого тела, контуры
пересеченной местности, очертания растений весьма близки к кривым третьего
порядка. Все кривые второго порядка, в том числе прямые линии, являются
частными случаями кривых третьего порядка.
В общем случае уравнение кривой третьего порядка можно записать так:
х3 + а1у3 + а2х2у + а3ху2 + а4х2 + а5у2 + а6ху + а7х + а8у + а9 = 0
Таким образом, кривая третьего порядка описывается девятью
параметрами (Рис. 1.9). Описание ее отрезка потребует на два параметра больше
(Рис. 1.10). Несмотря на кажущуюся сложность описания кривой третьего порядка,
ее код занимает в файле несравнимо меньше места, чем код аналогичной кривой,
но созданной из точек (растровой). Для растровой линии дают описание
положения и цвета каждой точки.
8
Рис. 1.9. Кривая третьего порядка в системе координат
Рис. 1.10. Описание отрезка кривой третьего порядка
Кривые Безье (Bezier). Кривые Безье были разработаны в 60-х годах XX
века независимо друг от друга Пьером Безье (Bezier) из автомобилестроительной
компании «Рено» и Полем де Кастелье (de Casteljau) из компании «Ситроен», где
применялись для проектирования кузовов автомобилей.
Кривая Безье является гладкой кривой, то есть она не имеет разрывов и
непрерывно заполняет отрезок между начальной и конечной точками.
Благодаря простоте задания и возможности удобно манипулировать
формой, кривые Безье нашли широкое применение в компьютерной графике для
моделирования гладких линий. Поскольку кривая полностью определяется своей
выпуклой оболочкой из опорных точек, последние могут быть отображены и
9
использоваться для наглядного управления формой линии. Кроме того,
аффинные преобразования кривой (перенос,
масштабирование, вращение) также легко могут быть осуществлены путём
применения трансформаций к опорным точкам. Наличие выпуклой оболочки
значительно облегчает задачу о точках пересечения кривых Безье: если не
пересекаются выпуклые оболочки, то не пересекаются и сами кривые.
Наибольшее значение имеют кубические кривые Безье. Кривые высших
степеней при обработке требуют большего объёма вычислений и для
практических целей используются реже. Для построения сложных по форме линий
отдельные кривые Безье могут быть последовательно соединены друг с другом в
сплайн Безье. Для того, чтобы обеспечить гладкость линии в месте соединения
двух кривых, смежные опорные точки обеих кривых должны лежать на одной
линии.
Сегмент кривой Безье третьего порядка описывается положе¬нием
четырех точек. Две из них являются опорными (узлами кривой): начальная точка
Р0(х0,у0) и конечная точка Р3 (х3,у3). Точки Р1 (х1,у1) и Р2 (х2,у2), определяющие
положение касательных относительно отрезка, называют управляющими (Рис.
1.11). Метод построения кривой Безье основан на использовании пары
касательных (управляющих линий), проведенных к сегменту кривой в его
окончаниях. На форму кривой влияют угол наклона касательной и длина ее
отрезка.
10
Рис. 1.11. Сегмент кривой Безье третьего порядка
Параметрическое уравнение Безье описывает положение точек и, тем
самым, форму кривой. Уравнение решают относительно параметра t,
принимающего значения от 0 (в начальной точке) до 1 (в конечной точке). При
построении сегмента кривой Безье на плоскости рассчитывают координаты х и у
(для четырех точек, из них двух управляющих):
R(t)=P0(1-t)3+P1t2(1-t)2+P2t2(1-t)+P3t3, где 0<t<1;
X(t)=axt3+bxt2+cxt+x0 ,
Y(t)=ayt3+byt2+cyt+y0;
X1=x0+(cx:3);
y1=y0+(cy:3);
X2=x1+[(cx+bx):3];
y2=y1+[(cy+by):3];
X3=x0+cx+bx+ax;
y3=y0+cy+by+y0.
Следовательно:
Cx=3(x1-x0);
cy=3(y1-y0);
Bx=3(x2-x1)-cx;
by=3(y2-y1)-cy;
Ax=x3-x0-cx-bx;
ay=y3-y0-cy-by;
Значение t определяет степень влияния точек на форму кривой (Рис. 1.12 и Рис.
1.13). Например, при t = 0,333 наибольший «вес» приобретает точка Р 1(х1, у1), а
при t = 0,666 — точка Р2 (х2, у2). Из приведенных уравнений вытекает, что кривая
может проходить лишь через начальную и конечную опорные точки
11
сегмента (Р0, Р3). Тем самым достигаются простота описания и
стабильность кривой Безье.
Рис. 1.12. Степень влияния точек на форму кривой (1 вариант)
Рис. 1.13. Степень влияния точек на форму кривой (2 вариант)
Кривые Безье обладают рядом свойств, определяющих возможность их
использования в векторной графике. С геометрической точки зрения, производной
кривой Безье будет другая кривая Безье, векторы управляющих точек которой
определяются вычислением разностей векторов управляющих точек исходной
кривой.
Основные свойства кривой Безье:

непрерывность заполнения сегмента между начальной и конечной
точками

кривая всегда располагается внутри фигуры, образованной линиями,
соединяющими контрольные точки (Рис. 1.14)
12
Рис. 1.14. Кривые, расположенные внутри фигуры

при наличии только двух контрольных точек сегмент представляет
собой прямую линию (Рис. 1.15)
Рис. 1.15. Сегмент при наличии двух контрольных точек

прямая линия образуется при коллинеарном (на одной прямой)
размещении управляющих точек (Рис. 1.16)
Рис. 1.16. Коллинеарное размещение точек

кривая Безье симметрична, то есть обмен местами между начальной и
конечной точками (изменение направления траектории) не влияет на
форму кривой (Рис. 1.17)
13
Рис. 1.17. Кривая Безье симметрична

масштабирование и изменение пропорций кривой Безье не нарушает ее
стабильности, так как она с математической точки зрения «аффинно
инвариантна» (Рис. 1.18, Рис. 1.19, Рис. 1.20 и Рис. 1.21)
Рис. 1.18. Исходная кривая
Рис. 1.19. Масштабирование и изменение пропорций кривой Безье
14
Рис. 1.20. Масштабирование и изменение пропорций кривой Безье
(вращение)
Рис. 1.21. Масштабирование и изменение пропорций кривой Безье (перекос)

изменение координат хотя бы одной из точек ведет к изменению формы
всей кривой Безье (Рис. 1.22)
15
Рис. 1.22. Изменение координат точек

степень кривой всегда на одну ступень ниже числа контрольных точек.
То есть при трех контрольных точках форма кривой — парабола

размещение дополнительных контрольных точек вблизи одной позиции
увеличивает ее «вес» и приводит к приближению траектории кривой к
данной позиции (Рис. 1.2.).
Рис. 1.23. Размещение дополнительных контрольных точек вблизи одной
позиции

окружность не может быть описана параметрическим уравнением
кривой Безье
16

невозможно создать параллельные кривые Безье, за исключением
тривиальных случаев (прямые линии и совпадающие кривые)
При редактировании элементов векторной графики изменяют параметры
прямых и изогнутых линий, описывающих форму этих элементов. Можно
переносить элементы, менять их размер, форму и цвет, но это не отразится на
качестве их визуального представления. Векторная графика не зависит от
разрешения, т.е. может быть показана в разнообразных выходных устройствах с
различным разрешением без потери качества.
Достоинством векторной компьютерной графики является:

Она экономна в плане объемов дискового пространства, необходимого
для хранения изображений: это связано с тем, что сохраняется не само
изображение, а только некоторые основные данные, используя которые
программа всякий раз воссоздает изображение заново. Кроме того,
описание цветовых характеристик несильно увеличивает размер файла.

Объекты векторной графики просто трансформируются и ими легко
манипулировать, что не оказывает практически никакого влияния на
качество изображения

Векторная графика максимально использует возможности
разрешающей способности любого выводного устройства: изображение
всегда будет настолько качественным, насколько способно данное
устройство
Недостатком векторной компьютерной графики является:

Программная зависимость: каждая программа сохраняет данные в
своем собственном формате, поэтому изображение, созданное в одном
векторном редакторе, как правило, не конвертируется в формат другой
программы без погрешностей

Сложность векторного принципа описания изображения не позволяет
автоматизировать ввод графической информации и сконструировать
устройство подобное сканеру для растровой графики
17

Векторная графика действительно ограничена в чисто живописных
средствах и не предназначена для создания фотореалистических
изображений
Основной принцип построения графических объектов
Этот принцип основывается на том, что изначально структуру изображения
составляет именно векторное очертание. Это в равной степени относится как к
2D, так и к 3D изображениям. То есть, не возникает совершенно никаких проблем
при необходимости вывести на распечатке маленькое или большое по
разрешению изображение. Растровое изображение этим похвастать не может.
Хорошо, когда у Вас растр достаточно емкий. Но если это мизерное изображение
сосканированной с журнала фотографии (что убивает качество наповал), то это
уже проблема. Хотя существуют программы, обеспечивающие трассировку растра
в вектор, но корректно, скажем, перевести полноцветную фотографию
человеческого лица в векторное изображение они не могут. В любом случае
полученный вектор не сможет передать всю тонкость и глубину красок полноцвета
растрового изображения. Даже если при переводе в вектор установить настройки,
наиболее точно передающие мелкие детали и градации цвета, все равно при
необъятном размере векторного файла итог будет одинаково не идеальным.
Положение круто меняется, когда вектор экспортируется в растровое
изображение. Здесь почти нет пределов для величины разрешения растра, и при
этом он остается одинаково качественным. Т.е. векторное изображение строится
примитивных графических объектов, построенных из векторов: линия,
прямоугольник, круг, дуга, замкнутая линия, и т.д. Например основой для
большинства сложнейших 3D-фигур является треугольник, из множества которого
состоит вся объемная фигура. Группа примитивов и есть векторный рисунок. В
наше время очень распространена трехмерная графика (3D). На базе трехмерных
векторных редакторов строятся сложнейшие сцены. Эту область несомненно
нельзя заменить ни чем другим. Как бы талантливы и усидчивы вы не были,
нарисовать кистью растрового редактора изображение трехмерного объекта
невозможно. Есть немало людей которые пытаются это опровергать, но это не
тема для разговора. Просто нужно ценить и понимать что разные технологии
компьютерной графики специализированы в разных направлениях и безвкусно
18
смешивать их, или заменять одну другой - глупое упрямство. А вот грамотно
комбинировать их можно и нужно. В эпоху современных технологий широко
используются возможности компьютерной графики. Это знаменитые кинофильмы
(часто отмеченные премией "Оскар"), диснеевские мультфильмы, компьютерные
игры и многое другое. Кроме того, компьютерная графика положительно
зарекомендовала себя на страницах различных газет и журналов. В настоящее
время невозможно представить себе полиграфию без компьютерной графики.
Само формирование компьютерных объектов, регулировка цветового баланса,
создание любых цветовых и объемных эффектов делают изображение ярким и
неповторимым. Сцена 3D-моделей строится на пакетах трехмерного
моделирования и в последующем может визуализироваться с любых точек
просмотра в 2D-изображение. При этом есть возможность любых изменений
освещения, форм объектов, перспективных деформаций, регулировки параметров
материалов и атмосферных эффектов компьютерной трехмерной сцены. Можно
создать не только трехмерные стандартные объекты – куб, рюмка и т.д., но и
более сложные объекты, скажем, зверюшек, а также различных персонажей и т.д.
и т.п…
Применение векторной графики
Успехи компьютерных технологий, достигнутые в последние годы, не
оставляют места сомнениям при выборе способов получения, хранения и
переработки данных о сложных комплексных трехмерных объектах, таких,
например, как памятники архитектуры и археологии, объекты спелеологии и т. д.
Несомненно, что применение компьютеризации для этих целей – дело не
далекого будущего, а уже настоящего времени. Последнее, конечно, в большой
мере зависит от количества денежных средств, вкладываемых с этой целью.
Наука и инженерия
Системы CAD/CAM используются сегодня в различных областях
инженерной конструкторской деятельности от проектирования микросхем до
создания самолетов. Ведущие инженерные и производственные компании, такие
как Boeing, в конечном счете двигаются к полностью цифровому представлению
конструкции самолетов.
19
Архитектура является другой важной областью применения для CAD/CAM и
совсем недавно созданных систем класса walkthrough (прогулки вокруг
проектируемого объекта с целью его изучения и оценки). Такие фирмы, как
McDonald's, уже с 1987 года используют машинную графику для архитектурного
дизайна, размещения посадочных мест, планирования помещений и
проектирования кухонного оборудования. Есть ряд эффектных применений
векторной графики в области проектирования стадионов и дизайна спортивного
инвентаря, новый парк в Балтиморе (Baltimore Orioles'Camden Yards Park).
Медицина стала весьма привлекательной сферой применения
компьютерной графики, например: автоматизированное проектирование
инплантантов, особенно для костей и суставов, позволяет минимизировать
необходимость внесения изменений в течение операции, что сокращает время
пребывания на операционном столе (очень желательный результат как для
пациента, так и врача). Анатомические векторные модели также используются в
медицинских исследованиях и в хирургической практике.
Научные лаборатории продолжают генерировать новые идеи в области
визуализации. Задача сообщества компьютерной графики состоит в создании
удобных инструментов и эффективных технологий, позволяющих пользователям
продолжать научные изыскания за границей возможного и безопасного
эксперимента. Например ,проект виртуального туннеля NASA Ames Research
Center переносит аэродинамические данные в мир виртуальной реальности,
интерес к которой значительно вырос в девяностые годы. NASA Ames было одним
из пионеров в использовании и развитии технологий погружения людей в мнимую
реальность. Специалисты NASA занимались разработкой специальных шлемов и
дисплеев, трехмерных аудиоустройств, уникальных устройств ввода для
оператора и созданием соответствующего программного обеспечения. Возник ряд
компаний, занимающихся виртуальной реальностью, например: Fakespace, Cristal
River Engineering и Telepresence Research.
Все эти инженерные и научные применения убеждают, что индустрия
машинной графики начала обеспечивать пользователей новой технологией, при
которой они действительно уже не заботятся о том, как формируется
изображение - им важен результат.
20
Искусство, развлечения и бизнес
Согласно проведенным мною исследованиям, вплоть до начала девяностых
годов доходы от использования векторной графики в научно-инженерных
приложениях были значительно выше, чем доходы в области бизнеса и других
областях, непосредственно не связанных с наукой. Однако в 1991 году доходы
были поделены в равной степени, а баланс теперь устойчиво сдвигается в
сторону нетехнических приложений. Я считаю, что к 1998 году около двух третей
всех доходов от компьютерной графики поступит именно из нетехнических
областей применения. Некоторые из этих применений получили настолько
широкое распространение, что возникли споры, насколько они действительно
являются машинной графикой. Например, мультимедиа воспринимают отдельно
от машинной графики, что, однако, не так, вследствие явного доминирования
графических изображений.
"Классическая" векторная графика до сих пор используется в различных
приложениях бизнеса, включая разработку концепции, тестирование и создание
новых продуктов, но бизнес также стал лидирующим потребителем систем
мультимедиа, например, в обучении или маркетинговых презентациях. Графика
все шире проникает в бизнес - сегодня фактически нет документов, созданных без
использования какого-либо графического элемента. Соответствующее
программное обеспечение специально разработано, чтобы позволить
пользователям сконцентрироваться больше на содержании, а не на графическом
исполнении.
Грядет всплеск использования графики в анимации, особенно в области
индустрии развлечений. Кинофильм Стивена Спилберга "Парк Юрского периода"
установил в 1993 году новый стандарт фотореализма в графике. Этот фильм не
единичный случай применения 3D графики в кино, и Голливуд расширяет сферу
использования специальных эффектов машинной графики, только в 1994 году
выпустив несколько высокохудожественных фильмов: "The Lion King", "The Mask",
"True Lies" и "Forrest Gump".
Виртуальная реальность находит свою нишу в индустрии развлечений и
видеоиграх. Число виртуальных галерей и развлекательных парков быстро
растет. По моим оценкам 30% (то есть 144 млрд. долл.) всего дохода от
21
использования систем виртуальной реальности было получено в прошлом году
именно от разного рода игр, и доходы от этих применений будут расти.
Лаборатория Media Lab МТИ является уникальным исследовательским
центром разработки совершенных систем взаимодействия "человек-компьютер".
Например, система News в проекте Future использует последние достижения в
области графики, реконструкции звука и изображений, а также моделировании
различных объектов для представления новых результатов исследований и их
презентации в виде соответствующих текстов, графики, аудио и видео.
Кривые и повороты на вашем мониторе
Вспомним три способа задания окружности. Первый и наиболее привычный
способ знаком со школы:
x2+y2=r2
Это уравнение множества точек, лежащих на окружности. Любая точка с
декартовыми (прямоугольными) координатами лежит на окружности тогда и
только тогда, когда сумма квадратов x и y равна квадрату радиуса окружности r.
Приведенной формулой можно воспользоваться для составления программы,
рисующей окружность, если разделить кривую на две части - верхнюю и нижнюю.
Переменная x пробегает через последовательные значения от -r до r. Переменная
y вычисляется для каждой ветви кривой (верхней и нижней):
На Турбо Паскале это выглядит так:
Program Test_1;
Uses CRT, Graph;
Var d,m,r,y:integer;
x:real;
22
Begin
{установка графического режима}
d:=detect; m:=detect;
InitGraph(d,m,'');
{----------------------------}
r:=100; {радиус окружности}
x:=-r;
while x<=r do begin
y:=round(sqrt(r*r-x*x));
{окружность с центром в точке 320, 240}
PutPixel(320+round(x),240+y,white);
PutPixel(320+round(x),240-y,white);
x:=x+0.01;
end; {ждать нажатия клавиши}
repeat
until KeyPressed;
CloseGraph {закрыть графический режим}
End.
Такое задание кривой выглядит несколько неуклюже. Попробуем перейти к
полярным координатам.
В декартовой системе координаты точки x, y указывают удаление точки по
горизонтали и вертикали от некой центральной точки, называемой началом
отсчета (в нашей программе это точка с координатами 320, 240).
Полярные координаты R, θ
определяют точку совсем по - другому: R-
расстояние от точки до начала отсчета, θ — угол между линией, соединяющей
данную точку с точкой начала отсчета, и горизонтальной прямой. Уравнение
окружности в полярных координатах имеет очень простой вид R=r.
Независимо от величины угла
θ
расстояние R всегда равно радиусу
окружности r. К сожалению, программа для изображения окружности в полярных
координатах весьма сложна и мы её не приводим.
23
Третье
представление
основано
на
так
называемых
параметрических
уравнениях. Для окружности они имеют вид:
Эти уравнения очевидны из рисунка.
OM=r; OA=x=r cos(t) ; AM=y=r sin(t)
Если параметр t заставить принимать значения от 0 до 2π, то точка M будет
описывать окружность. Часть программы будет выглядеть так:
t:=0; r:=100;
while t<=2*pi do
begin
x:=round(320+r*cos(t));
y:=round(240+r*sin(t));
{окружность с центром в
точке 320, 240}
PutPixel(x,y,white);
t:=t+0.01
end;
С помощью параметрических уравнений можно задать весьма занимательные
фигуры. Например, эллипс задается следующими уравнениями:
24
Если взять r1>r2, то эллипс будет вытянут вдоль оси x и наоборот — при
r1<r2 он вытянется вдоль оси y.
Уравнения кардиоиды - кривой напоминающей человеческое сердце:
Параметрические уравнения нефроиды - кривой представлющей почки:
В
Сети
существует
множество
сайтов,
посвященных
параметрическим
кривым [1-3]. Названия этихк кривых звучат весьма загадочно: ведьмин локон,
астроида, циклоида, лемнисиката Бернулли, декартов лист и т.п. Получено
уравнение кривой под названием каннабола - напоминающей лист конопли [4,5]:
25
R = (1 - Sin(t))·(1 - .9·|(Sin[4t)|)·(.9 .05·Cos(200t))
x = R·Cos(t)
y = R·Sin(t)
Рисунок 1. Вот еще одна кривая, которая носит название «безумие» (madness)
x = Sin(0.0099t)-0.7Cos(0.0301t)
y = 0.1Sin(0.1503t)+Cos(0.0101t)
Программа для рисования этой кривой:
Program Madness;
Uses CRT, Graph;
Var d,m,x,y :integer;
t:real;
Begin
d:=detect;
m:=detect;
InitGraph(d,m,'');
t:=0;
repeat
x:=320+round(180*(sin(0.0099*t)-0.7*cos(0.0301*t)));
26
y:=240-round(200*(0.1*sin(0.1503*t)+cos(0.0101*t)));
PutPixel(x,y,white);
t:=t+0.01;
until KeyPressed;
CloseGraph;
End.
Естественно, при рисовании, например кардиоид
ы, надо параметр t менять от 0 до 2π, используя цикл while, а её центр поместить
в центр экрана (320, 240).
Рисунок 2. Кстати, кардиоиду можно
изобразить
не
параметрическим
прибегая
кривым.
к
Возьмем
окружность, разобьем её на 144 равные
дуги.
При
обходе
окружности
пронумеруем точки дважды: сначала от
1 до 144, затем от 145 до 288. Точку 1
Кардиоида.
соединим линией (хордой) с точкой 2,
точку 2 соединим с точкой 4, точку 3 с
точкой 6 и т.д., точку 144 соединим с точкой 288. Пересечения хорд образуют
кардиоиду.
Программа для рисования кардиоиды:
Program Cardioid;
Uses CRT, Graph;
Const n=144;
r=200;
t=2*pi/n;
Var x,y: array[1..2*n] of integer;
i,d,m:integer;
27
Begin
d:=detect; m:=detect;
InitGraph(d,m,'');
SetColor(LightRed);
Circle(340,240,r);
for i:=1 to n do begin
x[i]:=340+round(r*cos(i*t));
y[i]:=240+round(r*sin(i*t));
x[i+n]:=x[i];
y[i+n]:=y[i]
end;
SetColor(green);
for i:=1 to n do line(x[i],y[i],x[i*2],y[i*2]);
repeat
until KeyPressed;
CloseGraph
End.
Рисунок 3. Продолжим рассмотрение
задач компьютерной графики .
На
первый
взгляд
приведенный
рисунок кажется достаточно сложным,
но
при
более
рассмотрении
пристальном
оказывается,
что
представляет
он
собой
последовательность вложенных друг в
друга
квадратов.
только
меньше,
становятся
но
Эти
все
квадраты
меньше
поворачиваются
не
и
на
постоянный угол.
Допустим исходный квадрат имеет вершины с координатами (x[i], y[i]), где
i=1,2,3,4, a i-ая сторона квадрата является линией, соединяющей вершину с
28
координатами (x[i], y[i]) с вершиной (x[i+1], y[i+1]), при этом, дополнительно
предположим, что если i=4, то i+1 будет равным 1, т.е. 4+1=1 (это называется
сложением по модулю 4). Каждая сторона квадрата рассекается точкой (x'[i],y'[i]) в
отношении μ/(1-μ), где 0≤ μ ≤1. Параметр μ равен отношению расстояний
от (x[i], y[i]) до(x'[i],y'[i]) и от (x'[i],y'[i]) до (x[i+1], y[i+1]).
Следовательно (x'[i],y'[i]) = (x[i](1- μ)+x[i+1]μ, y[i](1- μ)+y[i+1]μ)
Program Squares;
Uses CRT, Graph;
Procedure Square;
Type crd=record
x,y:integer
end;
{Массив координат вершин}
a_t=array [1..4] of crd;
Procedure Sq(p:a_t;col:integer);
{Рисование квадратов}
Var i,k:integer;
Begin
SetColor(col);
for i:=1 to 4 do begin
if i=4 then k:=1
else k:=i+1;
line(p[i].x,p[i].y,p[k].x,p[k].y);
end;
End;
Var p:a_t;
d,m,i,j,L,k:integer;
mu:real;
xx,yy:integer;
Begin
d:=detect; m:=detect; InitGraph(d,m,'');
mu:=0.075; L:=400;
{Вершины исходного квадрата}
29
p[1].x:=320-L div 2; p[2].x:=p[1].x;
p[1].y:=240+L div 2; p[4].y:=p[1].y;
p[3].x:=320+L div 2; p[4].x:=p[3].x;
p[2].y:=240-L div 2; p[3].y:=p[2].y;
for i:=1 to 50 do begin
{Строится 50 квадратов}
xx:=p[1].x; yy:=p[1].y;
sq(p,white);
{Движение квадрата - квадрат белого цвета,
задержка, квадрат зеленого цвета}
delay(5000); {Задержка зависит от параметров компьютера}
sq(p,lightgreen);
{Пересчет координат вершин квадрата}
for j:=1 to 4 do
if j<4 then begin
p[j].x:=round((1-mu)*p[j].x+mu*p[j+1].x);
p[j].y:=round((1-mu)*p[j].y+mu*p[j+1].y)
end
else begin
{4-я вершина соединяется с первой}
p[j].x:=round((1-mu)*p[j].x+mu*xx);
p[j].y:=round((1-mu)*p[j].y+mu*yy)
end;
end;
repeat
until KeyPressed;
CloseGraph
End;
Begin
Square
End.
30
Полученные в результате поворота квадратов кривые называют кривыми
преследования.
По
траектории,
совпадающей
с
кривой
преследования,
перемещается, например, собака, находящаяся сначала в вершине исходного
квадрата и бегущая прямо на зайца, который бежит к центру квадрата из другой
вершины. По кривой преследования перемещается самонаводящаяся ракета,
летящая к движущейся цели.
Мы выяснили, как можно изобразить эллипс и как повернуть квадраты.
Рассмотрим, как можно получить эллипс, повернутый на заданный угол α . Для
этого
к
каждой
точке
эллипса
с
координатами
(x,y)
надо
применить
преобразование поворота.
Для того чтобы получить эти уравнения нужно взять точку в прямоугольной
системе координат (x',y') , а затем повернуть систему координат на угол α, в
новой системе координат точка будет иметь координаты (x,y).
Необходимо получить
зависимость координаты
x' от x и y' от y.
Угол α закрашен
красным цветом.
Тогда
OA=OCcosα=xcosα
PC=MCsinα=ysinα
OB=x'=xcosα-ysinα
MP=MCcosα=ycosα
PB=CA=OCsinα=xsinα
BM=y'=xsinα+ycosα
31
Рисунок
4.
Приведенная
программа
рисует 20 поворачивающихся эллипсов.
Program Ellipses;
Uses CRT, Graph;
Var d,m,x,y:integer;
xx,yy,t,a:real;
Const
{Центр экрана}
xo=320; yo=240;
Begin
d:=detect; m:=detect;
InitGraph(d,m,'');
a:=0;
{Изменение угла поворота}
while a<=2*pi do begin
t:=0;
while t<=2*pi do begin
{Координаты эллипса}
xx:=200*cos(t);
yy:=80*sin(t);
{Поворот}
x:=round(xo+(xx*cos(a)-yy*sin(a)));
y:=round(yo-(xx*sin(a)+yy*cos(a)));
PutPixel(x,y,white);
t:=t+0.001;
end;
a:=a+pi/20;
end;
repeat
until KeyPressed;
CloseGraph
End.
32
Наконец программа, рисующая вращающийся кубик.
Program Cube;
Uses CRT, Graph;
Type a_t=array [1..8] of integer;
Procedure Cubik(x,y:a_t;c:integer);
{Процедура рисования кубика,
координаты вершин в массивах х,y}
Begin
SetColor(c);
line(x[1],y[1],x[2],y[2]);
line(x[2],y[2],x[3],y[3]);
line(x[3],y[3],x[4],y[4]);
line(x[4],y[4],x[1],y[1]);
line(x[5],y[5],x[6],y[6]);
line(x[6],y[6],x[7],y[7]);
line(x[7],y[7],x[8],y[8]);
line(x[8],y[8],x[5],y[5]);
line(x[1],y[1],x[5],y[5]);
line(x[2],y[2],x[6],y[6]);
line(x[3],y[3],x[7],y[7]);
line(x[4],y[4],x[8],y[8]);
End;
Var x1,x:a_t;
y1,y:a_t;
d,m:integer;
x0,y0:integer;
t:real;
i:integer;
Begin
d:=detect; m:=detect; InitGraph(d,m,'');
{Начальные координаты вершин кубика}
x[1]:=300; y[1]:=220; x[5]:=320; y[5]:=200;
33
x[2]:=300; y[2]:=260; x[6]:=320; y[6]:=240;
x[3]:=340; y[3]:=260; x[7]:=360; y[7]:=240;
x[4]:=340; y[4]:=220; x[8]:=360; y[8]:=200;
{Координаты центра вращения}
x0:=310; y0:=200;
t:=0;
repeat
for i:=1 to 8 do begin
{Пересчет координат вершин для поворота}
x1[i]:=x0+round((x[i]-x0)*cos(t)-(y[i]-y0)*sin(t));
y1[i]:=y0-round((x[i]-x0)*sin(t)+(y[i]-y0)*cos(t));
{Минус - вращение против часовой стрелки}
end;
{Рисование кубика белым цветом}
Cubik(x1,y1,white);
delay(1000); {Задержка}
{Рисование кубика черным цветом - цветом фона}
Cubik(x1,y1,black);
t:=t+0.05; {Новый угол поворота}
until KeyPressed; {Ждать нажатия клавиши}
CloseGraph;
End.
34
Заключение
Все области применения - будь то инженерная и научная, бизнес и
искусство/развлечения - являются сферой применения векторной графики.
Возрастающий потенциал ПК и их громадное число - порядка 100 миллионов обеспечивает соблазнительную базу для капиталовложений и роста. И ожидается
устойчивый рост индустрии в данной сфере к концу этого десятилетия, особенно
если учесть, что в начале этого десятилетия ежегодный рост составлял около
12%. Неизвестно как долго продлиться тенденция удвоения капиталовложений,
особенно под воздействием цен, однако я ожидаю устойчивое 10% ежегодное
повышение в последующие 5 лет. Конечно, компании продолжают
формироваться, хотя инвесторы сейчас, кажется, больше предпочитают
вкладывать деньги в программное обеспечение, в т.ч. редакторы векторной
графики. Сегодня особенно привлекательны для инвесторов компании,
специализирующиеся на графических интерфейсах пользователя, объектноориентированных программах, виртуальной реальности и программном
обеспечении параллельных процессов.
По увеличению числа графических
терминалов от 100 в 1964 году до 50.000 в 1977 году, а сейчас, в 1994 году, я
констатирую, что 3 млн. рабочих станций и 60 млн. ПК используются только в
США. Машинная графика имеет сегодня промышленную базу, оцениваемую в 36
млрд. долл., которая обеспечивает работой около 300 тысяч специалистов. Она
продолжает лидировать в вопросах обеспечения нашего взаимодействия с
компьютерами и организации доступа к информации. Мы вступаем в новую эпоху
расширения полномочий графических систем при движении по информационной
супермагистрали.
35
Список используемых источников информации:
1.
"Publish/Дизайн, Верстка, Печать" (Издательство "Открытые Системы"):
http://osp.asu.pstu.ac.ru/publish/1997/04/34.htm
2.
Графика для WEBа : http://kamcity.iks.ru/pcint/software/stat/web_grafic.htm
3.
Lavel. Graphics. Растровая и векторная графика : http://winwww.klax.tula.ru/~level/graphics/predgrph.html
4.
Векторная графика: http://imped.vgts.ru/polygraph/vektor.html
5.
Системы для векторизации и обработки изображений :
http://www.ascon.ru/kompas/vect.html
6.
PC Magazine (Russian Edition) от 22.04.97, р.185. «Пакеты иллюстративной
графики»
7.
О векторной и растровой графике:
http://flashmaker.8m.com/help/html/02basics2.html
8.
Руководство пользователя "Corel Draw 8" (русская версия)
9.
Руководство пользователя "Adobe Illustrator 6” (русская версия)
36
Download