- •Федеральное агентство по образованию
- •Глава 3. Растровая графика. Базовые растровые алгоритмы 37
- •Глава 4. Векторная графика 77
- •Глава 5. Фрактальная графика 90
- •Глава 6. Цветовые модели компьютерной графики 95
- •Глава 7. Методы и алгоритмы построения сложных трехмерных объектов 128
- •Глава 8. Реалистическое представление сцен 146
- •Глава 9. Архитектуры графических систем 172
- •Глава 10. Стандартизация в компьютерной графике 180
- •Глава 11. Форматы графических файлов 196
- •Глава 12. Технические средства кг (оборудование кг) 214
- •Глава 1. Основные понятия
- •1.1 Разновидности компьютерной графики
- •Полиграфия
- •Мультимедиа
- •Сапр и деловая графика
- •Геоинформационные системы (гис)
- •1.2. Принципы организации графических программ
- •Растровые программы
- •Векторные программы
- •Фрактальные программы
- •Глава 2. Координаты и преобразования
- •2.1 Координатный метод
- •2.1.1. Преобразование координат
- •Простейшие двумерные преобразования
- •Однородные координаты и матричное представление двумерных преобразований
- •Композиция двумерных преобразований
- •Матричное представление трехмерных преобразований
- •Композиция трехмерных преобразований
- •Преобразование объектов
- •Преобразование как изменение систем координат
- •2.1.2 Аффинные преобразования на плоскости
- •2.2 Проекции
- •2.2.1 Мировые и экранные координаты
- •2.2.2 Основные типы проекций
- •При повороте на угол β относительно оси у (ординат), на угол α вокруг оси х (абсцисс) и последующем проектировании осиZ (аппликат) возникает матрица
- •Глава 3. Растровая графика. Базовые растровые алгоритмы
- •3.1 Растровые изображения и их основные характеристики
- •3.2 Вывод изображений на растровые устройства
- •3.3 Методы улучшения растровых изображений
- •3.21. Диагональное расположение ячеек 5x5
- •3.22. Диагональные структуры: а - сдвиг строк ячеек, б - ячейки другого типа
- •3.24. Набор чм-ячеек 5x5
- •3.4. Базовые растровые алгоритмы Алгоритмы вывода прямой линии
- •Инкрементные алгоритмы
- •Кривая Безье
- •Алгоритмы вывода фигур
- •Алгоритмы закрашивания
- •Стиль заполнения
- •3.5 Инструменты растровых графических пакетов
- •Инструменты выделения. Каналы и маски
- •Выделение
- •Инструменты выделения и маскирования
- •Гистограммы
- •Тоновая коррекция изображения
- •Уровни (Levels)
- •Цветовая коррекция и цветовой баланс
- •Фильтры (Plug-ins) и спецэффекты (Effects)
- •3.6 Преимущества и недостатки растровой графики
- •Глава 4. Векторная графика
- •4.1 Средства создания векторных изображений
- •4.2 Сравнение механизмов формирования изображений в растровой и векторной графике
- •4.3 Структура векторной иллюстрации
- •4.4 Математические основы векторной графики
- •4.5. Элементы (объекты) векторной графики
- •4.6. Достоинства и недостатки векторной графики
- •Глава 5. Фрактальная графика
- •5.1 Математика фракталов. Алгоритмы фрактального сжатия изображений
- •5.2 Обзор основных фрактальных программ
- •Глава 6. Цветовые модели компьютерной графики
- •6.1 Элементы цвета
- •6.1.1 Свет и цвет
- •6.1.2 Физическая природа света и цвета
- •6.1.3 Излученный и отраженный свет
- •6.1.4 Яркостная и цветовая информация
- •6.1.5 Цвет и окраска
- •6.2 Характеристики источника света
- •Стандартные источники
- •6.2.2 Особенности восприятия цвета человеком
- •Колбочки и палочки
- •Спектральная чувствительность глаза к яркости
- •Спектральная чувствительность наблюдателя
- •6.3 Цветовой и динамический диапазоны
- •6.4 Типы цветовых моделей
- •6.4.1 Аддитивные цветовые модели
- •Почему rgb-модель нравится компьютеру?
- •Ограничения rgb-модели
- •SRgb — стандартизированный вариант rgb-цветового пространства
- •6.4.2 Субтрактивные цветовые модели
- •Цветовая модель cmy
- •Ограничения модели cmyk
- •Возможности расширения цветового охвата cmyk
- •6.4.3 Перцепционные цветовые модели
- •Достоинства и ограничения hsb-модели
- •6.4.4 Системы соответствия цветов и палитры
- •Системы соответствия цветов
- •Назначение эталона
- •Кодирование цвета. Палитра
- •Глава 7. Методы и алгоритмы построения сложных трехмерных объектов
- •7.1 Модели описания поверхностей
- •7.1.1. Аналитическая модель
- •7.1.2 Векторная полигональная модель
- •7.1.3 Воксельная модель
- •7.1.4 Равномерная сетка
- •7.1.5 Неравномерная сетка. Изолинии
- •7.2. Визуализация трехмерных объектов
- •7.2.1 Каркасная визуализация
- •7.2.2 Показ с удалением невидимых точек
- •Глава 8. Реалистическое представление сцен
- •8.1 Закрашивание поверхностей
- •8.1.1 Модели отражения света
- •8.1.2 Вычисление нормалей и углов отражения
- •8.2 Метод Гуро
- •8.3 Метод Фонга
- •8.4. Имитация микрорельефа
- •8.5 Трассировка лучей
- •8.6 Анимация
- •Глава 9. Архитектуры графических систем
- •9.1 Суперстанции
- •9.2 Компоненты растровых дисплейных систем
- •9.3 Подходы к проектированию графических систем
- •9.4 Графические системы на базе сопроцессора i82786
- •9.5 Графические системы из набора сверх больших интегральных схем (сбис)
- •9.6 Растровый графический процессор dp-8500
- •9.7 Графические системы на универсальном процессоре
- •9.8 Высокоскоростные графические системы
- •9.9 Рабочие (супер)станции с использованием универсального вычислителя
- •Глава 10. Стандартизация в компьютерной графике
- •10.2 Международная деятельность по стандартизации в машинной графике
- •Деятельность iso, iec по стандартизации в машинной графике
- •10.3 Классификация стандартов
- •10.4 Графические протоколы
- •10.4.1 Аппаратно-зависимые графические протоколы
- •Протокол tektronix
- •Протокол regis
- •Протокол hp-gl
- •10.4.2 Языки описания страниц
- •Язык PostScript
- •Язык pcl
- •10.4.3 Аппаратно-независимые графические протоколы
- •10.4.4 Проблемно-ориентированные протоколы
- •Глава 11. Форматы графических файлов
- •11.1 Векторные форматы
- •11.2 Растровые форматы
- •11.3 Методы сжатия графических данных
- •11.4 Преобразование файлов из одного формата в другой
- •Преобразование файлов из растрового формата в векторный
- •Преобразование файлов одного векторного формата в другой
- •Глава 12. Технические средства кг (оборудование кг)
- •12.1 Видеоадаптеры
- •12.2 Манипуляторы
- •Дигитайзер
- •12.3 Оборудование мультимедиа
- •12.4 Мониторы
- •Характеристики мониторов
- •Аналоговые мониторы
- •Жидкокристаллические дисплеи
- •Газоплазменные мониторы
- •Видеокарта
- •Функции графического ускорителя
- •Выбор видеокарты под монитор
- •12.5 Видеобластеры
- •12.6 Периферия
- •12.6.1 Принтеры
- •12.6.2 Имиджсеттеры
- •12.6.3 Плоттеры
- •12.7 Модемы
- •12.8 Звуковые карты
- •12.9 Сканеры
- •Планшетные сканеры
- •12.10 Секреты графических планшетов (дигитайзеров)
- •Достоинства и недостатки графических планшетов
- •12.11 Цифровые фотоаппараты и фотокамеры
- •Литература
Алгоритмы вывода фигур
Фигурой здесь будем считать плоский геометрический объект, который состоит из линий контура и точек заполнения, которые помещаются внутри контура. Контуров может быть несколько — например, если объект имеет внутри пустоты (рис. 3.35). В некоторых графических системах одним объектом может считаться и более сложная многоконтурная фигура - совокупность островов с пустотами.
Графический вывод фигур делится на две задачи: вывод контура и вывод точек заполнения. Поскольку контур представляет собой линию, то вывод контура проводится на основе алгоритмов вывода линий. В зависимости от сложности контура, это могут быть отрезки прямых, кривых или произвольная последовательность соседних пикселов.
Рис. 3.35. Пример фигуры
Для вывода точек заполнения известны методы, которые разделяются в зависимости от использования контура на два типа: алгоритмы закрашивания от внутренней точки к границам произвольного контура и алгоритмы, которые используют математическое описание контура.
Алгоритмы закрашивания
Рассмотрим алгоритмы закрашивания произвольного контура, который уже нарисован в растре. Сначала определяются координаты произвольного пиксела, находящегося внутри очерченного контура фигуры. Цвет этого пиксела изменяем на нужный цвет заполнения. Потом проводится анализ цветов всех соседних пикселов. Если цвет некоторого соседнего пиксела не равен цвету границы контура или цвету заполнения, то цвет этого пиксела изменяется на цвет заполнения. Потом анализируется цвет пикселов, соседних с предшествующими. И так далее, пока внутри контура все пикселы не перекрасятся в цвет заполнения.
Пикселы контура образуют границу, за которую нельзя выходить в ходе последовательного перебора всех соседних пикселов. Соседними могут считаться только четыре пиксела (сосед справа, слева, сверху и снизу — четырехсвязность), или восемь пикселов (восьми-связность). Не всякий контур может считаться границей закрашивания, например, для восьмисвязного алгоритма (рис. 3. 36).
Рис. 3.36.Особенности восьмисвязного закрашивания - выход за границу контура на следующих
шагах закрашивания
Простейший алгоритм закрашивания. Для всех алгоритмов закрашивания нужно задавать начальную точку внутри контура с координатами х0, у0. Простейший алгоритм можно описать всего двумя шагами.
Алгоритм закрашивания линиями.Данный алгоритм получил широкое распространение в компьютерной графике. От приведенного выше простейшего алгоритма он отличается тем, что на каждом шаге закрашивания рисуется горизонтальная линия, которая размещается между пикселами контура. Алгоритм также рекурсивный, но поскольку вызов функции осуществляется для линии, а не для каждого отдельного пиксела, то количество вложенных вызовов уменьшается пропорционально длине линии. Это уменьшает нагрузку на стековую память компьютера и обеспечивает высокую скорость работы.
Пример работы алгоритма закрашивания линиями приведен на рис 3. 37.
Рис. 3.37. Количество циклов LineFill
Алгоритмы заполнения, которые используют математическое описание контура
Математическим описанием контура фигуры может служить уравнение у =f(x) для контypaокружности, эллипса или другой кривой. Для многоугольника (полигона) контур задается множеством координат вершин (хi,уi). Возможны и другие формы описания контура. Общим для рассматриваемых ниже алгоритмов есть то, что для генерации точек заполнения не нужны предварительно сформированные в растре пикселы границы контура фигуры. Контур может вообще не рисоваться в растре ни до, ни после заполнения.
Рис. 3.38. Заполнение прямоугольника
Заполнение прямоугольников. Среди всех фигур прямоугольник заполнять наиболее просто. Если прямоугольник задан координатами противоположных углов, например, левого верхнего(х1, у1) и правого нижнего (х2, у2), тогда алгоритм может состоять в последовательном рисовании горизонтальных линий заданного цвета (рис. 3. 38).
Заполнение круга. Для заполнения круга можно использовать алгоритм вывода контура. В процессе выполнения этого алгоритма последовательно вычисляются координаты пикселов контура в границах одного октанта. Для заполнения следует выводить горизонтали, которые соединяют пары точек на контуре, расположенные симметрично относительно осиy(рис. 3.39, слева).
Так же можно создать и алгоритм заполнения эллипса.
Заполнение полигонов. Контур полигона определяется вершинами, которые соединены отрезками прямых — ребрами (рис. 3.39, справа). Это — векторная форма описания фигуры.
Рассмотрим один из наиболее популярных алгоритмов заполнения полигона. Его основная идея — закрашивание фигуры отрезками прямых линий. Удобней использовать горизонтали. Алгоритм представляет собою цикл вдоль оси у, в ходе этого цикла выполняется поиск точек пересечения линии контура с соответствующими горизонталями. Этот алгоритм получил названиеXY.
Рис. 3.39. Заполнение круга Пример полигона
В этом алгоритме использовано топологическое свойство контура фигуры. Оно состоит в том, что любая прямая линия пересекает любой замкнутый контур четное количество раз (рис. 3.40). Для выпуклых фигур точек пересечения с любой прямой всегда две.
Рис. 3.40. Заполнение полигона
При нахождении точек пересечения горизонтали с контуром необходимо принимать во внимание особые точки. Если горизонталь имеет координату(у), совпадающую с координатойyiвершиныРi тогда надлежит анализировать то, как горизонталь проходит через вершину. Если горизонталь при этомпересекает контур, как, например, в вершинахР0лиР4, то в массив записывается одна точка пересечения. Если горизонталькасается вершины контура (в этом случае вершина соответствует локальному минимуму или максимуму, как, например, в вершинахР1, Р2, Р3 илиР5), тогда координата точки касания или Не записывается, или записывается в массив два раза. Это является условием четного количества точек пересечения, хранящихся в массиве{хj}.
Процедура определения точек пересечения контура с горизонталью, учитывая анализ на локальный максимум, может быть достаточно сложной. Это замедляет работу. Радикальным решением для упрощения поиска точек пересечения может быть сдвиг координат вершин контура или горизонталей заполнения таким образом, чтобы ни одна горизонталь не попала в вершину.
Сдвиг можно выполнять разными способами, например, ввести в растр дробные координаты для горизонталей; ymin + 0. 5,ymin + 1. 5,..., ymin - 0. 5. Но такое упрощение процедуры нахождения точек пересечения приводит к некоторому искажению формы полигона.
Для определения координат (х) точек пересечения для каждой горизонтали необходимо перебирать всеη ребер контура. Координата пересеченияpeбраpi - pkcгоризонталью(у) равняется
x = xi + (уk - у)(хк- хi )/(уk - уi).
Количество тактов работы этого алгоритма:
где ymax, ymin — диапазон координатy,Νгоρ— число тактов, нужных для одной горизонтали. Оценим величинуΝгоρ как пропорциональную числу вершин
где к— коэффициент пропорциональности,n — число вершин полигона.
Возможна модификация приведенного алгоритма для ускорения его работы. Например, можно принять во внимание то, что каждая горизонталь обычно пересекает небольшое количество ребер контура. Поэтому, если при поиске точек пересечения делать предшествующий отбор ребер, которые находятся вокруг каждой горизонтали, то можно добиться уменьшения количества тактов работы с Nгор = к ∙ n до к. ∙ nр, гдеnp — количество отобранных ребер. Например, разделим диапазонymin-ymaxпополам. Если для диапазона отyminдоyср,составить список ребер (или вершин), попадающих в этот диапазон, то в список будет включено приблизительно вдвое меньшее количество, чем для всего диапазона отyminдоymax.Почему приблизительно — ибо это зависит от размещения вершин контура полигона. Таким образом, при работе алгоритма для каждой горизонтали в диапазоне отyminдоyср уже нужно не(к. ∙ п) тактов, а(k ·n/2).
Аналогично для диапазона уср-ymахтакже можно составить список ребер, который также будет почти вдвое меньшим. Если принять, что подсчеты для каждой горизонтали теперь выполняются за вдвое меньшее количество тактов, а именно за(Nгор /2), то общее число тактов:
где Νдоп — количество тактов, которые необходимы при создании списка ребер.
Такой способ повышения быстродействия заполнения полигонов эффективен для большого количества вершин. Контур можно делить не пополам, а на более мелкие части — соответственно повышается скорость.
Приведенные выше алгоритмы заполнения могут быть использованы не только для рисования фигур. На основе алгоритмов заполнения могут быть разработаны алгоритмы для других целей. Например, для определения площади фигуры (если считать площадь пропорциональной количеству пикселов заполнения). Или, например, алгоритм для поиска объектов по внутренней точке — эта операция часто используется в векторных графических редакторах.
Логическое условие будет определять стиль линии. Например, если условием будет четность значения С, то получим линию из разрозненных точек. Для рисования пунктирной линии можно анализировать остаток от деления С наS. Например, если рисовать пикселы линии только при СmodS<S/2, то получим пунктирную линию с длиной штриховS/2. шаг штрихов —S.
При выводе полилиний, а также сплайновых кривых, аппроксимируемых прямолинейными отрезками, необходимо предотвратить обнуление значения счетчика в начале каждого отрезка и обеспечить продолжение непрерывного прироста вдоль всей сложной линии. Иначе будут нестыковки пунктира. Использование переменной-счетчика затруднено при генерации пунктирных линий в алгоритмах, которые используют симметрию, например, при выводе окружности или эллипса. Здесь необходимо обеспечивать стыковку пунктира на границах октантов или квадрантов.