УДК 004.353.244
Свищёв А.В.
Ассистент кафедры практической и прикладной информатики,
Шамкова А.А. Студентка бакалавриата, 2 курс, МИРЭА-Российский технологический университет (РТУМИРЭА) 119454, Россия, г. Москва, проспект Вернадского, 78, Институт информационных технологий Россия, г. Москва DOI: 10.24411/2520-6990-2020-11707 ГРАФИЧЕСКИЕ АЛГОРИТМЫ АППРОКСИМАЦИИ ОТРЕЗКА НА ДИСКРЕТНОМ
ГРАФИЧЕСКОМ УСТРОЙСТВЕ
Svishchev A. V.
Assistant of the Department of Practical and Applied Informatics,
Shamkova A.A. Bachelor student, 2 course,
MIREA-Russian Technological University (MIREA Russian Technical University),
78 Vernadsky Avenue, Moscow, 119454, Russia, Institute of information technology Russia, Moscow
GRAPHICAL ALGORITHMS FOR APPROXIMATING A LINE SEGMENT ON DISCRETE
GRAPHICAL MEDIA
Аннотация
В данной статье рассматриваются алгоритмы представления отрезков в растровом формате, а также вопрос построения идеальных отрезков. Abstract
This article discusses algorithms for representing segments in raster format, as well as the question of building of perfect segments.
Ключевые слова: растровое изображение, разложение в растр. Key words: bitmap, decomposition to raster.
Экран растрового дисплея можно рассматривать как матрицу дискретных элементов, или пикселей. Процесс определения пикселей, которые
лучше всего аппроксимируют данный отрезок, называется разложением в растр.
На рисунке 1 приведен результат разложения прямого отрезка в растровый формат.
Рисунок 1. Разложение отрезка в растр
Существуют некоторые требования для построения отрезка в растровом формате:
1. Отрезки должны выглядеть прямыми;
2. Яркость отрезка должна быть постоянной;
3. Алгоритм должен работать быстро.
Первое требование в силу дискретной природы
растрового дисплея не может быть всегда выполнено. Можно лишь добиться того, что визуально отрезок будет восприниматься прямым. Решение этой задачи может достигаться путем увеличения разрешающей способности экрана дисплея и применения методов устранения ступенчатости.
Второму требованию удовлетворяют только горизонтальные, вертикальные и располагающиеся
под углом в 45° отрезки. Однако вертикальные и горизонтальные отрезки по сравнению с отрезками, расположенными под углом 45°, будут выглядеть ярче, так как расстояние между соседними пикселями у них меньше, чем у наклонных отрезков. Обеспечение постоянной яркости вдоль отрезка требует высвечивания очередного пикселя яркостью, зависящей от расстояния между пикселями, вычисление которого производится с использованием операций извлечения квадратного корня и умножения. Использование этих операций существенно замедляет работу алгоритма, поэтому второе требование остается, как правило, невыполненным.
<<Ш11ШетиМ~^®и©Ма1>#Щ62)),2©2© / TECHNICAL science
65
Удовлетворение третьего требования достигается путем сведения к минимуму вычислительных операций, использования операций над целочисленными данными, а также реализацией алгоритмов на аппаратном или микропрограммном уровне [1].
Алгоритм Брезенхема. Алгоритм Брезенхэма был предложен Джеком Элтоном Брезенхэмом в
1962 году и предназначен для рисования фигур точками на плоскости. Этот алгоритм широко используется в компьютерной графике для изображения линий на экране. Алгоритм определяет, какие точки двумерного растра должны быть закрашены для корректного отображения отрезков на дисплее. Графическая интерпретация алгоритма Брезенхема представлена на рисунке 2.
о о О О о о о о о о о о
о о о о о о о о OQ •
о о о о о о о •"фр о о о
о о о о • • о о о о о
о о о о о о о о о о
• о о о о о о о о о о
Рисунок 2. Разложение прямого отрезка в растр с помощью алгоритма Брезенхема
приращения функции Af=AAx+BAy. Соответственно, в случае перемещения от точки вправо -Af = A, от точки вправо и вниз - Af = A+B, от точки вниз - Af = B. В координаты начала отрезка необходимо поставить первую точку и принять f = 0. Далее существуют два шага от текущей точки - по вертикали или по горизонтали, либо по диагонали на один пиксель.
По вертикали и по горизонтали направление движения можно определить с помощью коэффициента угла наклона. Если угол наклона меньше 45° и |A| < |B|, с каждым шагом происходит движение по диагонали или по горизонтали. Если же угол наклона больше 45°, то с каждым шагом происходит движение по диагонали или по вертикали [2].
Алгоритм Ву. Данный алгоритм был предложен Ву Сяолинем в статье, опубликованной журналом Computer Graphics в июле 1991 года. Алгоритм сочетает устранение ступенчатости (сглаживание) и скорость, близкую к скорости алгоритма Брезенхема без сглаживания.
Рисунок 3. Разложение прямого отрезка в растр с помощью алгоритма Ву
Для изображения прямых отрезков на плоскости с использованием алгоритма Брезенхема необходимо уравнение прямой в общем виде: y=kx+b или f(x,y)=Ax+By+C=0. Если прямая проходит через две точки с координатами (х1 ;у1) и (Х2;у2), то коэффициенты уравнения прямой определяются по формулам: А=у2-уь B=xl-x2; С=угх2-у2^хь
Для любой растровой точки с координатами (х^ уО значение функции:
1. ДХ, уО = 0, если точка лежит на прямой;
2. Д(хъ уО > 0, если точка лежит ниже прямой;
3. ДхьуО, где 1 - номер отображаемой точки.
Таким образом, одним из методов решения
того, какая из точек Р или О (рисунок 2) будет отображена на следующем шаге, является сравнение середины отрезка |Р-О1 со значением функции 1"(х,у). Если значение 1"(х,у) лежит ниже средней точки отрезка |Р-О|, то следующей отображаемой точкой будет точка Р, иначе — точка О.
Следующим шагом является отображение следующей точки. Данные приращения могут принимать значения 0 и 1. Используем формулу
Алгоритм использует методы сглаживания при растеризации отрезка. При этом ступенчатые выступы становятся менее заметны. На первом шаге для точки, лежащей на отрезке, вычисляются две ближайшие точки растра. Далее между этими двумя точками распределяется прозрачность
(альфа-канал) цвета пикселя пропорционально близости пикселя к отрезку таким образом, чтобы суммарная яркость была равна единице. При таком распределении человеческий глаз воспринимает последовательность нескольких пикселей с взаимодополняющими значениями прозрачности как непрерывную линию.
Рисунок 4. Распределение интенсивности пикселя в зависимости от расстояния до идеальной линии
Такой метод реализует быстрое и качественное построение сглаженных отрезков [3].
Все вышеупомянутые методы растеризации отрезков широко используются в компьютерной графике. Алгоритмы реализуют достаточно быстрое преобразование отрезков, максимально схожих с исходными. На сегодняшний день построение идеально гладких отрезков невозможно, но данную проблему решает увеличение применения методов устранения ступенчатости, что предлагает алгоритм Ву, и разрешающей способности экрана дисплея.
Использованные источники:
1. Статья «Требования, предъявляемые к алгоритмам вычерчивания отрезков. Пошаговый алгоритм разложения отрезка в растр. Разложение в
растр по методу цифрового дифференциального анализатора» [Электронный ресурс] URL: https://github.com/Panda-Lewandowski/Computer-graphics/wiki/4.-Требования,-предъявляемые-к-ал-горитмам-вычерчивания'-отрезков.--Пошаговый--алгоритм-разложения--отрезка-в-растр.--Разложе-ние-в--растр-по-методу-цифрового-дифференци-ального-анализатора. (Дата обращения: 05.04.2020)
2. Алгоритм Брезенхема для рисования наклонных отрезков [Электронный ресурс] URL: https://prog-cpp.ru/brezenham/ (Дата обращения: 05.04.2020)
3. Алгоритм Ву Сяолиня растеризации линии с антиалиасингом [Электронный ресурс] URL: http://grafika.me/node/38 (Дата обращения: 08.04.2020)