- •Классификация применения машинной графики.
- •Основные понятия машинной графики: Графическая система. Графическая станция. Графические преобразования.
- •Алгоритмы машинной графики, особенности и ограничения. Проблемы построения графических систем. Сегмент. Графические файлы и их структура. Видовое преобразование.
- •Развертка окружности. Преобразование отрезков. Развертка эллипса.
- •Двухмерные преобразования
- •Трехмерные преобразования
- •Параметрические в-сплайны.
- •Трехмерный алгоритм разрезания невыпуклых тел. Последовательное отсечение многоугольника. Алгоритм Сазерленда-Ходжмана.
- •Алгоритм построения пересечения двух выпуклых многоугольников. Алгоритм Вейлера-Айзертона пересечения произвольных многоугольников.
- •Алгоритмы удаления скрытых линий и поверхностей. Алгоритм плавающего горизонта. Алгоритм Робертса.
Трехмерный алгоритм разрезания невыпуклых тел. Последовательное отсечение многоугольника. Алгоритм Сазерленда-Ходжмана.
пусть у нас есть полигон с N вершинами, заданными в каком-то порядке, то есть, по часовой стрелке или против; в каком именно, алгоритму все равно. Занумеруем их от 0 до N-1. Теперь последовательно обходим все ребра полигона: ребро от вершины 0 до вершины 1, от 1 до 2, ..., от N-2 до N-1, от N-1 до 0. Вершины, являющиеся началом и концом ребра, могут лежать в области отсечения, (область отсечения - либо полуплоскость для 2D случая, либо полупространство для 3D случая) могут и не лежать; возможны следующие случаи:
начало лежит в области отсечения, конец - тоже. Тогда просто добавляем начало к вершинам полигона-результата.
начало лежит в области отсечения, конец не лежит. В этом случае считаем точку пересечения ребра и границы области отсечения, добавляем в список вершин результата начало ребра и вслед за ним точку пересечения.
начало не лежит в области отсечения, конец лежит. Тоже считаем точку пересечения, и добавляем только ее.
начало не лежит в области отсечения, конец тоже. Переходим к следующему ребру, никак не изменяя результат.
>Поиск пересечений многоугольников. Постановка задачи поиска пересечений многоугольников. (Шариков)
Серп - многоугольник, который ограничен цепочкой вершин из многоугольника 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)
