Ho un codice che accetta una condizione C come input e calcola la soluzione al mio problema come 'area consentita' A sullo spazio (x, y). Quest'area è composta da diversi "tubi", definiti da 2 linee che non possono mai attraversare.Intersezione di area in Python
Il risultato finale che sto cercando deve soddisfare k condizioni {C1, .., Ck}, ed è quindi un'intersezione S tra k aree {A1, .., Ak}.
Ecco un esempio con 2 condizioni (A1: verde, 3 tubi A2: viola, 1 tubo); la soluzione S è in rosso.
Come posso trovare S quando ho a che fare con 4 aree di circa 10 tubi di ciascuno? (La trama finale è orribile!)
Avrei bisogno di essere in grado di tracciarlo, e di trovare la coordinata media e la varianza dei punti in S (varianza di ogni coordinata). [Se esiste un modo efficace per sapere se un punto P appartiene a S oppure no, userò solo un metodo Monte Carlo].
Idealmente, mi piacerebbe anche essere in grado di implementare "tubi proibiti" che rimuoverei da S [potrebbe essere un po 'più complicato di intersecare S con l'esterno della mia area proibita, poiché due tubi dal stessa area può attraversare (anche se le linee che definiscono un tubo non si incrociano mai)].
Nota:
Il codice memorizza anche la lunghezza dell'arco delle linee.
Le righe vengono memorizzate come matrici di punti (circa 1000 punti per linea). Le due linee che definiscono un tubo non hanno necessariamente lo stesso numero di punti, ma Python può interpolarle TUTTE come funzione della loro lunghezza d'arco in 1 secondo.
Le linee sono funzioni parametriche (ad esempio, non è possibile scrivere y = f (x), poiché le linee possono essere verticali).
La trama è stata modificata con la vernice per ottenere il risultato sulla destra ... Non molto efficiente!
Edit:
non so come posso usare plt.fill_between per un incrocio multipla (posso farlo qui per 2 condizioni, ma ho bisogno del codice per farlo automaticamente quando ci sono troppe linee per il giudizio dell'occhio).
Per ora ho appena generato le linee. Non ho scritto nulla per trovare la soluzione finale dato che non so assolutamente quale sia la struttura più adatta per questo. [Tuttavia, una versione precedente del codice è stata in grado di trovare i punti di intersezione tra le linee di 2 tubi diversi, e stavo progettando di passarli come poligoni a formosa, ma questo implicava molti altri problemi ..]
Non penso di poterlo fare con
sets
: la scansione dell'intera area (x, y) alla precisione richiesta rappresenta circa 6e8 punti ...[Le linee hanno solo punti 1e3 grazie ad una dimensione di passo variabile (si adatta alla curvatura), ma l'intero problema è abbastanza grande]
Per la tua ultima nota - è possibile ottenere questo fatto utilizzando plt.fill_between (o plt.fill) – Phlya
Potresti aggiungere del codice alla domanda che gli spettacoli dove nel processo di implementazione sei così disposto a aiutare a ottenere un'idea più concreta, dove potresti essere bloccato e ciò che sanno corrispondere meglio? Sarebbe grandioso. Grazie. – Dilettant
Solo un'idea senza guardare troppo da vicino, se puoi calcolare ogni tubo come un 'set' di punti allora potresti fare un'intersezione' set' tra ogni coppia di tubi per ottenere qualcosa di utile per il risultato desiderato. –