русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2013-12-23; просмотров: 2860; Нарушение авторских прав


Изображение литер

 

Алфавитно-цифровые символы (литеры) записываются в буфер кадра с помощью маски. Литерная маска – это маленький растр, содержащий относительные адреса пикселов, используемых для представления литеры. С помощью литерной маски также можно представить и специальные символы, специфичные в конкретной прикладной области, например, резисторы, конденсаторы или математические символы. Сама маска просто содержит двоичные величины, обозначающие, используется или нет конкретный пиксель в маске для представления формы буквы или символа (литеры). Для представления простых черно-белых изображений 1 обычно означает, что пиксель используется в представлении, а 0 - не используется. Для цветных изображений применяются дополнительные биты в качестве индексов в таблице цветов.

Литеру можно вставить в буфер кадра, указав адрес () начала маски в буфере. Каждый пиксель в маске смещается на величину .

Для создания литер различных шрифтов или ориентаций перед записью в буфер маску можно модифицировать (получить жирную литеру, повернуть, наклонить).

 

 

До сих пор речь шла о представлении на растровых графических устройствах отрезков прямых линий. Однако одной из важнейших характеристик такого устройства является возможность представления сплошных областей. Генерацию сплошных областей из простых описаний ребер или вершин будем называть растровой разверткой сплошных областей, заполнением многоугольников или заполнением контуров. Для этого можно использовать несколько методов, которые обычно делятся на две широкие категории:

- растровая развертка;

- затравочное заполнение.

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

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



Если контур состоит из кривых линий, то его можно аппроксимировать подходящим многоугольником или многоугольниками. Простейший метод заполнения многоугольника состоит в проверке на принадлежность внутренности многоугольника каждого пикселя в растре. Т.к. обычно большинство пикселов лежит вне многоугольника, то данный метод не слишком эффективен. Затраты можно уменьшить путем вычисления для каждого многоугольника прямоугольной оболочки – наименьшего прямоугольника, содержащего внутри себя многоугольник. Это намного сокращает число проверяемых пикселов.

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

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

Характеристики пикселей на данной строке изменяются только там, где ребро многоугольника пересекает строку. Эти пересечения делят сканирующую строку на области.

Для простого многоугольника на рис. 7 строка 2 пересекает многоугольник при х=1 и х=8.

 
 

Получаем 3 области:

x < 1 – вне многоугольника;

1 £ x £ 8 – внутри многоугольника;

x > 8 – вне многоугольника.

 

Строка 4 делится на 5 областей:

х < 1 – вне многоугольника;

1 £ х £ 4 – внутри многоугольника;

4 < х < 6 – вне многоугольника;

6 £ х £ 8 – внутри многоугольника;

х > 8 – вне многоугольника.

 
 

При определении интенсивности, цвета и оттенка пикселов на сканирующей строке рассматриваются пары отсортированных точек пересечения. Для каждого интервала, задаваемого парой пересечений, используется интенсивность или цвет заполняемого многоугольника. Для каждого интервала между парами пересечений и крайних (от начала строки до первой точки пересечения и от последней точки пресечения до конца строки) используется фоновая интенсивность или цвет. На рис. 8 для строки 4 в фоновый цвет установлены пиксели: от 0 до 1, от 4 до 6, от 8 до 10, тогда как пиксели от 1 до 4 и от 5 до 8 окрашены в цвет многоугольника.

Точное определение тех пикселов, которые должны активизироваться, требует некоторой осторожности. Прямоугольник имеет координаты (1,1), (5,1), (5,4), (1,4). Сканирующие строки с 1 по 4 имеют пересечения с ребрами многоугольника при х=1 и 5. Вспомним, что пиксель адресуется координатами своего нижнего левого угла, значит, для каждой из этих сканирующих строк будут активированы пиксели с х-координатами 1; 2; 3; 4; 5. На рис. 8,а показан результат. Заметим, что площадь, покрываемая активированными пикселями, равна 20, в то время как настоящая площадь прямоугольника равна 12.

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

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

 

 



<== предыдущая лекция | следующая лекция ==>
Изображение отрезков | Алгоритм заполнения по ребрам


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.003 сек.