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]