Area Kreuzung in Python

Ich habe einen Code, der eine Bedingung C als Eingabe verwendet und die Lösung meines Problems als 'zulässiger Bereich' A auf dem (x, y) -Raum berechnet. Dieser Bereich besteht aus mehreren Röhren, die durch zwei Linien definiert sind, die sich niemals kreuzen können.

Das gesuchte Endergebnis muss k Bedingungen {C1, .., Ck} erfüllen und ist daher ein Schnittpunkt S zwischen k Bereichen {A1, .., Ak}.

Hier ist ein Beispiel mit 2 Bedingungen (A1: grün, 3 Röhren. A2: lila, 1 Röhre); Die Lösung S ist rot.

Wie finde ich S, wenn ich es mit 4 Bereichen mit jeweils 10 Röhren zu tun habe? (Die letzte Handlung ist schrecklich!)

ch müsste in der Lage sein, es zu zeichnen und die mittlere Koordinate und die Varianz der Punkte in S (Varianz jeder Koordinate) zu finden. [Wenn es eine effiziente Möglichkeit gibt, festzustellen, ob ein Punkt P zu S gehört oder nicht, verwende ich einfach eine Monte-Carlo-Methode.]

Idealerweise möchte ich auch "verbotene Röhren" implementieren können, die ich aus S entfernen würde [es könnte etwas komplizierter sein, als S mit der Außenseite meines verbotenen Bereichs zu schneiden, da zwei Röhren aus demselben Bereich können kreuzen (auch wenn sich die Linien, die eine Röhre definieren, niemals kreuzen).

Hinweis

Der Code speichert auch die Bogenlänge der Linien.

Die Linien werden als Punktfelder gespeichert (ca. 1000 Punkte pro Linie). Die zwei Linien, die eine Röhre definieren, müssen nicht unbedingt die gleiche Anzahl von Punkten haben, aber Python kann ALLE von ihnen als Funktion ihrer Bogenlänge in 1 Sekunde interpolieren.

Die Linien sind parametrische Funktionen (d. H. Wir können nicht y = f (x) schreiben, da die Linien vertikal sein dürfen).

Der Plot wurde mit Farbe bearbeitet, um das richtige Ergebnis zu erzielen ... Nicht sehr effizient!

Bearbeiten

Ich weiß nicht, wie ich plt.fill_between für eine Mehrfachkreuzung verwenden kann (ich kann es hier für 2 Bedingungen tun, aber ich brauche den Code, um es automatisch zu tun, wenn es zu viele Linien für die Augenbeurteilung gibt).

Für jetzt erstelle ich die Zeilen. Ich habe nichts geschrieben, um die endgültige Lösung zu finden, da ich absolut nicht weiß, welche Struktur dafür am besten geeignet ist. [Eine frühere Version des Codes war jedoch in der Lage, die Schnittpunkte zwischen den Linien von 2 verschiedenen Röhren zu finden, und ich hatte vor, sie als Polygone an shapely zu übergeben, aber dies implizierte mehrere andere Probleme.]

Ich glaube nicht, dass ich es mit @ tun kasets: Das Scannen des gesamten (x, y) Bereichs mit der erforderlichen Genauigkeit entspricht ungefähr 6e8 Punkten ... [Die Linien haben dank einer variablen Schrittgröße (passt sich der Krümmung an) nur 1e3 Punkte, aber das gesamte Problem ist ziemlich groß]

Antworten auf die Frage(2)

Ihre Antwort auf die Frage