Interseção de área em Python

Eu tenho um código que usa uma condição C como entrada e calcula a solução para o meu problema como uma 'área permitida' A no espaço (x, y). Esta área é composta por vários 'tubos', que são definidos por 2 linhas que nunca podem se cruzar.

O resultado final que estou procurando deve satisfazer k condições {C1, .., Ck} e, portanto, é uma interseção S entre k áreas {A1, .., Ak}.

Aqui está um exemplo com 2 condições (A1: verde, 3 tubos. A2: roxo, 1 tubo); a solução S está em vermelho.

Como posso encontrar S quando estou lidando com 4 áreas de cerca de 10 tubos cada? (O enredo final é horrível!)

Eu precisaria ser capaz de plotá-lo e encontrar a coordenada média e a variação dos pontos em S (variação de cada coordenada). [Se houver uma maneira eficiente de saber se um ponto P pertence a S ou não, usarei apenas o método Monte Carlo].

Idealmente, eu também gostaria de poder implementar “tubos proibidos” que removeria de S [pode ser um pouco mais complicado do que cruzar S com o exterior da minha área proibida, pois dois tubos da mesma área podem atravessar (mesmo que as linhas que definem um tubo nunca se cruzem)].

Nota:

O código também armazena o comprimento do arco das linhas.

As linhas são armazenadas como matrizes de pontos (cerca de 1000 pontos por linha). As duas linhas que definem um tubo não têm necessariamente o mesmo número de pontos, mas o Python pode interpolar TODOS eles em função do comprimento do arco em 1 segundo.

As linhas são funções paramétricas (ou seja, não podemos escrever y = f (x), pois as linhas podem ser verticais).

A trama foi editada com tinta para obter o resultado certo ... Não é muito eficiente!

Editar:

Não sei como posso usar plt.fill_between para uma interseção múltipla (posso fazê-lo aqui por 2 condições, mas preciso do código para fazê-lo automaticamente quando houver muitas linhas para julgamento visual).

Por enquanto, apenas gero as linhas. Não escrevi nada para encontrar a solução final, pois não sei absolutamente qual estrutura é a mais adaptada para isso. [No entanto, uma versão anterior do código foi capaz de encontrar os pontos de interseção entre as linhas de 2 tubos diferentes, e eu estava planejando passá-los como polígonos para bem torneados, mas isso implicava vários outros problemas.]

Eu não acho que posso fazer isso comsets: digitalizar toda a área (x, y) com a precisão necessária representa cerca de 6e8 pontos ... [As linhas têm apenas 1e3 pontos graças a um tamanho de passo variável (adapta-se à curvatura), mas o problema é bastante grande]

questionAnswers(1)

yourAnswerToTheQuestion