Entwickler-Ecke

Sonstiges (Delphi) - Geometrie: Winkel zwischen zwei Punkten


Passi077 - Mo 10.04.06 15:40
Titel: Geometrie: Winkel zwischen zwei Punkten
Hi,

ich habe eigentlich ein ganz einfaches Problem:

Ich habe 2 Punkte gegeben und möchte nun den Winkel errechnen der zwischen ihnen liegt:

user defined image

Gesucht: Alpha

Gemäß des Kosinussatzes muss ich also doch folgende Formel anwenden:

alpha = arctan(b/a)

-> Mein bisheriger Code sieht folgendermaßen aus:


Delphi-Quelltext
1:
grad := radtodeg(arctan((x1-x2)/(y1-y2)));                    


Leider kommt als Ergebnis kein brauchbarer Winkel heraus. Ich finde meine Fehler leider nicht.. habe schon den Mathe Streber in meiner Klasse gefragt, der meinte das die Formel so eigentlich stimmt..


Ich hoffe Ihr könnt mir helfen (Sollte ja eigentlich einfach sein :oops: )

Grüße
Passi


Marco D. - Mo 10.04.06 15:46
Titel: Re: Geometrie: Winkel zwischen zwei Punkten
Was hat denn Tangens da zu suchen, wenn du mit dem Kosinussatz rechnest/rechnen willst:

Delphi-Quelltext
1:
grad := radtodeg(arctan((x1-x2)/(y1-y2)));                    


JayEff - Mo 10.04.06 15:46

Ich blicks nicht ganz - du sagst, du hast zwei Punkte gegeben, aber 2 Punkte definieren nicht 2 Geraden die sich in einem Winkel schneiden können - Zwei Punkte definieren lediglich EINE Gerade.
Ich würd mal auf nen Tippfehler tippen *lol wortspielalarm -.~* und du meintest "geraden"... in dem Fall... ...ist mir nicht klar, was x1 und x2 (y1,y2) sind.


beljo - Mo 10.04.06 15:51

Ich nehme an das die Differenz zwischen x1 x2 bzw y1 y2 Deine beiden gesuchten Geraden sein sollen, richtig?
könnte es sein der Wert im Bogenmaß angegeben wird?
wenn ja dann musst Du ihn Umwandeln über Dreisatz.


Passi077 - Mo 10.04.06 16:00

Hi,

also auf dem hier angefügten Bild wären meine Punkte, die ich gegeben habe A und B. Davon jeweils ein X und Y Wert, X1+Y2 bzw. X2+Y2. Gesucht ist der Winkel Alpha.

Um nun die Längen der Strecken a und b zu errechnen, um diese Werte dann in den Tangens einsetzen zu können, brauche ich die Differenz der einzelnen Werte, korrekt.

Umwandlung in Gradmaß erledigt eigentlich radtodeg..

Also um es mal hoffentlich ganz verständlich auszudrücken ein Beispiel (sorry da scheine ich Probleme mit zu haben :D):

Ich habe einen festen Punkt. Um diesen kann ich mit der Maus einen Zeiger bewegen. Der Mauszeiger ist dabei immer an der Spitze des Zeigers und die Koordinaten des festen Punktes sowie die Koordinaten des Mauszeigers sind mir bekannt, sonst nichts. Und nun möchte ich wissen, um wie viel Grad dieser Zeiger geneigt ist.. also wie ne Tachonadel die einmal rund geht ;)

Danke + Grüße
Passi

Edit:
user defined image

m+x gegeben, alpha gesucht ;)


JayEff - Mo 10.04.06 16:05

Das is ne verhandlungsbasis! dann hast du nämlich noch einen dritten Punkt gegeben, ohne den du niemals 2 geraden bekommen könntest, nämlich den Bezugspunkt, von dem aus angefangen wird, in ° zu zählen. ich vermute, der ist auf 12 Uhr. Nur, tan alpha = gegenkathete durch ankathete => a/b nicht b/a. das könnte schonmal ein fehler sein.

Skizze angefügt.
Dein gesuchter winkel ist z.B. arcsin(CA / AB) im bogenmaß.
oder eben der Inverse Cosinus von (CB / AB), ebenfalls gibt delphi hier bogenmaß an.
und letztendlich der arctan (CA / CB).


Allesquarks - Mo 10.04.06 16:58

Zwei Punkte: wo ist der Winkel??? Gut wurde schon angesprochen.

Möchtest du den Nullpunkt als Bezugspunkt nehmen.

Deine Formel oben bezieht sich wohl eher auf die Kosinusdefinition bloß leider hast du den Kehrwert dessen genommen, was du nach der Tangensdefinition hättest nehmen können.

Du kennst den Kosinussatz offenbar gar nicht, obwohl er gemäß deiner Fragestellung eventuell "unumgänglich" wär. Denn über ihn kannst du den Winkel in nicht rechtwinkligen Dreiecken berechnen. Möchtest du das??? Denn deine schriftlichen erläuterungen implizieren das. Diesen wird allerdings durch deine Grafiken widersprochen.

Die Lösung eines Problems fängt damit an es zu begreifen (wie ist es gestellt was habe ich was soll ich machen) und erst dann es zu lösen. Ich würde vorschlagen du tust das und wenn du dann nicht weiterweißt dann kannst du hier weitermachen aber am besten du beschreibst dein Problem nochmal von vorne.

Hoffe ich konnte dir helfen :-)


delfiphan - Di 11.04.06 00:00

Ohne alles detailliert gelesen zu haben: Der Tan ist pi-periodisch, nicht 2pi periodisch. Statt ArcTan(dy/dx) sollte man deswegen besser ArcTan2(y,x) aus der Unit Math verwenden. Ausserdem misst man Winkel normalerweise von der x-Achse aus, nicht von der y-Achse aus (deswegen dy/dx).