Хитрость заключается в том, чтобы найти полные контуры пересекающихся отрезков, которые определяют каждую область (многоугольник).
Давайте предположим, что отрезки названы буквами (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, потому что это может быть край другой области, которую вы еще не нашли.