Извлечение многоугольников из многоугольника с коллинеарными краями - PullRequest
0 голосов
/ 10 января 2011

Как я могу извлечь простые многоугольники из многоугольника, который содержит коллинеарные ребра?Для приведенного ниже очень простого случая ребра 2-3 и 6-0 коллинеарны.Я хочу разделить это как 0, 1, 2 и 3, 4, 5, 6.

Я мог бы сравнить коллинеарность каждого ребра с любым другим ребром, но это медленный подход O (n ^ 2),Есть ли более быстрый метод?

alt text

Ответы [ 2 ]

2 голосов
/ 10 января 2011

Найдите ограничивающий круг. Вычислите верхнее / правое пересечение между ограничительной окружностью и линией, на которой лежит каждое ребро. Это O (n). Теперь рассортируйте каждое ребро по кортежу по его углу и угловому положению пересечения с ограничивающим кругом. Это O (nlogn) и сгруппирует коллинеарные ребра в ваш отсортированный список.

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

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

Можете ли вы найти пересечение 1-2 и 6-0? Если это так, вы можете сгенерировать граф ребер и вершин. Тогда найти все непересекающиеся многоугольники просто.

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