Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Растровая развертка многоугольника
Алгоритм растровой развертки многоугольников основан на построчном сканировании многоугольника с верхней его вершины до нижней. При этом производится заполнение многоугольника по сканируемым строкам. Рассмотрим характер пересечения сканирующей строки с многоугольником (рис. 1.11). Сканирующая строка разбивается многоугольником на пять интервалов в точках ее пересечения со сторонами многоугольника. Необходимо выделить на сканирующей строке точки, принадлежащие внутренней области многоугольника. Из рисунка видно, что внутри многоугольника лежат точки интервалов (x1 - x2) и (x3 - x4). Если вычислить x-координаты точек пересечения сканирующей строки с ребрами многоугольника и упорядочить их по возрастанию, то нечетные интервалы будут лежать во внутренней области многоугольника. Тогда процедура сканирования и поиска точек закрашивания может иметь следующий вид: 1. Находятся x-координаты всех точек пересечения сканирующей строки с ребрами многоугольника. 2. X-координаты упорядочиваются по возрастанию. 3. Закрашиваются точки в нечетных интервалах. Однако алгоритм требует уточнения для двух частных случаев. Первый случай. Пересечение сканирующей строки с горизонтальным ребром (рис. 1.12). В этом случае имеется бесконечное множество точек пересечения ребра со сканирующей строкой. В связи с этим понятие четных и нечетных интервалов теряет смысл. Для решения задачи следует удалить горизонтальное ребро, а пересечения сканирующей строки искать с ребрами смежными ему. В соответствии с идеей алгоритма точки пересечения со смежными ребрами дадут интервал заполнения, совпадающий с удаленным ребром. Второй случай. Пересечение сканирующей строки с вершиной многоугольника. При этом возможны два варианта - пересечение вершины, являющейся локальным экстремумом, и вершины, не являющейся таковой. В первом варианте (рис. 1.13) сканирующая строка пересекает два ребра, пересечения с которыми дают две совпадающие точки - саму вершину многоугольника. Требуется заполнить интервал длиной в одну точку. Этот случай является просто экстремальным. Здесь интервал заполнения вырожден в одну точку. Во втором варианте (рис. 1.14) сканирующая строка дает три точки пересечения с ребрами многоугольника. Причем две из них также совпадают и являются вершиной многоугольника. После упорядочивания x-координат по возрастанию они образуют нечетный интервал, который подлежит заполнению. А интервал между вершиной и точкой пересечения с ребром оказывается четным, не подлежащим заполнению. Для устранения этой проблемы необходимо укоротить одно из смежных ребер, сходящихся в указанной вершине, на одну точку.
Нахождение x-координат точек пересечения сканирующей строки с ребрами многоугольника можно выполнить по уравнению прямой. Процедуру нахождения этих точек можно организовать итерационным методом, для чего необходимо задать конечные точки ребер. Тогда вычисления будут выполняться в соответствии со следующими выражениями: где xк,yн,xк,yн - координаты концевых точек ребра. Для реализации алгоритма вводится понятие активных ребер. Это такие ребра многоугольника, которые пересекаются сканирующей строкой Активные ребра содержатся в таблице активных ребер (ТАР) Окончательно алгоритм растровой развертки многоугольников будет следующим. 1. Перебор всех вершин многоугольника с укорочением одного из смежных ребер для вершин, не являющихся локальными экстремумами. 2. Поиск и удаление горизонтальных ребер. 3. Построение упорядоченной ТР. 4. Принимают первоначальное значение номера сканирующей строки i равной ymin первой записи ТР. 5. Создается пустая ТАР. 6. Выполняется обработка сканирующей строки. 7. Пока ТАР или ТР не пусты, выполняется переход к п. 6. 8. Окончание процедуры.
Растровая развертка круга Растровую развертку круга можно построить с помощью алгоритма Брезенхема для первого октанта. При этом использование симметричности точек окружности позволяет организовать заполнение четырех интервалов со следующими координатами: - первый интервал - (-y,x) - (y,x); - второй интервал - (-x,y) - (x,y); - третий интервал - (-x,-y) - (x,-y); - четвертый интервал - (-y,-x) - (y,-x). Следует выделить граничные ситуации, когда (x,y) = (R,0) и (x,y) =(, ). В первом случае вместо четырех интервалов получают один интервал, совпадающий с горизонтальным диаметром - (0,R) -(0,-R), и две точки - (R,0) и
(-R,0). Во втором случае получается только два интервала: первый - (- , ) - (, ); второй - (- ,- ) - (,- ). Кроме того, при реализации алгоритма необходимо учитывать выбор узла растра при движении “а" и движении “b", так как в первом случае меняется только координата y, а координата x остается неизменной. Во втором случае меняются обе координаты. Это приводит к тому, что интервалы, расположенные во 2, 3, 6 и 7 октантах - ((-y,x) - (y,x)) и ((-y,-x) - (-y,x)), при движении “а" совпадают с предыдущими интервалами по координате x, а по координате y больше на два пикселя - по одной точке с каждого конца интервала. Это приводит к тому, что приходится повторно заполнять интервал, а при выводе линии в инверсных режимах (стили XOR или NOT) ранее заполненный интервал будет стерт
|
||||||
Последнее изменение этой страницы: 2017-02-10; просмотров: 657; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.187.233 (0.005 с.) |