2009-06-25 21 views
18

In C la funzione atan2 ha la seguente firma:Perché gli argomenti su atan2 Y, X piuttosto che X, Y?

double atan2(double y, double x); 

Altre lingue fanno pure. Questa è l'unica funzione che conosco che prende i suoi argomenti in ordine Y, X piuttosto che X, Y, e mi rovina regolarmente perché quando penso alle coordinate, penso (X, Y).

Qualcuno sa perché la convenzione di ordine di argomenti di atan2 è in questo modo?

+0

Perché viene contrassegnato come indipendente dal linguaggio? –

+0

@mgroves Succede in molte lingue –

+0

Perché lo stesso formato appare in MOLTE lingue. Dalla voce del wiki atan2: "Risale almeno al linguaggio di programmazione FORTRAN e si trova attualmente nella libreria standard Math.h del linguaggio di programmazione C, nella libreria Java Math, nella classe Math statica C# e altrove. le lingue, come Perl, includono la funzione atan2 in stile C. [1] " – CookieOfFortune

risposta

23

Perché credo che sia correlato a arctan (y/x), quindi appare in alto.

Ecco un bel link parlarne un po ': Angles and Directions

+0

Qualche programmatore nella notte dei tempi ha deciso che aveva senso in quel modo. (E perché è 'atan2'? Perché non 'angle_for'? Ero solito pensare che fosse arctangent-quadrato ...) –

+0

Penso che abbia molto senso ... – CookieOfFortune

+2

Sì, arctan (y/x) succede così spesso che se arctan2 avesse preso x, mi avrebbe rovinato tutto il tempo.È bello cambiare la barra in una virgola. – Nosredna

11

La mia ipotesi è sempre stata che questo è a causa della definizione trig, vale a dire che

tan(theta) = opposite/adjacent 

Quando si lavora con l'angolo canonica dal origine, opposto è sempre Y e adiacente è sempre X, quindi:

atan2(opposite, adjacent) = theta 

Cioè, è stato fatto così c'è solo confusione ordinamento con ri spettano alla definizione matematica.

+2

aumento su run .... – jlarson

+0

Soh Cah Toa è il mio pnemonic :) –

+0

good'ol geometria di grado 7, lo uso ancora a volte. – CookieOfFortune

1

Supponiamo un triangolo rettangolo con il lato opposto chiamato y, lato adiacente chiamato x:

tan (angolo) = y/x

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

0

è perché nella scuola, il mnemonico per calcolare il gradiente
è dislivello durante la corsa, o in altre parole dy/dx, o più brevemente y/x.

E questo ordine ha intrufolato gli argomenti delle funzioni arcotangenti.

Quindi è un artefatto storico. Per me dipende da cosa sto pensando
su quando uso atan2. Se penso ai differenziali, ho capito bene
e se penso a coppie di coordinate, ho sbagliato.

+0

Mi chiedo se sarebbe più chiaro se le variabili fossero etichettate come dx e dy? – CookieOfFortune

Problemi correlati