Хитрость заключается в том, чтобы найти полные схемы пересекающихся отрезков, которые определяют каждую область (многоугольник).
Предположим, что отрезки линии названы буквами (A, B, C, ...).
Я бы начал с создания таблицы, которая позволяет находить пересечения по отрезкам.
A -> B
A -> C
A -> D
B -> A
C -> A
C -> D
D -> A
(В этом примере ACD образует треугольную область, а B — просто случайный отрезок, пересекающий A.)
Выберите отрезок, скажем, A, и проверьте его первое пересечение, которое оказывается с отрезком B. Теперь мы начинаем сканировать пересечения B. B соединяется обратно с A, который замыкает цепь, но было всего два шага, так что это недействительная область.
Поскольку у B больше нет пересечений, мы возвращаемся назад и смотрим на следующее пересечение A, которое находится с C. Первое пересечение C происходит с A, который завершает круг, но это всего два шага, поэтому это недействительная область. Но следующее пересечение C — это D, а первое пересечение D — это A, что завершает трехшаговый контур, так что теперь у нас есть допустимая площадь, а именно треугольник. Площадь определяется точками пересечения, которые мы использовали в нашей схеме: Pac, Pcd, Pda.
Как только вы изучите все возможные пути от A, вы снова начнете с B. Обратите внимание, что вы найдете области несколько раз, поэтому вам нужно отфильтровать дубликаты. Но вы не можете полностью пропустить проверку B, потому что это может быть край другой области, которую вы еще не нашли.
person
Adrian McCarthy
schedule
31.05.2018