35 Stimmen

Warum sind die Argumente für atan2 Y,X und nicht X,Y?

In C hat die Funktion atan2 die folgende Signatur:

double atan2( double y, double x );

Andere Sprachen tun dies auch. Dies ist die einzige Funktion, die ich kenne, die ihre Argumente in der Reihenfolge Y,X und nicht X,Y aufnimmt, und das bringt mich regelmäßig durcheinander, denn wenn ich an Koordinaten denke, denke ich (X,Y).

Weiß jemand, warum atan2's Argument Reihenfolge Konvention ist so?

0 Stimmen

Warum ist dies als sprachenunabhängig gekennzeichnet?

0 Stimmen

@mgroves Das passiert in vielen Sprachen

0 Stimmen

Denn dasselbe Format gibt es in einer Vielzahl von Sprachen. Aus dem atan2-Wiki-Eintrag: "Es reicht mindestens bis zur Programmiersprache FORTRAN zurück und ist derzeit in der Standardbibliothek math.h der Programmiersprache C, in der Java-Math-Bibliothek, in der statischen Math-Klasse von C# und anderswo zu finden. Viele Skriptsprachen, wie z. B. Perl, enthalten die atan2-Funktion im Stil von C.[1]"

30voto

CookieOfFortune Punkte 13422

Ich glaube nämlich, dass es mit arctan(y/x) zusammenhängt, so dass y ganz oben erscheint.

Hier ist ein schöner Link, der ein wenig darüber berichtet: Winkel und Richtungen

0 Stimmen

Irgendein Programmierer hat in grauer Vorzeit beschlossen, dass das so sinnvoll ist. (Und warum heißt es 'atan2'? Warum nicht 'angle_for'? Ich dachte immer, es hieße Arkustangens zum Quadrat...)

2 Stimmen

Ja, arctan(y/x) kommt so oft vor, dass arctan2, wenn es x,y nehmen würde, mich ständig durcheinander bringen würde. Es ist schön, wenn man den Schrägstrich einfach in ein Komma umwandeln kann.

0 Stimmen

@alex - es heißt atan2, weil es 2 Argumente braucht, um es von atan() zu unterscheiden, das erwartet, dass man die y/x-Division vorher macht.

13voto

Not Sure Punkte 5623

Ich bin immer davon ausgegangen, dass dies auf die Trigonometrie-Definition zurückzuführen ist, d. h. dass

tan(theta) = opposite / adjacent

Wenn man mit dem kanonischen Winkel vom Ursprung aus arbeitet, ist der gegenüberliegende Winkel immer Y und der angrenzende Winkel immer X, also:

atan2(opposite, adjacent) = theta

Das heißt, es wurde so gemacht, damit es keine Verwechslungen mit der mathematischen Definition gibt.

0 Stimmen

Soh Cah Toa ist meine Eselsbrücke :)

2 Stimmen

7. Klasse? Sie müssen nicht auf eine öffentliche Schule gegangen sein :)

1voto

Marco Mustapic Punkte 3859

Angenommen, ein rechtwinkliges Dreieck hat eine gegenüberliegende Seite namens y und eine angrenzende Seite namens x:

tan(Winkel) = y/x

arctan(tan(Winkel)) = arctan(y/x)

1voto

Rhythmic Fistman Punkte 32892

Das liegt daran, dass in der Schule die Eselsbrücke für die Berechnung der Steigung
ist Aufstieg über Lauf oder mit anderen Worten dy/dx oder kurz y/x.

Und diese Ordnung hat sich in die Argumente der Arkustangens-Funktionen eingeschlichen.

Es ist also ein historisches Artefakt. Für mich hängt es davon ab, woran ich denke
darüber, wann ich die atan2 . Wenn ich über Differentiale nachdenke, habe ich es richtig gemacht
und wenn ich über Koordinatenpaare nachdenke, verstehe ich es falsch.

0 Stimmen

Ich frage mich, ob es klarer wäre, wenn die Variablen mit dx und dy beschriftet wären?

1voto

Wick Renner Punkte 1

Die Reihenfolge ist atan2(X,Y) in Excel, also denke ich, dass die umgekehrte Reihenfolge eine Sache der Programmierung ist. atan(Y/X) kann leicht in atan2(Y,X) geändert werden, indem man eine '2' zwischen das 'n' und das '(' setzt und das '/' durch ein ',' ersetzt, nur 2 Operationen. Die umgekehrte Reihenfolge würde 4 Operationen erfordern und einige der Operationen wären komplexer (Ausschneiden und Einfügen).

Ich arbeite meine Berechnungen oft in Excel aus und portiere sie dann nach .NET, daher bleibe ich manchmal bei atan2 hängen. Es wäre am besten, wenn atan2 auf die eine oder andere Weise standardisiert werden könnte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X