Ich arbeite an einer Anwendung, ich muss in der Lage sein, zwei überlappende beliebige Formen wie vom Benutzer gezeichnet zu kombinieren. Dies wäre eine Unionsoperation an den beiden Formen. Die resultierende Form wäre die Silhouette der zwei überlappenden Formen.
Die Formen werden als eine Reihe von Punkten im Uhrzeigersinn gespeichert.
Idealerweise möchte ich einen Algorithmus, der zwei Arrays von Punkten (x, y) benötigt und ein einzelnes Array der resultierenden Form zurückgibt.
Ich habe Wikipedia auf Booleschen Operationen für Polygone gelesen, in denen die Sweepline Algorithmus , aber ich kann die Verbindung zwischen diesem und meinem Ziel nicht herstellen, leider bin ich kein Mathematiker.
Ich entwickle die Anwendung in ActionScript 3, aber ich bin mit C #, Java und C und C ++ vertraut.
Boolesche Operationen korrekt zu implementieren ist nicht trivial; Zum Glück gibt es Bibliotheken, die diese Funktionalität bereits implementieren.
Welche Sprache benutzen Sie? Wenn es C ++ ist, werfen Sie einen Blick auf CGAL , die Bibliothek für Algorithmische Geometriealgorithmen.
Gegeben zwei Listen von Punkten (A und B)
- [1] für jede Linie in A schneidet sie eine Linie in B
-.- [2] Wenn sich keine (mehr) Linien schneiden, gibt es keine Überlappung |
-.- [3] Wenn eine Linie in (A) eine Linie in B schneidet, dann
-.-.- [4] füge den Schnittpunkt zur Ausgabe hinzu
-.-.- [5] schneidet die nächste Zeile von A B
-.-.-.- [6] Wenn nicht, füge dies zur Ausgabe hinzu (es ist in B) gehe zu 5
-.-.-.- [7] falls ja, füge die Schnittmenge zum Ausgang hinzu und vertausche die Listen A & amp; B gehe zu 2
Siehe auch Kreuzungspunkt von zwei Linien . Ich werde den Code nicht schreiben, sorry:)
Wie wäre es mit:
Ich denke, wenn du dich immer weiter winden solltest, egal welche Form aktuell ist, suche nach Kreuzungen, das sollte tun, was du willst. Ich denke, dass sollte auch mit konkaven Formen zurechtkommen ...
Ich bin sicher, dass es viele Optimierungen gibt, die Sie hinzufügen können, sobald Sie mit den Grundlagen arbeiten.
Tags und Links math geometry boolean-operations