Umlaufsinn eines Polygons

Neue Frage »

pkautz Auf diesen Beitrag antworten »
Umlaufsinn eines Polygons
Hallo zusammen,

ich habe folgendes Problem: gegeben sind eine Anzahl von Punkten und Geraden (beschrieben durch jeweils zwei Punkte); gesucht wird ein Polygon, dessen Umlaufsinn dem Uhrzeigersinn entgegengesetzt ist (also positiven Umlaufsinn besitzt). Irgendwie stehe ich auf dem Schlauch verwirrt .

Als einfaches Beispiel:

Punkte:


Kanten:


Nun habe ich gedacht ich könnte für die Kanten Vektoren nehmen:

und mit dem Kreuzprodukt von zwei Vektoren die Richtung bestimmen, aber irgendwie stelle ich mich zu blöde an. Reichen meine Ausgangsdaten überhaupt aus? Woher weiß man z.B. von welchen Vektorenpaar man das Kreuzprodukt berechnen muss?

Gruß
Patrick
integralschokolade Auf diesen Beitrag antworten »

Du musst das Kreuzprodukt zwischen zwei benachbarten Vektoren
(z.B. zwischen v1 und v2) bilden. Das Kreuzprodukt hat negativen Wert, wenn die beiden Vektoren einen Umlaufsinn entgegen des
Uhrzeigersinns haben, einen positiven - wenn Umlaufsinn im Uhrzeigersinn. Wähle die Abfolge der Vektoren immer so, dass das
Kreuzprodukt einen negativen Wert hat! Sollte bei einem Kreuzprodukt
ein positiver Wert rauskommen, vertauschst du die Vektoren.
Beispiel: v_a x v_b = positiv -> v_b x v_a = negativ -> Abfolge: v_b
und dann kommt v_a
pkautz Auf diesen Beitrag antworten »

Das verstehe ich ja. Wo ich aber ein Problem sehe, ist angenommen ich betrachte und , auf Grund der Kanten weiß ich, dass die beiden den Punkt besitzen (dummerweise beide als Endpunkt). Demnach zeigen beiden Vektoren auf den gleichen Punkt und sind "entgegengesetzt", laut Kreuzprodukt erhalte ich, einen negativen Umlaufsinn. Also tausche ich die Vektoren => Abfolge: erst und dann . Wenn ich mir das Ganze mal skizziere, dann ist die Richtung jetzt aber falsch herum, sprich mit dem Uhrzeiger.
Also eigentlich muss ich irgendwie mitbekommen, dass die Vektoren auf den gleichen Punkt zeigen, herausfinden welcher Vektor "falsch" herum ist und ihn umdrehen (Anfangs- und Endpunkt wechseln). Ist das verständlich?

Gruß
Patrick
riwe Auf diesen Beitrag antworten »

eine möglichkeit verwirrt

Punkte:


wähle als "ausgangspunkt" und die richtung der positiven x-achse als "ausgangsvektor".






mit dem skalarprodukt bestimmst du nun die winkel "zwischen den einzelnen punkten":



und jetzt sortierst du die punkte nach der größe der winkel:



verwirrt
werner
pkautz Auf diesen Beitrag antworten »

Wenn ich das richtig verstehe, wird von Punkt ausgehend ein Strahlenfächer erstellt und dann die Punkte nach aufsteigendem "Anstieg" sortiert. Das funktioniert leider für komplexere Polygone nicht.

Gruß
Patrick
riwe Auf diesen Beitrag antworten »

was verstehst du unter komplexer verwirrt

komplexer verwirrt
werner
 
 
pkautz Auf diesen Beitrag antworten »

Ja, genau sowas.

Gruß
Patrick
riwe Auf diesen Beitrag antworten »

sowas geht aber "problemlos".
soweit ich das durchschaue, hast du (nur) probleme, wenn mehrere punkte exakt auf einer geraden liegen.
aber ich fürchte, die hast du dann immer Big Laugh
werner
pkautz Auf diesen Beitrag antworten »

