Hilfe
Parameter
Y# | vertikaler Abstand (Gegenkathete) |
X# | horizontaler Abstand (Ankathete) |
Rückgabewert
Es wird ein Winkel in Grad zurückgeliefert. Es sind alle Winkel im Berech von 0 bis 360° möglich (bzw. -180° bis 180°). Die Grafik zeigt den Zusammenhang zwischen Winkel und Tangenswert.
Beschreibung
Diese Funktion berechnet den Winkel aus X- und Y-Längen. Es ist somit die erweiterte Tangensfunktion. Beachte, dass diese Funktion etwas anders als ATAN funktioniert, und keine Arcustangens-Funktion ist.
Der Winkel wird nicht aus einem Tangenswert ermittelt, sondern aus den zwei Katheten eines rechtwinkligen Dreiecks.
Diese Funktion kann einen Winkel im Umkreis von -180° bis 180° berechnen. Dadurch ist es wesentlich einfacher, als die ATan-Funktion, wo man erst durch logische Überlegungen den Winkel ausrechnen kann. Um einen vollen Winkel im Bereich von 0° bis 360° auszurechnen, muss man nur diese Formel anwenden:
Winkel# = (ATan2(y#, x#) + 360) MOD 360
Beispiel
Dieses Beispiel zeigt zwei bewegende Kreise. Der erste und schnellere Kreis läuft quer über dem ganzen Bildschirm. Der zweite ist langsamer und versucht ständig den ersten über möglicht direkten Weg zu erreichen:
SetBuffer BackBuffer()
SeedRnd MilliSecs()
Dim x(1), y(1), w(1), s(1)
x(0) = Rand(0, 639)
y(0) = Rand(0, 639)
w(0) = Rand(0, 359)
s(0) = 3
x(1) = Rand(0, 639)
y(1) = Rand(0, 639)
s(1) = 2
While KeyHit(1) = 0
Color 0, 0, 0
Rect 0, 0, 640, 480
Color 255, 255, 255
w(0) = w(0) + Rand(-10, 10)
minx = x(0) - x(1)
miny = y(0) - y(1)
minx2 = -(x(1) - 640 - x(0))
miny2 = -(y(1) - 480 - y(0))
minx3 = x(0) - 640 - x(1)
miny3 = y(0) - 480 - y(1)
If Abs(minx2) < Abs(minx) Then minx = minx2
If Abs(miny2) < Abs(miny) Then miny = miny2
If Abs(minx3) < Abs(minx) Then minx = minx3
If Abs(miny3) < Abs(miny) Then miny = miny3
w(1) = ATan2(miny, minx)
For i = 0 To 1
x(i) = x(i) + Cos(w(i)) * s(i)
y(i) = y(i) + Sin(w(i)) * s(i)
If x(i) < 0 Then x(i) = 640 + x(i)
If x(i) > 639 Then x(i) = x(i) - 640
If y(i) < 0 Then y(i) = 480 + y(i)
If y(i) > 479 Then y(i) = y(i) - 480
Oval x(i) - 5,y(i) - 5, 10, 10, 1
Next
Flip
Wend
WaitKey()
End
Siehe auch

