Laden...

Überlappung von 2 Polygonen

Erstellt von nordside vor 16 Jahren Letzter Beitrag vor 16 Jahren 3.786 Views
nordside Themenstarter:in
186 Beiträge seit 2007
vor 16 Jahren
Überlappung von 2 Polygonen

Hallo,

ich habe zwei Polygone. Die Darstellung der Polygone erfolgt durch Strecken. Um nun festzustellen, ob eine Überlappung existiert, überprüfe ich, ob eine beliebige Strecke a des einen Polygons eine beliebige Strecke b des anderen Polygons schneidet. Ist dies der Fall breche ich die Untersuchung ab und gebe true zurück - es existiert eine Überlappung bei den beiden Polygonen.

Dieser Algorithmus funktioniert jedoch nicht, wenn ein Polygon größer ist, als das andere und es komplett einschließt. Wie kann ich diesen Fall abdecken? Die konvexe Hülle kann ich ja nicht benutzen, weil alle Punkte auf der Linie liegen.

Hat jemand eine Idee?
Vielen Dank

S
506 Beiträge seit 2006
vor 16 Jahren

ja tauch die beiden polygone einfach. Dann ist das anderen wieder länger.

nordside Themenstarter:in
186 Beiträge seit 2007
vor 16 Jahren

Dann existiert doch aber immer noch kein Schnittpunkt bei den Strecken - oder? Dies ist derzeit aber mein Entscheidungskriterium, ob eine Überlappung zwischen den Polygonen existiert.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo nordside,

warum verwendest du nicht einfach zwei GraphicsPath-Objekte, aus denen du zwei Regions machst und dann mit Region.Intersect die Schnittmenge berechnest?

herbivore

795 Beiträge seit 2006
vor 16 Jahren

Oder, wenn du das nicht willst, prüfst du einfach, ob ein beliebiger punkt a von polygon a in polygon b liegt.

(Ich glaube zwar, dass das das ist, was Intersect macht, aber geht auch zu Fuss)

GRuß, Christian.

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
nordside Themenstarter:in
186 Beiträge seit 2007
vor 16 Jahren

Vielen Dank für den sehr guten Hinweis mit der GraphicsPath-Klasse. Da ich eigentlich nur Rechtecke betrachte, konnte ich die Sache sogar weiter vereinfachen:

Ich initialisiere ein Objekt der Klasse System.Drawing.Rectangle mit den entsprechenden Werten. Anschließend prüfe ich mit


rectangle.IntersectsWith(new System.Drawing.Rectangle(x,y,width, height))

ob eine Überscheidung stattfindet. Die Polygone hätte ich ja nur berücksichtigt, um eine allgemeingültige Klasse zu haben - wenn ich schon den Aufwand betreiben muss, eine eigene Klasse zu schreiben.

Ich finde nur eins schade:
Ich verwende ein Objekt der Klasse Rectangle aus der Klasse System.Drawing zur Überprüfung der Überscheidung. Warum unterstützt das Rectangle aus dem WPF-Namespace nicht diese Funktionalität? So muss ich es erst in ein System.Drawing.Rectangle umwandeln.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo nordside,

Warum unterstützt das Rectangle aus dem WPF-Namespace nicht diese Funktionalität?

ja, das sind so die Fragen, die das Leben stellt. 🙂

Vielleicht ist es nur ein Versehen, dann wäre es gut, MS eine Rückmeldung zu geben (New Product Feedback Center Sites).

herbivore

C
62 Beiträge seit 2004
vor 16 Jahren

Hallo!

Tut mir leid dass ich das Thema nochmal aufrolle, aber ich habe selbiges Problem.

Ich kenne jeweils zwei Polygone und möchte testen ob sie sich scheiden. Die Region Klasse habe ich gefunden. Schneide ich nun die Region mit dem ersten GraphicsPath mit dem anderen GraphicsPath, dann würde ich gerne die Region testen, ob sie leer ist (Region.IsEmpty).

Das Problem ist, dass ich dafür ein Graphics Objekt bräuchte, dass ich aber an der Stelle, an der der Test stattfindet nicht zur Verfügung habe. Weiß da jemand eine Lösung?! Vielleicht geht es ja auch einfacher?!

Grüße,
confused

1.361 Beiträge seit 2007
vor 16 Jahren

Hi

nach der Prüfung ob sich irgendeine Kante des Polygons a mit einer des Polygons b schneidet kannst du doch noch die Prüfung anschließen:

Liegt der erste Punkt des Polygons a im Polygon b
und
Liegt der erste Punkt des Polygons b im Polygon a.