11496

Алгоритмы растровой графики

Практическая работа

Информатика, кибернетика и программирование

Алгоритмы растровой графики Растром называется прямоугольная сетка точек формирующих изображение на экране компьютера. Каждая точка растра характеризуется двумя параметрами: своим положением на экране и своим цветом если монитор цветной или степенью яркости если м...

Русский

2013-04-08

153 KB

6 чел.

Алгоритмы растровой графики

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

Рис. 28. Растеризация отрезка прямой линии.

Термин “пиксел” образован от английского pixel (picture element - элемент изображения)  - то есть точка на экране. Будем считать, что пикселы имеют целочисленные координаты. На первый взгляд кажется, что эта задача имеет простое решение. Пусть конечные точки отрезка имеют целочисленные координаты, и уравнение прямой, содержащей отрезок: . Не нарушая общности, будем также считать, что тангенс угла наклона прямой лежит в пределах от 0 до 1. Тогда для изображения отрезка на растре достаточно для всех целых , принадлежащих отрезку, выводить на экран точки с координатами . Однако в этом методе присутствует операция умножения . Хотелось бы иметь алгоритм без частого использования операции умножения вещественных чисел. Избавиться от операции умножения можно следующим образом. Поскольку , то один шаг по целочисленной сетке на оси  будет соответствовать . Отсюда получаем, что  будет увеличиваться на величину . Итерационная последовательность выглядит следующим образом:

,  

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

Для вывода формул алгоритма Брезенхема рассмотрим рис. 29.

Рис. 29. Рисование отрезков прямых по методу Брезенхема.

Пусть начало отрезка имеет координаты , а конец . Обозначим , . Не нарушая общности, будем считать, что начало отрезка совпадает с началом координат, и прямая имеет вид , где . Считаем что начальная точка находится слева. Пусть на -м шаге текущей точкой отрезка является . Выбор  следующей точки  или зависит от знака разности . Если , то  и тогда , , если же , то  и тогда , .

, ,

 

.

Поскольку знак  совпадает со знаком разности , то будем проверять знак выражения . Так как  и , то .

Пусть на предыдущем шаге , тогда  и . Если же на предыдущем шаге , то и .

Осталось узнать как вычислить . Так как при :

, .

Далее приводится листинг процедуры на языке Паскаль, реализующей алгоритм Брезенхема.

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<xend do

 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}


 

А также другие работы, которые могут Вас заинтересовать

2219. Фінансовий аналіз 42.73 KB
  Аналіз ділової активності підприємства. Аналіз ліквідності балансу. Аналіз показників ліквідності. Аналіз динаміки і структури фінансових результатів. Аналіз фінансової стійкості підприємства.
2220. Расчет параметров кабельной линии и трансформатора 520.4 KB
  По исходным данным рассчитать параметры и подобрать марку скважной кабельной линии, повышающего трансформатора и погружного двигателя.
2221. Эксплуатация баллонов. Оборудование для газопламенной обработки материалов 89.36 MB
  Баллоны для сжатых, сжиженных и растворенных газов. Устройство баллонных запорных вентилей. Общие сведения о газопламенной обработке материалов. Рукава резинотканевые для газопламенной обработки материалов.
2222. Практические расчеты мореходных характеристик судна 61.43 MB
  Посадка судна и определение его осадки по маркам во время эксплуатации. Водоизмещение порожнем и в полном грузу. Изменение средней осадки судна при изменении солености воды. Метацентрическая диаграмма и приближенные формулы для вычисления метацентрического радиуса.
2223. Робота з програмою MPLAB 59.43 KB
  Інтерфейс MPLAB. Створення проекту в MPLAB. Демонстрація роботи в MPLAB з використанням довідки програмного продукту.
2224. ПОЗАКЛАСНА РОБОТА ІЗ ЗАРУБІЖНОЇ ЛІТЕРАТУРИ 88.89 KB
  Організація роботи щодо літературної освіти учнів у школі не обмежується лише рамками уроків за відповідними державними програмами.
2225. Екологія. Предмет і методи екології 111.9 KB
  Предмет і завдання екології. Місце екології у системі інших наук. Еволюція взаємовідносин людини й природного середовища. Принципи екології. Глобальні проблеми екології. Природні ресурси та ресурсний цикл.
2226. Основные понятия информатики 168.25 KB
  Информатика – совокупность дисциплин, изучающих свойства информации, а также способы представления, накопления, обработки и передачи информации с помощью технических средств.
2227. Краткий поурочный грамматический справочник 180.41 KB
  Глаголы и их формы. Личные и притяжательные местоимения. Будущее неопределенное время.