Aber mal angenommen man wählt in Deinem Beispiel den Punkt als Ausgangspunkt und die Richtung der positiven x-Achse als Ausgangsvektor, dann wäre ja der Winkel zwischen Ausgangsvektor und kleiner als der Winkel zwischen Ausgangsvektor und . Was wiederum, wenn ich Dich richtig verstanden habe, heißen würde, dass der Punkt vor dem Punkt kommt, was laut Zeichnung aber nicht der Fall ist. Oder habe ich da jetzt einen Denkfehler drin?

Gruß
Patrick
riwe Auf diesen Beitrag antworten »

nein da hast du keinen denkfehler.
aber es wäre doch kein problem, mit dem punkt zu beginnen, der den kleinsten y-wert hat.

meine vermutung ist halt, dass alle probleme/spezialfälle, die bei dieser einfachen version auftauchen, auch bei allen anderen zu untersuchen sind.
wie willst du denn das z.b. mit dem exprodukt - das viel aufwendiger ist als das skalare pendant - umschiffen?

oder bessere ( verwirrt )variante:
beginne bei D, suche den minimalen winkel -> B,
nun bestimme den minimalen winkel von B aus -> M....

wozu gibt es schließlich computer
(wenn´s nicht gerade 1000000...punkte sind,
dann mußt halt den handlungsreisenden befragen unglücklich )

ist das das berühmte ei verwirrt
werner
pkautz Auf diesen Beitrag antworten »

Zitat:
Original von wernerrin
oder bessere ( verwirrt )variante:
beginne bei D, suche den minimalen winkel -> B,
nun bestimme den minimalen winkel von B aus -> M....


Das klingt ganz gut, aber was passiert bei M? Minimaler Winkel zu L, aber es müsste J kommen. Leider.

Anderer Vorschlag:
Ich wähle den Punkt aus, der den kleinsten x-Wert besitzt. Sollten mehrere Punkte den gleichen minimalen x-Wert haben, wird der mit dem maximalen y-Wert ausgewählt => . Jeder Punkt kann nur mit zwei anderen Punkten verbunden sein. Dann nehme ich die Kante welche den größeren Winkel besitzt und setze den Endpunkt der Kante als Startpunkt und als zweiten Punkt. Nun müsste ich auf Grund der Prämisse, dass jeder Punkt nur zwei Nachbarn besitzt, durch eine geeignete Datenstruktur iterieren und den Polygonzug zusammenbasteln.

Im Beispiel:

Winkel => H ist Startpunkt, gefolgt von G dann D, B, M, ...

Oder gibt es irgendwelche Einwände?!

Gruß
Patrick
riwe Auf diesen Beitrag antworten »

ja das war ein faules ei.
wie schön, dass es dein problem ist. Big Laugh

den rest muß ich noch bebrüten,
wie wäre es mit ein paar daten, damit man sich nicht an "meiner" skizze festrennt!
ich versuch´s dann mit dem minimum von y usw.
werner
pkautz Auf diesen Beitrag antworten »

Hier ein paar Daten.

Punkte:


Kanten:


Gruß
Patrick
riwe Auf diesen Beitrag antworten »

verstehe ich da was falsch?
also ich dachte, du hast die punkte gegeben und suchst IRGENDEINEN (orientierten) polygonzug.
erkenntnis neu:
du hast die punkte und jeweils die beiden nachbarpunkte bereits gegeben?
was suchst du dann genau?
werner
AD Auf diesen Beitrag antworten »

Ich hab den Thread nur überflogen, deswegen verzeiht, wenn ich das eine oder andere gesagte übersehen habe...

Du hast also ein Polygon in der Ebene, nicht notwendig konvex, aber doch (hoffentlich) nicht "überschlagen" und suchst nun den Umlaufsinn: positiv oder negativ.

Dann berechne doch die vorzeichenbehaftete Fläche des Polygons

,

dabei ist natürlich zu setzen, die Summanden sind quasi die z-Komponenten des Kreuzprodukes .



