пересечение и объединение многоугольников - PullRequest
8 голосов
/ 27 октября 2011

У меня есть полигоны, определенные их вершинами, и мне нужно вычислить области их объединения и пересечения.Самое огорчительное, что он реализован в Mapping Toolbox, но я не могу его купить.Кто-нибудь знает, как сделать быстрый алгоритм для его расчета?Спасибо за ваше время.

Ответы [ 4 ]

3 голосов
/ 27 октября 2011

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

enter image description here

1 голос
/ 27 октября 2011

Я бы сделал так:

  1. Пусть S будет набором вершин из обоих многоугольников.
  2. Для каждого ребра e 1 в многоугольнике 1
    1. Для каждого ребра e 2 в многоугольнике 2
      1. Если e 1 пересекается с e 2
        1. Добавить точку пересечения к S
  3. Удалить все вершины в S , которые находятся внутри многоугольника 1 или 2.

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

Для пересечения вы просто удаляете все вершины в S , которые находятся вне обоих многоугольников 1 и 2 (на третьем шаге).

(Вы можете посмотреть точки пересечения и проверки "внутри-полигона" в другом месте; -)

0 голосов
/ 12 декабря 2011

Я нашел точки пересечения моих многоугольников и добавил вершины, которые находятся внутри / снаружи многоугольников для задачи пересечения / объединения (проверьте, лежит ли какая-либо из вершин многоугольника 1 внутри многоугольника 2 и наоборот, используя 'inpolygon').Затем все точки были преобразованы в полярные координаты с центром в средних координатах матрицы и отсортированы по углу, так что теперь они образуют последовательный замкнутый контур.Зная это, легко найти область пересечения / объединения, используя 'polyarea'.

0 голосов
/ 27 октября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...