Площадь пересечения в Python

У меня есть код, который принимает условие C в качестве входных данных и вычисляет решение моей проблемы как «разрешенную область» A в пространстве (x, y). Эта область состоит из нескольких «трубок», которые определяются двумя линиями, которые никогда не могут пересекаться.

Конечный результат, который я ищу, должен удовлетворять k условиям {C1, .., Ck} и поэтому является пересечением S между k областями {A1, .., Ak}.

Вот пример с 2 условиями (A1: зеленый, 3 пробирки. A2: фиолетовый, 1 пробирка); решение S в красном.

Как я могу найти S, когда я имею дело с 4 областями по 10 пробирок в каждой? (Финальный сюжет ужасен!)

Мне нужно было бы иметь возможность построить ее и найти среднюю координату и дисперсию точек в S (дисперсия каждой координаты). [Если есть эффективный способ узнать, принадлежит ли точка P к S или нет, я просто воспользуюсь методом Монте-Карло].

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

Замечания:

Код также хранит длину дуги линий.

Линии хранятся в виде массивов точек (около 1000 точек на линию). Две линии, определяющие трубу, не обязательно имеют одинаковое количество точек, но Python может интерполировать ВСЕ из них как функцию их длины дуги за 1 секунду.

Линии являются параметрическими функциями (то есть мы не можем написать y = f (x), поскольку линии могут быть вертикальными).

Сюжет был отредактирован краской, чтобы получить правильный результат ... Не очень эффективно!

Редактировать:

Я не знаю, как я могу использовать plt.fill_between для многократного пересечения (я могу сделать это здесь для 2 условий, но мне нужен код, чтобы сделать это автоматически, когда слишком много строк для оценки зрения).

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

Я не думаю, что смогу сделать это сsets: сканирование всей (x, y) области с требуемой точностью представляет около 6e8 точек ... [Линии имеют только 1e3 точки благодаря переменному размеру шага (адаптируется к кривизне), но вся проблема довольно велика]

Ответы на вопрос(1)

Ваш ответ на вопрос