Das erhaltene Vorzeichen von entspricht nun dem Umlaufsinn des Polygons: positiv - positiv, negativ - negativ.

Bei Null ist der Flächeninhalt Null, da kann man von keinem Umlaufsinn sprechen.
riwe Auf diesen Beitrag antworten »

hallo arthur,
ich habe da offensichtlich alles falsch verstanden,
nun noch eine frage dazu:
genügt es nicht - im sinne der pkautz ´schen anfangsvermutung - so vorzugehen:

ich nehme irgendeinen punkt z.b , dessen nachbarpunkte sind nun bekannt mit und .
da

heißt das doch, mit wandere ich gegen den uhrzeigersinn, und der rest ist ja damit festgelegt verwirrt

irgendwie kommt mir das zu einfach vor,
aber ich verstehe eben das problem nicht (mehr oder noch nicht) verwirrt
werner
AD Auf diesen Beitrag antworten »

Bei einem konvexen Polygon würde das stimmen, aber i.a. nicht bei so einem Zick-Zack-Polygon, wie du es oben aufgemalt hast. Augenzwinkern
riwe Auf diesen Beitrag antworten »

danke schön
werner
pkautz Auf diesen Beitrag antworten »

Also ich habe (wie schon im ersten Thread beschrieben) die Punkte und Kanten gegeben und suche ein positiv orientiertes Polygon. War wohl etwas dämmlich formuliert. Vielleicht wird es so klarer. Ich suche die Reihenfolge der Punkte und damit auch Kanten, so dass sich für das beschriebene Polygon ein positiver Umlaufsinn ergibt.
Benötige die ganze Sache für die anschließende Triangulation des Polygons. Um konsistente Vorgänger-Nachfolger-Beziehungen zu erhalten müssen alle Kanten des Polygons die gleiche Orientierung haben.

Gruß
Patrick
AD Auf diesen Beitrag antworten »

Das ist immer noch etwas unklar formuliert, wenn du sagst, dass du die Reihenfolge suchst...

Ist es nicht eher so: Wenn du Punkte und Kanten hast, dann besteht doch nur noch die Alternative zwischen zwei Richtungen - "hin" oder "zurück". Also bei deinem Polygon oder .
riwe Auf diesen Beitrag antworten »

genau darauf zielte meine frage.
jetzt bin ich so klug als wie zuvor
ich armer tor verwirrt
werner
pkautz Auf diesen Beitrag antworten »

An sich ja. Wobei die Punkte nicht geordnet sind, d.h. das Polygon auch so aussehen kann. Des Weiteren kann die Orientierung der Kanten unterschiedlich sein. Was aber im Endeffekt egal sein müsste, wenn ich als erstes meine Daten einmal durchlaufe und mir eine Nachbarschaftsliste der Punkte erstelle, mit dieser dann weiterarbeite und nach der Vorgehensweise ein paar Beiträge weiter oben meine Punkte "sortiere".

Gruß
Patrick
AD Auf diesen Beitrag antworten »

Zitat:
Original von pkautz
An sich ja. Wobei die Punkte nicht geordnet sind, d.h. das Polygon auch so aussehen kann.

Jetzt bin ich vollkommen verwirrt: Ich denke, die Kante ist gar nicht dabei???


EDIT: Hab mir den Thread doch noch mal genauer durchgelesen, insbesondere dein obiges Beispiel mit dem Zehneck. Die richtige Aneinanderreihung der Kanten ist doch ein vorgelagertes Problem, das kann man doch von dem anderen Problem des Umlaufsinns abtrennen:



Ist doch unübersichtlich und schlecht, das so durcheinanderzumengen. Ich hab die ganze Zeit gedacht, es geht um einen bereits "richtig" sortierten Kantenzug bzw. Polygon.
pkautz Auf diesen Beitrag antworten »

Sorry, Fehler vom Amt, war so aus dem Hut gegriffen und nicht auf das Beispiel bezogen. Für die Beispieldaten: (negativer Umlaufsinn) bzw. (positiver Umlaufsinn).

Gruß
Patrick
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »