Hilfe

ATan2

B2D B+ B3D

Aufruf

Winkel# = ATan2(Y#, X#)

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:

Graphics 640, 480, 16, 1
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

ACos, ASin, ATan, Cos, Sin, Tan

Übersicht Grundlagen Mathematik