Обрезка полигонов: только «видимая» область - PullRequest
6 голосов
/ 05 сентября 2011

На рисунке ниже вы видите в (1) треугольник и круг.Учитывая выделенную точку X в этом треугольнике, я хочу удалить все, что не видно с этой точки.Нет проблем с удалением только круга с помощью простого алгоритма разности полигонов, как в (2).Но какой алгоритм я могу использовать, чтобы получить многоугольник, как в (3)?

Полигон всегда прост.

Редактировать: круг является лишь примером.Любой простой многоугольник должен быть возможен.

Image #1

Вы можете изобразить мои потребности, взглянув на изображение игры «Коммандос - В тылу врага»:

Image #2

Ответы [ 2 ]

3 голосов
/ 06 сентября 2011

Это основная идея.

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

Нам нужно получить для каждой фигуры starting_polar и ending_polar точек, которые являются 2 точками с минимальным и максимальным полярным углом, принадлежащим фигуре.

Теперь мы удалим из plan фигуру и удалим quadrilateral, образованный точками: starting_polar, ending_polar и пересечениями между двумя прямыми (x, starting_polar) и (x, ending_polar) и границы plan.

В вашем случае план будет просто triangle.

0 голосов
/ 06 сентября 2011

C параллельно D, G параллельно A, B параллельно F, D. диаметр.

Polygon

...