Алгоритм отсечения Вейлера – Атертона - Weiler–Atherton clipping algorithm

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

Обычно это применимо только в 2D. Однако его можно использовать в 3D за счет определения видимой поверхности и с повышенной эффективностью благодаря Z-порядок.[1]

Предварительные условия

Подразделение по алгоритму Вейлера-Атертона

Перед применением к многоугольнику алгоритм требует выполнения нескольких предварительных условий:

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

Алгоритм

Для данного многоугольника A как области отсечения и многоугольника B как подлежащего отсечения многоугольника алгоритм состоит из следующих шагов:

  1. Перечислите вершины многоугольника A области отсечения и вершины полигона B.
  2. Обозначьте перечисленные вершины полигона B как внутри, так и за пределами области отсечения A.
  3. Найдите все пересечения многоугольников и вставьте их в оба списка, связывая списки на пересечениях.
  4. Сгенерируйте список «входящих» пересечений - пересечений, где вектор от пересечения до последующей вершины предметного многоугольника B начинается внутри области отсечения.
  5. Следуйте за каждым пересечением по часовой стрелке вокруг связанных списков, пока не будет найдено начальное положение.

Если пересечений нет, то должно выполняться одно из трех условий:

  1. A внутри B - возврат A для отсечения, B для слияния.
  2. B находится внутри A - возврат B для отсечения, A для слияния.
  3. A и B не перекрываются - верните None для отсечения или A и B для слияния.

Вывод

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

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

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

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

Можно использовать различные стратегии, чтобы повысить скорость этой маркировки и избежать необходимости продолжать работу. Будьте осторожны, когда многоугольники имеют общую границу.

Смотрите также

Рекомендации

  1. ^ Фоли, Джеймс, Андрис ван Дам, Стивен Файнер и Джон Хьюз. «Компьютерная графика: принципы и практика». Издательство Эддисон-Уэсли. Ридинг, Массачусетс: 1987. стр. 689-693.