Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Алгоритм Брезенхема растровой дискретизации отрезкаСодержание книги
Поиск на нашем сайте При построении растрового образа отрезка необходимо, прежде всего, установить критерии «хорошей» аппроксимации. Первое требование состоит в том, что отрезок должен начинаться и кончаться в заданных точках и при этом выглядеть сплошным и прямым (при достаточно высоком разрешении дисплея этого можно добиться). Кроме того, яркость вдоль отрезка должна быть одинаковой и не зависеть от наклона отрезка и его длины. Это требование выполнить сложнее, поскольку горизонтальные и вертикальные отрезки всегда будут ярче наклонных, а постоянная яркость вдоль отрезка опять же достигается на вертикальных, горизонтальных и наклоненных под углом в 45° линиях. И, наконец, алгоритм должен работать быстро. Для этого необходимо по возможности исключить операции с вещественными числами. С целью ускорения работы алгоритма можно также реализовать его на аппаратном уровне.
Рис. 6.1. Растровый образ отрезка В большинстве алгоритмов используется пошаговый метод изображения, т. е. для нахождения координат очередной точки растрового образа наращивается значение одной из координат на единицу растра и вычисляется приращение другой координаты. Задача состоит в построении отрезка, соединяющего на экране точки с координатами
Теперь, считая, что
Следует заметить, что целочисленная координата j изменится только в том случае, если y превысит величину j+0.5 ( Алгоритм Брезенхема построения растрового образа отрезка был изначально разработан для графопостроителей, но он полностью подходит и для растровых дисплеев. В процессе работы в зависимости от углового коэффициента отрезка наращивается на единицу либо i, либо j, а изменение другой координаты зависит от расстояния между действительным положением точки и ближайшей точкой растра (смещения). Алгоритм построен так, что анализируется лишь знак этого смещения.
Рис. 6.2. Связь углового коэффициента с выбором пикселя На рис. 6.2 это иллюстрируется для отрезка с угловым коэффициентом, лежащим в диапазоне от нуля до единицы. Из рисунка можно заметить, что если угловой коэффициент На рис. 6.3 показано, каким образом строятся точки растра для отрезка с тангенсом угла наклона Нетрудно понять, как от этого алгоритма перейти к целочисленному: достаточно вместо величины смещения
Рис. 6.3. Пиксели, принадлежащие развертке отрезка
Рис. 6.4. График изменения отклонения Приведем общий алгоритм Брезенхема, учитывающий всевозможные случаи направления отрезка, рассматриваемого как вектор на координатной плоскости (на рис. 6.5 выделены четыре области и указаны особенности алгоритма в каждой из них). В описании алгоритма используются следующие функции: swap (a, b): обмен значений переменных a, b; abs (a): абсолютное значение a; sign (a): 0, если a= 0, 1, если a>0, –1, если a<0; point (i, j) — инициализация точки (i, j). Предполагается, что концы отрезка
i=i1; j=j1; di=i2-i1; dj=j2-j1; s1=sign(i2-i1); s2=sign(j2-j1); if (dj>di) {swap(di,dj); c=1;} else c=0; e=2*dj-di; // Инициализация смещения // Основной цикл for (l=0; l<di; l++) { point(i,j); while (e>=0) { if (c==1) i=i+s1; else j=j+s2; e=e-2*di; } if (c==1) j=j+s2; else i=i+s1; e=e+2*dj; }
Рис. 6.5. Четыре возможных направления отрезка
|
||
|
Последнее изменение этой страницы: 2024-06-27; просмотров: 44; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.156 (0.009 с.) |