Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по компьютерной графике [по вопросам].doc
Скачиваний:
84
Добавлен:
02.05.2014
Размер:
783.36 Кб
Скачать

Проверка выпуклости и определение нормалей Вопрос 27 Алгоритм с использованием векторных произведений

Проверка на выпуклость может производиться анализом знаков векторных произведений смежных ребер |[A\vec] ×[B\vec]| = A·B · sin (AB )

  1. в одной вершине = 0, то вершина вырождена, т.е. смежные ребра лежат на одной прямой (рис. 15б, вершина Q).

  2. все знаки равны 0, то многоугольник отсечения вырождается в отрезок.

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

  4. Если все знаки неотрицательные, то многоугольник выпуклый, причем обход вершин выполняется против часовой стрелки

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

Разбиение невыпуклых многоугольников. Алгоритм метода при обходе вершин многоугольника против часовой стрелки состоит в следующем:

  1. Для каждой i-й вершины многоугольник сдвигается для переноса упомянутой вершины в начало координат.

  2. Многоугольник поворачивается против часовой стрелки для совмещения (i+1)-й вершины с положительной полуосью X. Вектор внутреннего перпендикуляра к ребру, образованному вершинами i-й и (i+1)-й, вычисляется поворотом ребра на -90°

  3. Анализируется знак Y-координаты (i+2)-й вершины. Если Yi+2 і >=0, то в (i+1)-й вершине выпуклость, иначе невыпуклость. Если имеется невыпуклость, то многоугольник разрезается на два вдоль положительной полуоси X. Так как вновь полученные многоугольники могут в свою очередь оказаться невыпуклыми, алгоритм применяется к ним, пока все многоугольники не станут выпуклыми.

Отсечение многоугольника

Будем называть многоугольник, используемый в качестве окна отсечения отсекателем, а многоугольник, который отсекается, - от­секаемым.

Алгоритм отсечения многоугольника должен в результате отсе­чения давать один или несколько замкнутых многоугольников. При этом могут быть добавлены новые ребра, а имеющиеся или сохране­ны, или разделены, или даже отброшены. Существенно, чтобы грани­цы окна, которые не ограничивают видимую часть отсекаемого мно­гоугольника, не входили в состав результата отсечения, иначе воз­можна излишняя закраска границ окна эту задачу можно решить с использованием алгоритмов отсечения линий, если представить много­угольник просто как набор векторов, а не как сплошные закрашивае­мые области. При этом векторы, составляющие многоугольник, про­сто последовательно отсекаются сторонами окнаЕсли же в результате отсечения должен быть получен замкну­тый многоугольник, то формируется вектор, соединяющий послед­нюю видимую точку с точкой пересечения с окном.

Вопрос 28

Задачи вычислительной геометрии: задача рационального поиска, задача локализации. Принадлежность точки многоугольнику. Уникальный запрос. Массовый запрос.

Вычислительная геометрия - наука, занимающаяся разработ­кой и анализом эффективности различных геометрических задач, предназначенных для реализации на ЭВМ.

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

Две главные модели для задач гео­метрического поиска:

    1. Задачи локализации, когда файл представляет собой разбие­ние геометрического пространства на области, а запрос является точ­кой. Локализация состоит в определении области, содержащей за­прошенную точку.

    2. Задачи регионального поиска, когда файл содержит набор то­чек пространства, а запрос есть некая стандартная геометрическая фигура, произвольно перемещаемая в этом пространстве (типичный запрос в 3-мерном пространстве — это шар или брус). Региональный поиск состоит в извлечении (задачи отчета) или в подсчете числа (задачи подсчета) всех точек внутри запросного региона (области)

Определение принадлежности точки непересекающемуся многоугольнику

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

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