Question

In C the atan2 function has the following signature:

double atan2( double y, double x );

Other languages do this as well. This is the only function I know of that takes its arguments in Y,X order rather than X,Y order, and it screws me up regularly because when I think coordinates, I think (X,Y).

Does anyone know why atan2's argument order convention is this way?

Was it helpful?

Solution

Because I believe it is related to arctan(y/x), so y appears on top.

Here's a nice link talking about it a bit: Angles and Directions

OTHER TIPS

My assumption has always been that this is because of the trig definition, ie that

tan(theta) = opposite / adjacent

When working with the canonical angle from the origin, opposite is always Y and adjacent is always X, so:

atan2(opposite, adjacent) = theta

Ie, it was done that way so there's no ordering confusion with respect to the mathematical definition.

Suppose a rectangle triangle with its opposite side called y, adjacent side called x:

tan(angle) = y/x

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

It's because in school, the mnemonic for calculating the gradient
is rise over run, or in other words dy/dx, or more briefly y/x.

And this order has snuck into the arguments of arctangent functions.

So it's a historical artefact. For me it depends on what I'm thinking
about when I use atan2. If I'm thinking about differentials, I get it right
and if I'm thinking about coordinate pairs, I get it wrong.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top