Автор работы: Пользователь скрыл имя, 13 Ноября 2011 в 21:58, курсовая работа
Цель работы - разработать алгоритмы заполнения различных фигур определенным стилем на языке Pascal .
Были выделены следующие задачи:
- изучить литературу по проблеме исследования.
-определить существующие стили заполнения.
- выявить возможности и средства компьютерной графики в Турбо Паскале.
- разработать алгоритмы заполнения различных фигур определенным стилем на языке Pascal .
Введение…………………………………………………………………………...3
Стиль заполнения. Кисть. Текстура……………………………………………………………………………5
Алгоритмы заполнения различных фигур определенным стилем……………………………………………………………………………...8
Заключение……………………………………………………………………….20
Список литературы………………………………………………………………21
Оглавление
Введение…………………………………………………………
Заключение……………………………………………………
Список литературы…………………………………
Введение
Компьютерная графика прочно вошла в нашу жизнь. Она используется почти во всех научных и инженерных дисциплинах для наглядности и восприятия, передачи информации. Применяется в медицине, рекламном бизнесе, индустрии развлечений и т. д. Компьютерная графика - это и новые эффективные технические средства для проектировщиков, конструкторов и исследователей, и программные системы и машинные языки, и новые научные, учебные дисциплины, родившиеся на базе синтеза таких наук как аналитическая, прикладная и начертательная геометрии, программирование для ПК, методы вычислительной математики и т.п. Конечным продуктом компьютерной графики является изображение. Машина наглядно изображает такие сложные геометрические объекты, которые раньше математики даже не пытались изобразить.
Это
изображение может
В
цифровом мире имеется два основных
способа представления
В обоих случаях реальное непрерывное изображение разбивается на элементарные объекты, но описываемые различными методами. Один способ - векторная графика - представляет собой математическое описание составляющих элементов (объектов) изображения - кривых и прямых линий, а также элементарных геометрических фигур (прямоугольников, эллипсов и т.п.). Другой способ, растровая графика, заключается в том, что реальное непрерывное изображение разбивается на точки, называемые пикселами, причем каждая точка обладает точно определенными координатами (номер строки и столбца, как ячейки таблицы). Кроме этих двух видов графики, в отдельные виды выделяют фрактальную графику, трехмерные (3D) изображения, анимацию (2D и 3D) и изображения для Web, хотя все они, по сути, являются какой-либо разновидностью либо векторных изображений, либо растровых, либо используют механизмы и той, и другой одновременно.
Объектом исследования данной курсовой работы является компьютерная графика.
Предметом исследования является алгоритмы заполнения фигур определенным стилем.
Цель работы - разработать алгоритмы заполнения различных фигур определенным стилем на языке Pascal .
Были выделены следующие задачи:
-
изучить литературу по
-определить существующие стили заполнения.
-
выявить возможности и
-
разработать алгоритмы
При выводе фигур могут использоваться различные стили заполнения. Для обозначения стилей заполнения, отличных от сплошного стиля, используют такие понятия, как кисть и текстура. Их можно считать синонимами, однако понятие текстуры обычно используется применительно к трехмерным объектам, а кисть — для изображения двумерных объектов. Текстура — это стиль заполнения, закрашивание, которое имитирует сложную рельефную объемную поверхность, выполненную из какого-то материала. Для описания алгоритмов заполнения фигур с определенным стилем используем тот же способ, что и для описания алгоритмов рисования линий. Описание всех разновидностей подобных алгоритмов можно дать с помощью такой обобщенной схемы:
Вывод пиксела заполнения цвета С с координатами (x,y)
Например, в алгоритме вывода полигонов пикселы заполнения рисуются в теле цикла горизонталей, а все другие операции предназначены для подсчета координат (х, у) этих пикселов. Сплошное заполнение означает, что цвет (С) всех пикселов одинаков, то есть C=const. Нам нужно как-то изменять цвет пикселов заполнения, чтобы получить определенный узор. Преобразуем алгоритм заполнения следующим образом:
C=f(x,y)
Вывод пиксела заполнения (x,y) цветом С
Функция f(x,y) будет определять стиль заполнения. Аргументами функции цвета являются координаты текущего пиксела заполнения. Однако в отдельных случаях эти аргументы не нужны. Например, если цвет С вычислять как случайное значение в определенных границах: С = random (), то можно создать иллюзию шершавой матовой поверхности (рис. 1).
Другой стиль заполнения — штриховой (рис. 2). Для него функцию цвета также можно записать в аналитической форме:
Где S –
период, а Т – толщина штрихов, Сш
– цвет штрихов, Сф – цвет
фона.
Если не рисовать пикселы фона, то можно создать иллюзию полупрозрачной фигуры. Подобную функцию можно записать и для других типов штриховки. Аналитическая форма описания стиля заполнение позволяет достаточно просто изменять размеры штрихов при изменениях масштаба показа, например, для обеспечения режима WYSIWYG.
Зачастую при использовании кистей и текстур используется копирование небольших растровых изображений. Такой алгоритм заполнения можно описать вышеупомянутой общей схемой, если строку
С=f(x,у) заменить двумя другими строками:
Координаты пиксела заполнения (x, y) преобра зуем в растровые координаты образца кисти (xT ,yT )
По координатам (xT ,yT ) определяем цвет (С) пиксела в образце кисти
Вывод пиксела заполнения цвета С с координатами (x, y)
Преобразование координат пиксела заполнения (х, у) в координаты внутри образца кисти можно выполнить таким образом:
xT= x mod m,
yT=
y mod n,
где т, п — размеры растра кисти соответственно по горизонтали и вертикали. При этом координаты (хТ, уТ) будут в диапазоне хТ= 0...m- 1, уТ =0...п - 1 при любых значениях х и у. Таким образом, обеспечивается циклическое копирование фрагментов кисти внутри области заполнения фигуры (рис. 3).
Удобно, когда размеры кисти равны степени двойки. В этом случае вместо операций взятия остатка (mod) можно использовать более быстродействующие для цифровых компьютеров поразрядные двоичные операции. Приведем пример вычисления остатка от деления на 16.
Биты двоичного кода числа Х:
х х . . . х х х х х
Х
mod 16 = 0 0 . . . 0 x x x x
Здесь можно использовать поразрядную операцию & (И). Еще один пример. Если необходимо вычислить X mod 256, а значение X записано в регистре АХ микропроцессора (совместимого с 80x86), то в качестве результата достаточно взять содержимое младшей байтовой части этого регистра — AL.
Одна из проблем наложения текстур заключается в том, что преобразование растровых образцов (повороты, изменение размеров и тому подобное) приводят к ухудшению качества растров. Повороты растра добавляют ступенчатость (aliasing); увеличение размеров укрупняет пикселы, а уменьшение размеров растра приводит к потере многих пикселов образца текстуры, появляется муар. Для улучшения текстурованных изображений используют методы фильтрации (интерполяции) растров текстур [41, 47]. Также используются несколько образцов текстур для различных ракурсов показа (mipmaps) — компьютерная система во время отображения находит в памяти наиболее пригодный растровый образец.
Для использования текстур необходим достаточный объем памяти компьютера — количество растровых образцов может достигать десятков, сотен и более в зависимости от количества типов объектов и многообразия пространственных сцен. Чтобы как можно быстрее создавать изображение, необходимо сохранять текстуры в оперативной памяти.
Для экономии памяти, выделяемой для текстур, можно использовать блочное текстурирование. Текстура здесь уже не представляет всю грань целиком, а лишь отдельный фрагмент, который циклически повторяется в грани. Это напоминает процесс размножения рисунка кисти при закрашивании полигонов.
Разумеется, далеко не для всех объектов можно использовать такой способ отображения, однако, например, для образцов современной массовой "коробочной" архитектуры в этом плане имеются практически неограниченные возможности (рис. 4).
Современные видеоадаптеры оснащены графическими процессорами, которые аппаратно поддерживают операции с текстурами [4, 122].
2. Алгоритмы
заполнения различных
фигур определенным
стилем
В этом параграфе рассмотрим примеры заполнения некоторых геометрических фигур, таких как квадрат, круг и треугольник, разными стилями. Например, точками, прямыми и наклонными линиями, и небольшими растровыми изображениями – окружностями, а так же сделаем их поверхность матовой.
Uses Graph;{подключение модуля Graph}
Var
Driver,Mode:Integer;{
X,Y,c:Integer;
Begin
{Инициализация графического режима}
Driver:=Detect;
InitGraph(Driver,Mode,'C:
SetColor(4);{красный цвет рисунка}
SetBkColor(0);{черный цвет фона}
rectangle(400,200,600,
for x:=400 to 600 do begin{перебираем координаты точки по х }
for y:=200 to 400 do begin{перебираем координаты точки по у }
If ((x>400) and (x<600) and (y>200) and (y<400)) then begin{ограничиваем область заполнения квадратом}
if ((x mod 5) <2)and ((y mod 5)<2) {задаем условие расстановки точек}
then c:=4 else c:=0;
PutPixel(x,y,c);{
end;
end;
end;
ReadLn;{задержка изображения на экране до нажатия enter}
CloseGraph;{выход из графического режима в символьный}
End.
Измененный фрагмент программы :
if ((y) mod 10)<2 {задаем условие расстановки точек}
с) Заполнение наклонными линиями:
Измененный фрагмент программы :
if ((x+y) mod 5)<2 {задаем условие расстановки точек}
d)Заполнение небольшими растровыми изображениями – окружностями:
Uses Graph;{подключение модуля Graph}
Var
Driver,Mode:Integer;{
Информация о работе Алгоритмы заполнения различных фигур определенным стилем