Растровая развертка отрезка
Так как в подавляющем большинстве графические устройства являются растровыми, то есть представляют изображение в виде прямоугольной матрицы (сетки, целочисленной решетки) пикселей (растра), то, естественно, возникает необходимость в растровых алгоритмах. Хотя большинство графических библиотек содержат внутри себя достаточное количество простейших растровых алгоритмов, таких, как: переведение идеального объекта (отрезка, окружности и др.) в их растровые образы; обработка растровых изображений, тем не менее, часто возникает необходимость явного построения растровых алгоритмов. 3.1 Растровая развертка отрезка Достаточно важным понятием для растровой сетки является связность - возможность соединения двух пикселей растровой линией, то есть последовательным набором пикселей. При этом возникает вопрос, когда пиксели(Х1,у1) и (X2,y2) можно считать соседними. Вводится два понятия связности: - 4-связность, когда пиксели считаются соседними, если либо их х-координаты, либо у-координаты отличаются на единицу, то есть |х1-х2| + |y1-y2|≤1; Рис.68 - 8-связность, когда пиксели считаются соседними, если их х- и у-координаты отличаются не более чем на единицу, то есть |x1 – x2| ≤ 1, |у1 – У2| ≤ 1
Рис.69 Так как понятие линии базируется на понятии связности, то естественным образом возникает понятие 4- и 8-связных линий. Поэтому, когда мы говорим о растровом представлении, например, отрезка, то следует ясно понимать, о каком именно представлении идет речь. При этом нужно иметь в виду, что растровое представление объекта не является единственным и возможны различные способы построения. В качестве линии на растровой сетке выступает набор пикселей P1, P2, …, Pn, где любые два пикселя Pi,Pi+1 являются соседними. Рис.70 Рассмотрим задачу построения растрового изображения отрезка, соединяющего точки (x1,y1) и (x2,y2). Для простоты будем считать, что 0 ≤ y2-y1 ≤ x2-x1 Тогда отрезок описывается следующим уравнением
Рис.71
Простейший алгоритм растрового представления отрезка имеет вид:
//File Linel.cpp void Line(int xl, int yl, int x2, int y2, int color) { double k=(y2-yl)/(x2-xl); double b=yl-k*xl; for (int x=xl; x<=x2; x++) putpixel (x, round (k*x+b), color); }
Алгоритм Брезенхейма В 1965 году Брезенхеймом был предложен простой целочисленный алгоритм для растрового построения отрезка, первоначально предназначенный для использования в графопостроителях При построении растрового изображения отрезка всегда выбирается ближайший по вертикали пиксель. При этомиз двух точек А и В выбирается та, которая ближе к исходной прямой (в данном случае выбирается точка А, так как а<Ь). Для этого вводится число d, равное (x2 – x1)(b — а). В случае d>0 значение у от предыдущей точки увеличивается на 1, a d -на 2(∆у — ∆х) В противном случае значение у не изменяется, а значение d заменяется на 2∆у.
//File Line2.cpp void Line{int xl, int yl, int x2, int y2, int color) { int dx=x2-xl; int dy=y2-yl; int d=(dy<<l)-dx; int dl=dy << l; int d2=(dy-dx) << l; putpixel (xl, yl, color); for (int x=x1+1, y=yl; x<=x2; x++) { if (d>0) { d+=d2; y+=1; } else d+=d1; putpixel (x, y, color); } }
Популярное: Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (1867)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |