Rechenproblem

Status
Es sind keine weiteren Antworten möglich.

PitWi

Aktives Mitglied
Ich hab mir für ein Softwareprojekt "Astronomical Algorithms" von Meeus zugelegt. Leider enthält das Buch Formeln nur in mathematischer Schreibweise und ist auch wegen fehlender Angaben zur Datenreduktion für Programmierer nicht sonderlich gut geeignet.

Jedenfalls hab ich folgendes Problem:
Die Formel für die RA Pos. der Sonne lautet
tan(RA)=(cos(e)*sin(t))/cos(t)
also
RA=atan((cos(e)*sin(t))/cos(t))
e ... Winkel der Ekliptik
t ... wahrer Längenwinkel der Sonne

Wenn ich nun eine Reihe über 365 Tage berechne, hat die Liste ein "Loch" zw. 90° (3h) und 270° (9h), also nach 89,9 kommt 270. Warum? Wo liegt der Fehler? e und t haben stets plausible Werte. Dass ich Winkel in Rad eingeben muss, hab ich berücksichtigt.

 
Du hast völlig Recht, atan2 bringts!
Vielen Dank!
Und man sollte bei Meeus wirklich ALLES lesen, ist dort nämlich auch kurz erwähnt. :pfeif:

Kannst du mir vielleicht noch kurz den Unterschied zw. atan und atan2 erklären?
 
Zitat von PitWi:
Du hast völlig Recht, atan2 bringts!
Vielen Dank!
Und man sollte bei Meeus wirklich ALLES lesen, ist dort nämlich auch kurz erwähnt

Naja, ALLES ist sicher übertrieben, aber ein paar Zeilen vor und zurück sollte schon helfen. Da steht nämlich (in Deiner Nomenklatur):

"Formula (25.6) may of course be transformed to tan RA = cos e * tan t, but then it must be remembered that RA must be in the same quadrant as t. However, if the ATN2 function is available in the programming language, it is better to leave formula (25.6) unchanged and to apply the ATN2 function to the numerator and the denominator of the fraction: RA = ATN2 (cos e * sin t, cos t)."

Steht also alles direkt auch schon bei Meeus, wobei sein "ATN2(x,y)" und "atan2(x,y)" natürlich dasselbe ist ...

 
Hallo Gemeinde,

Vorsicht ist geboten! ;)
In Flash zB ist Math.atan2 so zu verwenden, dass zuerst y, dann x übergeben wird (Auch in C/C++ oder PHP ist das meines Wissens so), also

Math.atan2(y,x);

und NICHT

Math.atan2(x,y);

Freilich kann man jetzt diskutieren, ob man vom Quotienten den Nenner x und den Zähler y nennt, oder eben umgekehrt. Wollte das nur erwähnt haben. Also Vorsicht, was welcher Wert ist.

Zu Meeus: Es ist an allen Stellen, wo das mit dem 2. Tangens relevant wird meist im Text ein Hinweis. So gesehen wiederholt sich der Autor oft genug, muss man aber IMHO auch.


cs,
harald

--
 
Hallo Harald,

guter Punkt, die meisten (aber nicht alle) Codes verwenden in der Tat die Konvention atan2(y,x), wobei die Reihenfolge der Argumente nicht der üblichen Reihenfolge in Koordinatenschreibweise (x,y) folgt, sondern anscheinend von der Definition tan( )=y/x inspiriert worden ist. Leider führt diese Ambivalenz immer wieder zu Verwirrungen, siehe z.B. hier

Why are the arguments to atan2 Y,X rather than X,Y?

Genau umgekehrt, also in Koordinatenkonvention (x,y), ist die Definition in

Mathematica

Also aufpassen muss man immer ...

Mit freundlichen Grüßen,
Peter


 
Meeus gibt in seinem Buch eine recht simple Antwort:
(Seite 9 oben)

tan(alpha) = A/B

wobei A der Zähler und B der Nenner sei. Die Umkehrfunktion arctan ist dann um den Winkel pi = 180° "unsicher".

Wenn aber B<0, dann addiere 180° bzw. pi.

In Flash habe ich mir gleich eine eigene Funktion "arctan2" geschrieben, weil noch dazu die Quadranten anderes gezählt werden (im UZS) als mathematisch (-UZS). Da wird's dann lustig....;)

cs,
hc

--
 
Status
Es sind keine weiteren Antworten möglich.
Zurück
Oben