Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_na_grafiku.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
1.71 Mб
Скачать
  1. Трехмерный алгоритм разрезания невыпуклых тел. Последовательное отсечение многоугольника. Алгоритм Сазерленда-Ходжмана.

пусть у нас есть полигон с N вершинами, заданными в каком-то порядке, то есть, по часовой стрелке или против; в каком именно, алгоритму все равно. Занумеруем их от 0 до N-1. Теперь последовательно обходим все ребра полигона: ребро от вершины 0 до вершины 1, от 1 до 2, ..., от N-2 до N-1, от N-1 до 0. Вершины, являющиеся началом и концом ребра, могут лежать в области отсечения, (область отсечения - либо полуплоскость для 2D случая, либо полупространство для 3D случая) могут и не лежать; возможны следующие случаи:

  • начало лежит в области отсечения, конец - тоже. Тогда просто добавляем начало к вершинам полигона-результата.

  • начало лежит в области отсечения, конец не лежит. В этом случае считаем точку пересечения ребра и границы области отсечения, добавляем в список вершин результата начало ребра и вслед за ним точку пересечения.

  • начало не лежит в области отсечения, конец лежит. Тоже считаем точку пересечения, и добавляем только ее.

  • начало не лежит в области отсечения, конец тоже. Переходим к следующему ребру, никак не изменяя результат.

  1. >Поиск пересечений многоугольников. Постановка задачи поиска пересечений многоугольников. (Шариков)

Серп - многоугольник, который ограничен цепочкой вершин из многоугольника N и цепочкой из многоугольника M.

тёмным цветом - серпы

Алгоритм поиска многоугольника пересечения можно разделить на две фазы.

Первая фаза - установка окон обоих многоугольников над вершинами, принадлежащими одному и тому же серпу. Для этого окно n многоугольника N и окно m многоугольника M перемещаются по часовой стрелке до тех пор, пока они не будут установлены на ребрах, принадлежащих одновременно одному и тому же серпу.

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

Понятие нацеленности одного ребра на другое даёт понять, какое окно двигать на данной итерации. Говорят, что ребро a нацелено на ребро b, если бесконечная прямая, определяемая ребром b, расположена перед a. Если ребра a и b коллинеарные, то ребро a нацелено на ребро b, если конечная точка ребра a не лежит после b.

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

  • a и b нацелены друг на друга: необходимо переместить то окно, которое соответствует ребру, находящемуся снаружи другого.

  • a нацелено на b, но b не нацелено на a: конечная точка ребра a заносится в многоугольник пересечения, если b находится снаружи от ребра a, после чего окно на ребре a должно быть продвинуто.

  • b нацелено на a, но a не нацелено на b: конечная точка ребра b заносится в многоугольник пересечения, если a находится снаружи от ребра b, после чего окно на ребре b должно быть продвинуто (в направлении движения часовой стрелки).

  • a и b не нацелены друг на друга: в этой ситуации следует перенести то окно, которое относится к ребру, расположенному снаружи от другого.

Сложность алгоритма 2(|N|+|M|).

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

Сложность алгоритма для произвольных многоугольников (N*M)

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