![]() |
Delphi-Version: XE2
[Festgefressen] Konvexhülle eines polygon berechnen
Liste der Anhänge anzeigen (Anzahl: 2)
Hey Community,
ich habe ein Problem. arbeite seit nun ein paar Tagen ein einem Problem . Ich habe mir ein Programm ausgearbeitet, jedenfalls versucht, das die Konvexe hülle eines Polygons berechnene soll. Soweit sogut, ich habe mir die einzelnen Winkel berechnet etc. MIt Testparameter ausprobiert, das Polygon X Mal gezeichent, aber es haut nicht hin. Ab den Punkt 546 | 801 ist ein Winkel kleiner, als der auf der Hülle. Und daher versaut es mir die ganze berechnung. Nun wollten ich irgendwie irgendwas versuchen mit dem Letzen Winkel als parameter mitgeben und von dort aus die WInkel berechnen.... Weiß nur noch nicht so ganz wie. Ich lade euch mal das Projekt hoch, und wäre euch echt dankbar wenn ihr mir da irgendwie helfen könntet. ( wäre auch supaa, wenn ihr mir meinen Fehler zeigt ggf auch erläutert) Dank im Vorraus |
Update [Festgefressen] Konvexhülle eines polygon berechnen
Nun gut,
mir wurde zu Ohren getragen, dass dieser Topic nicht sehr genau ist, und ich daher nicht mit Hilfe rechnen kann. Also werde ich etwas konkreter; Ich habe ein Polygon, mit verschiedenen Punkten. DIe Punkte werden per Mausklick gespeichert. Um die Konvexehülle zu erzeugen, wollte ich zu jeden Punkt ein Dreieck bilden und deren Winkel bestimmen. Diese Winkel kontrollier ich dann, und such dann nach dem größten, ggf den kleinsten. ( Hängt halt davon ab, wierum gelaufen werden soll. ) Nun ist aber das Problem, ich bestimm die Innenwinkel und gleiche diese Miteinnander. Diese Ergebnisse könnten gefälscht werden. folgende Function sollte es mir aber errechnen.
Delphi-Quellcode:
Nun ist die Frage, das ist eher eine mathematisches Problem, wie kann ich per Delphi die AUSSENwinkel errechnen ?
function TPoly.berechneWinkel(Punkt1, Punkt2: TPunkt): Real;
var dx, dy: Real; begin dx := Punkt2.IXKoordinate - Punkt1.IXKoordinate; dy := Punkt2.IYKoordinate - Punkt1.IYKoordinate; if (dx = 0) and (dy = 0) then begin result := 360; end else result := RadToDeg(ArcTan(dx / dy)); end; end |
AW: [Festgefressen] Konvexhülle eines polygon berechnen
Welchen Algorithmus verwendest du denn?
Graham-Scan, Jarvis-March...? |
AW: [Festgefressen] Konvexhülle eines polygon berechnen
@TiGü: Siehe auch hier:
![]() Zum Winkel: Was schonmal auffällt: Du benötigst DREI Punkte, um einen Winkel aufzuspannen. Bei drei Punkten A, B und C lassen sich zwei Strecken, oder besser noch: Vektoren, AB und BC definieren, zwischen denen dann der Winkel bestimmt wird. Du berechnest also momentan eben nicht die Innenwinkel. Zur Bestimmung eines Extrempunkts (als Startpunkt für den Graham-Scan) würde sich diese Funktion bedingt eigenen, aber nicht zur Innenwinkelberechnung. Außerdem hast du noch einen Bug drin, üblicherweise schreibt man arctan(y/x). Und am besten nimmt man direkt ArcTan2(y, x) dann bekommt man auch Winkel über den ganzen Kreis. |
AW: [Festgefressen] Konvexhülle eines polygon berechnen
Zitat:
Zitat:
|
AW: [Festgefressen] Konvexhülle eines polygon berechnen
Liste der Anhänge anzeigen (Anzahl: 1)
Zeichnerrisch mit Paint ...
Ich habe den Startpunkt; Puntk 1 und ich habe den end Punkt, punkt 2. Von deisen Beiden rechne ich doch den innen winkel mit Tangenz aus ? Oder bin ich da Mathematisch gerade falsch !? [edit] Aber wie kann ich den nun den Javars March richtig anwenden ?! [/edit] |
AW: [Festgefressen] Konvexhülle eines polygon berechnen
Liste der Anhänge anzeigen (Anzahl: 1)
Du hast jetzt leider kein Koordinatensystem gemalt, aber ja, das ist der Winkel, den du berechnest. Ich glaube aber nach wie vor, dass das nicht der Winkel ist, den du berechnen solltest. In deinem pdf steht nämlich:
Zitat:
|
AW: [Festgefressen] Konvexhülle eines polygon berechnen
Delphi-Quellcode:
result := cos((sqr(dx) - sqr(dy) - sqr(SeiteC)) / (-2 * dy * SeiteC));
Lautet so der Kosinussatz, wenn ich nach Aplha suche, oder muss ich noch cos 2 machen ? O.o |
AW: [Festgefressen] Konvexhülle eines polygon berechnen
Liste der Anhänge anzeigen (Anzahl: 1)
Der Kosinussatz hat mit dem Problem leider nichts zu tun. Da du dich dagegen so sträubst, vermute ich mal dass du in der Schule noch keine Vektorrechnung hattest.
Das ist aber auch gar nicht so schlimm, schließlich habe ich dir in dem anderen Thread ja schon diese Formel verlinkt: ![]() Dort kannst du einfach die x und y Koordinaten deiner drei Punkte einsetzen und bekommst eine eindeutige Lösung. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz