Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kompyuternaya_grafika.doc
Скачиваний:
90
Добавлен:
23.04.2019
Размер:
5.45 Mб
Скачать

21. Построчный алгоритм растровой развертки сплошных областей.

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

Координаты углов охватывающего прямоугольника определяются максимальными и минимальными значениями координат X и Y рассматриваемого контура.

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

1) определение когерентности растровых строк;

2) сортировка.

Под когерентностью понимается пространственная однородность характеристик пиксела в сканируемой строке. Изменение характеристик пиксела свидетельствует о достижении границы контура. Как правило, на практике описание ломаной линии контура хранится в неупорядоченном виде (см. рис.4.14).

Если многоугольник задан ребрами, то точки пересечений строки растровой развертки будут располагаться не упорядоченно. Для нашего случая (рис.4.14): (p1, p2), (p2, p3), (p3, p4), (p4, p5), (p5, p1) < x4, x1, x2, x3 >.

Для того, чтобы получить координаты интервала заполнения строки в растре развертки, необходимо выполнить сортировку множества точек пересечения < x1, x2, x3, x4 >.

Таким образом, алгоритм выполнения сортировки является неотъемлемой частью ядра базовой графической системы.

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

1) в том случае, если вершина контура является локальным экстремумом, то она учитывается в списке два раза (например, P5);

2) в противном случае, она учитывается один раз (например, P3).

Для повышения эффективности вычислительной процедуры сортировки по строкам и сортировки в строке выполняются раздельно.

Простейшим вариантом алгоритма данной группы является алгоритм с упорядоченным списком ребер. Он состоит из двух частей:

1) подготовительная (шаги 1 – 3);

2) собственно развертка (шаги 4 – 5).

Алгоритм растровой развертки с упорядоченным списком ребе

1. Для каждого ребра контура определить точки пересечения со строками развертки, используя алгоритм Брезенхейма.

2. Поместить координату X точки пересечения в соответствующую группу описания строки (Y – группу)

3. Для каждой строки выполнить сортировку множества координат X точек пересечения (в порядке возрастания).

4. Для каждой строки развертки сгруппировать попарно X – координаты точек пересечения.

5. Активизировать пиксели текущей строки развертки в пределах пар X – координат.

Данный алгоритм является простым и очевидным, однако требует большого объема памяти, который уходит на хранение точек пересечения всех ребер со всеми строками растра. На практике можно значительно сократить объем необходимой памяти, если учитывать регулярный характер граней, образующих контур.

Для ускорения вычисления и уменьшения объема памяти используется:

1) структурирование данных в виде связного списка ребер;

2) вычисление координат точек пересечения в пошаговом режиме.

На использовании данных приемов базируется следующий вариант алгоритма растровой развертки сплошных областей - алгоритм с активным списком ребер.

Алгоритм растровой развертки сплошных областей, использующих список активных ребер (САК).

Алгоритм также состоит из двух частей: подготовительной (1 – 3) и растровой развертки (4 – 13).

1. Для каждого ребра многоугольника определить Y – координату с максимальным значением.

2. Сформировать для каждой строки Y – группу и занести выделенные ребра в соответствующие группы.

3. Сформировать связный список, сохранив в нем следующие значения:

а) начальная величина координаты Х точек пересечения;

б) ∆y – число строк, пересеченных ребром, уменьшенное на единицу;

в) ∆х – шаг приращения по Х – координате при переходе на одну строку;

г) указатель на данные следующего активного ребра, начинающегося на данной строке развертки.

4. Для каждой строки развертки проверить соответствующую Y – группу на наличие новых ребер.

5. Добавить новые ребра в САК.

6. Выполнить сортировку координат Х точек пересечения ребер, входящих в САК в порядке возрастания.

7. В отсортированном списке выделить пары точек пересечения.

8. Активизировать на строке растра пикселы с координатами, входящими в отрезки, определенные на шаге 7.

9. Для каждого ребра из САК уменьшить ∆y на единицу.

10. Если ∆y < 0, исключите данное ребро из САК.

11. Вычислить новое значение Х – координаты точки пересечения.

12. Перейти к следующей строке.

13. Если область, охватывающего прямоугольника просмотрена (y < ymin), то завершаются вычисления, иначе возврат к п.4.

Конец 21 вопроса.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]