@Scarabol:
Zuerstmal kann ich etwas vereinfachen, ich hattte, als es nicht direkt klappte etwas mit den Vorzeichen hantiert und dann is ein rest verblieben.
Es geht auch so:
Zuerst errechne ich über den Satz des Pythagoras die Hypothenuse
nu teste ich, ob die auch nich 0 is (weil sonst die Rechnung unten nicht klappen würde, da wird durch laenge dividiert)
Da ASin nur Werte zwischen -#Pi/2 und #Pi/2 ausgeben kann, muss ich
zuerst schauen, ob wir uns in der linken (x<0) oder der rechten Hälfte (x>0) des kreises befinden. x entspricht einem vielfachen des Cosinus.
Da wir auf der Rechten hälfte einen Sprung im System haben (358,359,
0)

, muss man hier noch prüfen, ob y größer oder kleiner ist.
Code: Alles auswählen
If y>0
winkel.f=ASin(y/laenge)*180/(#PI)
Else
winkel.f=360+ASin(y/laenge)*180/(#PI)
EndIf
Man könnte es auch zusammenschneidern als
Code: Alles auswählen
winkel.f=360+Asin(y/laenge)*180/#Pi
if winkel>360
winkel=winkel-360
endif
Tja, ansonsten die Linke Seite abarbeiten, bei der man halt sagen muss, dass 180 genau im Mittelpunkt der ASin-Funktionswerte liegt und wenn allet schief läuft, ist der Winkel halt 0.
Code: Alles auswählen
Else
winkel.f=180-ASin(y/laenge)*180/(#PI)
EndIf
ProcedureReturn winkel.f
Else
ProcedureReturn 0
EndIf
EndProcedure
Und was die Formel an sich angeht:
y/laenge entspricht dem Sinus des Dreiecks. und da der Einheitskreis nen umfang von 2*Pi hat bzw. ein Kreis allgemein 360° hat, die ASin-Funktion Bogenmaßwerte, sprich Werte des Einheitskreises ausgibt, erhält man den Winkel aus
Asin(Sinus)*360/2*#Pi. Und das lässt sich kürzen zu ASin(Sinus)*180/#Pi
Soweit alles verstanden? Gut, ich nämlich jetzt auch
