Компьютерная геометрия и графика. Лекция 9. План занятия: Алгоритм построчного сканирования. Основная идея метода. Алгоритм построчного сканирования с.

Презентация:



Advertisements
Похожие презентации
Компьютерная геометрия и графика. Лекция 8. План занятия: Задача удаления невидимых линий c с использованием Z-буфера Алгоритм Художника.
Advertisements

Компьютерная геометрия и графика. Лекция 7. План занятия: Задача удаления невидимых линий. Алгоритм плавающего горизонта.
Компьютерная геометрия и графика. Лекция 10. План занятия: Алгоритм Робертса.
Алгоритмы растеризации Алгоритмы двумерного отсечения, заполнения многоугольника, устранение ступенчатости, масштабирование.
Компьютерная геометрия и графика. Лекция 3. План занятия: Задача о пересечении двух выпуклых многоугольников. Задача о пересечении двух произвольных многоугольников.
Сечения куба. Построение сечений в многогранниках. DlDl A B C D AlAl BlBl ClCl ТЕМА:
Компьютерная геометрия и графика. Лекция 2. План занятия: Проверка многоугольника на выпуклость. Нахождение площади произвольного многоугольника. Принадлежность.
Ребята, с построением графиков функций мы с вами уже встречались и не раз. Мы с вами строили множества линейных функций и парабол. В общем виде любую.
Построение сечения многогранников Выполнила: Рябкова Ю.И.
Поиск информации Задача поиска: где в заданной совокупности данных находится элемент, обладающий заданным свойством? Большинство задач поиска сводится.
Сечение многогранников Геометрия является самым могущественным средством для изощрения наших умственных способностей и дает нам возможность правильно мыслить.
Компьютерная геометрия и графика. Лекция 6. План занятия: Виды проектирования. Обобщенные координаты пространства. Матричные преобразования.
Сечение многогранников Геометрия является самым могущественным средством для изощрения наших умственных способностей и дает нам возможность правильно мыслить.
Дирихле родился в городе Дюрен в семье почтмейстера. В 12 лет Дирихле начал учиться в гимназии в Бонне, спустя два года в иезуитской гимназии в Кёльне,
ГЛАВА 3 ЭЛЕМЕНТЫ АНАЛИТИЧЕСКОЙ ГЕОМЕТРИИ. §1. Прямая на плоскости. Различные виды уравнений прямой на плоскости. Пусть имеется прямоугольная система координат.
Ребята, мы с вами познакомились с множеством иррациональных чисел. Так вот если множество рациональных чисел объединить с множеством иррациональных, то.
ПРИЗМА. Евклид определяет призму как телесную фигуру, заключенную между двумя равными и параллельными плоскостями (основаниями) и с боковыми гранями -
Геометрическое домино Итоговый урок по аксиомам, параллельности прямых и плоскостей.
Тема: «Применение производной к исследованию функции»
Многогранник это поверхность, составленная из многоугольников и ограничивающая некоторое геометрическое тело.
Транксрипт:

Компьютерная геометрия и графика. Лекция 9

План занятия: Алгоритм построчного сканирования. Основная идея метода. Алгоритм построчного сканирования с использованием Z-буфера Интервальный алгоритм построчного сканирования.

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

экран Секущая плоскость

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

Существует много методов для решения задачи удаления невидимых частей отрезков. Мы рассмотрим только некоторые из них: 1. Построчное сканирование с использованием Z-буфера. 2. Интервальный метод построчного сканирования.

Алгоритм построчного сканирования с использованием Z-буфера.

Создаем одномерный Z-буфер - массив с количеством элементов равным длине строки. В отличии от двумерного Z-буфера, который помещал в себя целые прямоугольные области экрана, одномерный Z-буфер в этой задаче совмещает в себе крайнюю простоту с весьма небольшими затратами памяти даже при высоком расширении картинной плоскости. Никаких проблем с переполнением памяти больше нет!

Отрезки в строке рассматриваем в любом порядке. Просматриваем каждую точку каждого отрезка, для этого можно использовать модифицированный алгоритм Брезенхема: то есть мы не рисуем точки благодаря нему, а только ищем, и к каждой найденной мы задаем вопрос об удаленности от нас. If (ZZ<ZB[XX]) {putpixel (XX,YY,1);ZB[XX]=ZZ}

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

Например, после сортировки по вертикали мы получили некоторый результат. Упорядочили все объекты. Теперь при работе с Z-буфером будет гораздо меньше проверок. Например, если мы сканируем строку А, то мы будем проверять плоскость на пересечение только с объектом 1. В строке N вообще никаких проверок делать не нужно N A

Результат сечения этих объектов плоскостью, проходящей через строку А выглядит так: N A

Интервальный алгоритм построчного сканирования.

Чем хорош именно этот алгоритм построчного сканирования и чем плохи другие? В других алгоритмах обязательно: - либо пробегать по всем Х и смотреть точки соответствующие им на отрезках. - либо пробегать по всем точкам отрезка, что еще сложнее, так как отрезков очень много. ?

В этом алгоритме мы не используем ни тот, ни другой метод. Рассмотрим два случая: 1. Многогранники не пересекаются 2. Многогранники на картинной плоскости пересекаются.

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

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

Чтобы алгоритм работал быстрее, есть смысл упорядочить отрезки по удаленности от левого края экрана. То есть на каждом интервале мы будем знать, какие отрезки уже начались, а какие еще не закончились

Находить пересечение отрезков легко и это довольно быстрая процедура. Проблема возникает только тогда, когда этих пересечений очень много. Быстрота работы алгоритма очень резко снижается. Что нужно сделать, чтобы быстро решить проблему с поиском пересечений? ?

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

Алгоритм: Находим концы отрезка Xi, получаем интервалы (n штук) Находим j: j =R(Xo) Procedure L возвращает для Хi какой отрезок (исключая левые границы) самый ближайший. Procedure R возвращает для Хi какой отрезок (исключая правые границы) самый ближайший.

Цикл, который перебирает отрезки от 1 до n if (j=K) then {line( X i-1, X i ); X i =X i+1 ;} if (j<>K) then {repeat X=Т. Пер.; K=L(X); until j=k} line (X i-1,X); X i =X; K=L(Xi);

КОНЕЦ.