anonymous
19:07 Uhr, 20.03.2007
|
Guten Abend,
wenn man etwas nicht weiß, mußt Du fragen ......
Ich versuche aus einer Vielzahl ungeordneter, aber bekannter Koordinaten x,y ein umfassendes sinnvolles Polygon zu erstellen. Da ich aber nicht vom Fach bin , fällt mir der Anfang sehr schwer. Hat hier jemand eine Idee, wie ich beginnen könnte ??
Angefangen habe ich:
1.Mittelpunkt berechnen
2.Berechnung des Tan jedes einzelnen Punktes zum Mittelpunkt
3.Sortieren der Punkte nach Tan-Wert
Idee vorbei, da nun natürlich immer noch jeder Punkt berücksichtigt wird.
Das ganze ist angedacht für einen Pflanzenverbreitungsatlas, daher die mathematische Unkenntnis.
Gruß
Kalle
|
|
anonymous
02:53 Uhr, 21.03.2007
|
Hallo,
ich hoffe die Aufgabe richtig verstanden zu haben:
Du hast endlich viele bekannte Paare (x:y) und willst ein sinnvolles Polygon daraus zeichen. Der Ansatz mit dem Mittelpunkt ist m.E. gut. Den berechnet man als 1/n*SUMME(i=1;n;P_i), wobei die P_i die Ortsvektoren der Punkte (vorgegebene Paare) sind und n die Anzahl der vorgegebenen Punkte ist. Dann hast Du von jedem Punkt den Tangens zum Mittelpunkt errechnet. Was meinst Du damit? Ich würde den Anstieg der Geraden zwischen Mittelpunkt und Punkt errechnen:
m_i = (y_i-m_y)/(x_i-m_x) für x_i unngleich m_x !!!
m_i = Anstieg für den i-ten Punkt
m_x = x-Koordinate des Mittelpunktes
m_y = y-Koordinate des Mittelpunktes
Für x_i=mx macht man zusaätzliche Betrachtungen!
Ein Polygon ist eine Figur, die keinen Anfangs und keinen Endpunkt hat. Um es zu zeichnen oder zu definieren, benötigt man einen Anfangs- und einen Endpunkt. Alle Punkte sind mit ihren "Nachbarn" verbunden und zusätzlich sind der Endpunkt und der Anfangspunkt miteinander verbunden.
Jetzt sortiert man alle Punkte mit x_i ungleich m_x in 2 Gruppen (!!!), für die eine Gruppe gilt: x_i ist größer als m_x, für die andere Gruppe gilt: x_i ist kleiner ans m_x. Beide Gruppen werden nach aufsteigendem Anstieg sortiert!
Gibt es einen Punkt mit x_i=m_x und y_i ist größer als m_y, "hängt" man diesen Punkt an die Gruppe der Punkte mit x_i ist größer als m_x "hinten" dran.
Gibt es einen Punkt mit x_i=m_x und y_i ist kleiner gleich m_y, "hängt" man diesen Punkt an die Gruppe der Punkte mit x_i ist kleiner als m_x "hinten" dran.
Jetzt "hängt" man eine Gruppe an die andere hinten "dran" und man hat eine Sortierung, mit der man ein Polygon zeichnen kann! Wenn man sich die gegebenen Punkte und den Mittelpunkt vorstellt und um den Mittelpunkt eine Uhr einzeichnen würde, dann würde das Polygon entgegen der Uhrzeigerrichtung gezeichnet werden. Der Startpunkt liegt "am nächsten" zu 6:00 Uhr (am nächsten heißt, der unendlich lange Zeiger startet bei 6:00 Uhr und dreht sich entgegen dem Uhrzeigersinn und streift einen Punkt als erstes, das ist der Punkt, der "am nächsten" ist). Der nächste Punkt ist der nach dem selben Verfahren "nächste Punkt". Der Endpunkt liegt entweder auf 6:00 Uhr (der Zeiger hat eine volle Runde absolviert) oder er ist der "am nächsten" zu 6:00 Uhr gelegene Punkt in Uhrzeigerrichtung.
|
kalle 
18:03 Uhr, 21.03.2007
|
Guten Abend,
lieben Dank für die schnelle und ausführliche Antwort, verbunden mit der Bitte, mich nach einigen Tests, Überlegungen und möglichen Fragen noch einmal zu melden.
Gruß
Kalle
|
anonymous
09:33 Uhr, 22.03.2007
|
Hallo,
hab noch mal das Ganze etwas weitergedacht, vielleicht kommst Du auf die selbe Frage durch Deine Daten:
Was macht man mit Punkten gleichen Anstiegs bzw. mit mehreren Punkten mit x_i=m_x und y_i kleiner gleich m_y bzw. mehreren y_i größer als x?
Ich würde als Lösung vorschlagen, dann anhand der y-Werte zu sortieren. Die Reihenfolge (aufsteigend oder abfallend) ist beliebig, weil technisch egal, man kann die Reihenfolge auch vom gemeinsamen Anstieg m_i und der Gruppe abhängig machen, z.B. für m_i kleiner Null und x_i größer uder gleich als m_x und für m_i größer gleich Null und x_i kleiner gleich Null anbfallend und ansonsten aufsteigend. Oder noch komplizierter: Man schaut sich die potentiellen Nachbarwerte an (im wert benachbarte m_i und aus der selben Gruppe) und versucht die Außenkante des Polygons möglich glatt zu halten, aber das muß man auch erst mal berechnen können!
Wie dem auch sein, Du mußt, um das Polygon sicher zeichnen zu können, diesen Fall, daß der Anstieg bei zwei Punkten gleich ist, berücksichtigen, ansonsten kommst Du eventuell in Probleme.
Auch solltest Du eventuelle Rundungen berücksichtigen. Wenn Du für 2 Punkte den selben Anstieg errechnet hast, dann solltest Du durch weitere Tests nachprüfen, ob es sich nicht nur um eine Gleichheit durch die spezielle Rundung bei der Berechnung des Anstiegs handelt. Es gehört eine Art Berechnung des Rests bei der Division dazu (Man multipliziert z.B. die Differenz der x-Werte mit dem Anstieg und betrachtet die Abweichung von der Differenz der y-Werte oder man findet ein anderes, besseres Verfahren)!
|
Diese Frage wurde automatisch geschlossen, da der Fragesteller kein Interesse mehr an der Frage gezeigt hat.
|