Задание на работу Разработать программу перевода векторного объекта в формат растрового изображения




Скачать 135.48 Kb.
НазваниеЗадание на работу Разработать программу перевода векторного объекта в формат растрового изображения
Дата публикации19.03.2013
Размер135.48 Kb.
ТипДокументы
skachate.ru > Астрономия > Документы


1. Цель работы: Знакомство с алгоритмами вывода векторного изображения.
2. Задание на работу

Разработать программу перевода векторного объекта в формат растрового изображения.

Варианты:



Задание



Изображение и масштабирование отрезка заданной толщины



Изображение эллипса с помощью Алгоритма Брезенхейма, использующего 4-связанность



Изображение эллипса с помощью Алгоритма Брезенхейма, использующего 8-связанность



Изображение и масштабирование окружности заданной толщины



Закраска области, ограниченной замкнутой линией .



Изображение ломаной с помощью Алгоритма Брезенхейма, использующего 4-связанность



Изображение ломаной с помощью Алгоритма Брезенхейма, использующего 8-связанность



Устранение ступенчатости отрезка с помощью метода увеличения частоты выборки



Устранение ступенчатости отрезка с помощью метода, основанного на использовании полутонов



Закраска области, ограниченной растровой ломаной линией



Закраска области, ограниченной эллипсом



Изображение и масштабирование прямоугольника заданной толщины



Изображение и масштабирование дуги окружности



Нанести штриховку заданного прямоугольника



Построить сплайн-линию по трем точкам



Изобразить куб в изометрии



Изобразить цилиндр в изометрии



Создать образ букв латинского алфавита



Создать образ букв русского алфавита



Создать образ букв греческого алфавита



Создать образ цифр



Создать образ стрелок



Создать таблицу символов



Изображение множество из N кругов различных радиусов



Изображение множество из N закрашенных квадратов



Изображение множество из N закрашенных правильных треугольников



Изображение и масштабирование правильного треугольника заданной толщины



Изображение множество из N закрашенных прямоугольных треугольников



Изображение и масштабирование прямоугольного треугольника заданной толщины



Создать таблицу знаков препинания



Создать таблицу знаков математических операций



Создать образ интеграла и выполнить его масштабирование



Создать образ суммы и выполнить его масштабирование


3. Выполнение

При решении поставленной задачи следует использовать канву и обращение к параметрам точки на канве. Ввод изображения следует выполнять через векторные параметры объекта, а далее отображать его на канве.

Если в задании требуется выполнить действие над растровым контуром, то контур можно отрисовывать с помощью встроенных графических команд.

^

4. Теоретические сведения




Основные растровые алгоритмы



Применяемые в настоящее время устройства вывода графической информации (мониторы, принтеры) по своей природе являются растровыми - изображение в них создается из отдельных точек. Поэтому даже при использовании векторной графики при выводе изображения на экран нужно определить, у каких точек изменить цвет, чтобы на экране отрисовался, к примеру, отрезок. Точнее говоря, заданному отрезку нужно поставить в соответствие множество на целочисленной плоскости, которое является достаточно точным приближением этого отрезка.

Данная процедура неоднозначна, так как "достаточно точно" можно понимать по-разному. Кроме того, алгоритмы визуализации графических примитивов должны быть простыми и работать исключительно быстро, поскольку иначе теряется преимущество векторной графики - малый объем занимаемой памяти и, соответственно, высокая скорость обработки.

Рассмотрим растровое отображение простейшей фигуры – отрезка. Процесс последовательной смены цвета множества пикселов, изображающих отрезок, называется растровой разверткой отрезка.

Простейшее решение состоит в следующем: по координатам отрезка получить уравнение прямой и, подставляя в него целочисленные значения координат, менять цвет у получающихся точек. Если концы отрезка имеют координаты (x1, y1) и (x2, y2), то отрезок задается уравнением:




(1)



При этом x меняется от x1 до x2. Напишем простейшую процедуру построения отрезка:
dY:=ABS(Y2-Y1)/(X2-X1));

y:=y1;

for x:=x1 to x2 do

begin

PutPixel(x, round(y));

y:=y+dy

end;
К сожалению, если отрезок не параллелен координатным осям, при таком построении он распадается на множество несоприкасающихся между собой пикселов и уже не выглядит как единый объект. Поэтому реально применяются два других способа визуализации отрезка, получивших название четырехсвязной и восьмисвязной разверток (Рис. ).




































































































































































































































































































































































































































































а) б)

Рис. 1 - Четырехсвязная (а) и восьмисвязная (б) развертки отрезка.
Четырехсвязная развертка отрезка включает те и только те точки, квадратные окрестности которых пересекаются с отрезком. Восьмисвязная развертка отрезка включает те и только те точки, боковые стороны квадратных окрестностей которых пересекаются с отрезком.

Приведем алгоритм для генерации четырехсвязной развертки:
x:=x1;

y:=y1;

n:=x2-x1;

m:=y2-y1;

d:=(m/n);

e:=d/2;

for i:=1 to n+m do

begin

x:=x+1;

e:=e+d; { отклонение }

if e>0.5 then

begin

y:=y+1;

e:=e-1

end

else

begin

x:=x+1;

e:=e+d

end;

PutPixel(x,y)

end;

Здесь в переменной е хранится разница между координатой Y текущей точки отрезка и координатой Y точки пересечения отрезка с правой границей квадратной окрестности текущей точки растровой развертки. При e0.5 отрезок пересекает окрестность точки, лежащей справа от текущей, и нужно сместиться вправо. При e0.5 отрезок пересекает окрестность точки, лежащей выше текущей, и надо сместиться вверх (Рис. ).


Рис. 2 – Схема работы алгоритма четырехсвязной развертки отрезка.

Как указывалось выше, очень важна эффективность алгоритма развертки. Как известно, компьютер работает с целыми числами гораздо быстрее, чем с вещественными. Поэтому было бы очень желательно придумать такой алгоритм растровой развертки, который использовал бы только целые числа. Целочисленные алгоритмы для развертки графических примитивов были разработаны инженером компании IBM Брезэнхемом и носят его имя.

Ниже приведена процедура на языке Паскаль, реализующая алгоритм Брезенхема для восьмисвязной развертки отрезка.
Procedure Bresenham(x1,y1,x2,y2,Color: integer);

var

dx,dy,incr1,incr2,d,x,y,xend: integer;

begin

dx:= ABS(x2-x1);

dy:= Abs(y2-y1);

d:=2*dy-dx; {начальное значение для d}

incr1:=2*dy; {приращение для d<0}

incr2:=2*(dy-dx); {приращение для d>=0}

if x1>x2 then {начинаем с точки с меньшим знач. x}

begin

x:=x2;

y:=y2;

xend:=x1;

end

else

begin

x:=x1;

y:=y1;

xend:=x2;

end;

PutPixel(x,y,Color); {первая точка отрезка}

While x
begin

x:=x+1;

if d<0 then

d:=d+incr1 {выбираем нижнюю точку}

else

begin

y:=y+1;

d:=d+incr2; {выбираем верхнюю точку, y-возрастает}

end;

PutPixel(x,y,Color);

end;{while}

end;{procedure}
Еще одна задача, часто решаемая в ходе визуализации – заливка цветом некоторой заданной границей области. Область обычно задается или в векторном виде массивом координат вершин многоугольника, или в растровом – набором пикселов определенного цвета, образующих замкнутый контур.

Для решения задачи заливки векторного многоугольника необходимо закрашивать тем или иным цветом выводимые на экран пиксели в зависимости от того, лежат они внутри многоугольника или снаружи. Таким образом, задача векторной заливки сводится к задаче определения принадлежности точки P(x,y) многоугольнику, заданному координатами вершин. Идея алгоритма для решения этой задачи состоит в следующем (Рис.).


Рис.3 –Определение принадлежности точки многоугольнику.
Проведем через точку ^ P горизонтальную полупрямую (луч) и определим число пересечений этой полупрямой с ребрами многоугольника. Если это число нечетно, то точка Р лежит внутри многоугольника, четно – снаружи.

Заполнение растровой области хорошо знакомо программистам, поскольку почти во всех языках программирования есть соответствующие команды (например, в языке Pascal это команда FloodFill, в Delphi – метод FloodFill объекта TCanvas и т.д.)




Рис.4 – Заполнение растровой области с затравкой.
Граница области является четырех- или восьмисвязной растровой кривой, все пикселы которой имеют один и тот же цвет. Внутри области могут находиться "острова", которые закрашивать не надо. Предполагается, что внутри области задана точка начала закраски, называемая затравкой (Рис.).

Для выполнения заливки используется специальная структура данных, называемая стеком (stack). Стек работает по принципу "первым вошел – последним вышел" (Рис.).


Рис.5 - Стек.
Хорошим аналогом стека является магазин автомата Калашникова (программистская шутка гласит, что АКМ – лучшее средство для превращения стека в очередь). При извлечении значений из стека нужно помнить о том, что теперь они будут идти в обратном порядке. Если мы занесли в стек сначала а, потом b, потом c, то первым извлечется с, затем b и, наконец, а.

Эффективный алгоритм заливки основан на построчном сканировании заполняемой области. Вот его схема:
Инициализируем стек, помещая в него координаты затравочного пиксела. Пока стек не пуст:

извлекаем пиксел (х,у) из стека;

заполняем максимально возможный интервал, в котором находится пиксел, вправо и влево вплоть до достижения граничных пикселов;

запоминаем крайнюю левую Lx и крайнюю правую Rx абсциссы заполненного интервала;

в соседних строках над и под интервалом (Lx,Rx) находим незаполненные к настоящему моменту внутренние пикселы области, которые, как мы уже заметили, объединены в интервалы, а в каждом из этих интервалов находим крайние правые пикселы. Каждый из этих пикселов вносим в стек в качестве затравочного.
Такой алгоритм правильно заполняет область любой конфигурации, в том числе и с "островами" внутри.
^ 5. Содержание отчета


  1. Математическая постановка задачи (описание метода или алгоритма);

  2. Описание входных - выходных данных;

  3. Блок-схема алгоритма;

  4. Текст программы;

  5. Результат работы программы.


Список литературы

1. Шикин Е.В., Боресков А.В. Зайцев А.А. Начала компьютерной графики. – М.: ДИАЛОГ-МИФИ, 1993. – 138 с.

2. Шикин Е.В., Боресков А.В. Компьютерная графика. Полигональные модели. – М.: ДИАЛОГ-МИФИ, 2000. – 464 с.

3. Тихомиров Ю. Программирование трехмерной графики - СПб: BHV - Санкт-Петербург, 1998. - 256с.: ил.

4. Выгодский М.Я. Справочник по высшей математике. — М.: Физматгиз, 1963. — 872 с.

5. Котов Ю.В. Как рисует машина. — М.: Наука. Гл. ред. физ.-мат. лит., 1988. — 224 с.



Похожие:

Задание на работу Разработать программу перевода векторного объекта в формат растрового изображения iconЗадание №7 Разработать приложение для вывода на экран движущегося...
Разработать приложение для вывода на экран движущегося изображения записанного в avi файле
Задание на работу Разработать программу перевода векторного объекта в формат растрового изображения iconКонтрольная работа по дисциплине «Компьютерная графика и моделирование»
Средствами растрового графического редактора Adobe Photoshop разработать дизайн сайта, включающий следующие элементы
Задание на работу Разработать программу перевода векторного объекта в формат растрового изображения iconЛабораторная работа №1
Разработать и отладить программу на языке Object Pascal, реализующую задание в соответствии с вариантом. Задание состоит в реализации...
Задание на работу Разработать программу перевода векторного объекта в формат растрового изображения iconЗадание 1 pascal
...
Задание на работу Разработать программу перевода векторного объекта в формат растрового изображения iconЗадача на курсовое проектирование: разработать программу «Справочник...
Цель курсового проекта – разработать программу «Справочник по клиентуре городского банка», поддерживающую основные операции обработки...
Задание на работу Разработать программу перевода векторного объекта в формат растрового изображения iconОтчет по лабораторной работе №5 «Работа с ацп» Дата Оценка (max 5)
Задание Разработать программу, передающую результаты измерения с трех каналов ацп в вольтах на пк по интерфейсу uart
Задание на работу Разработать программу перевода векторного объекта в формат растрового изображения iconМосковский Авиационный Институт
Задание(вар. 6): Разработать и отладить две программы, демонстрирующие работу с односвязными и двусвязными списками. Размерность...
Задание на работу Разработать программу перевода векторного объекта в формат растрового изображения iconСамостоятельная работа студентов по теме «Эмпирические методы исследования: наблюдение»
Задание: разработать программу наблюдения по предложенному ниже плану и провести наблюдение в соответствии с требованиями, предъявляемыми...
Задание на работу Разработать программу перевода векторного объекта в формат растрового изображения icon1. Курсовые работы по технологии программирования 2
Задание Написать программу играющую в го 7 Задание 10. Написать программу играющую в гексагон. 8
Задание на работу Разработать программу перевода векторного объекта в формат растрового изображения iconТреугольник на плоскости задан координатами своих вершин, найти его площадь
Составить формулу, которая соответствует графику функции f(X). На основании этой формулы разработать алгоритм и программу, которая...

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2014
контакты
skachate.ru
Главная страница