atan2
#プログラミング #数学
atan2 (アークタンジェント2) は、逆正接関数の引数を2つ取れるようにして、$ [-\pi, \pi)の終域で角度を取れるようにした関数
プログラミングの文脈でよく登場する
atan2 という名前で利用できたり、あるいはオーバーロードによって atan が2引数でも使えたり
一番最初に atan2 を導入したのはFortranらしい
https://ja.wikipedia.org/wiki/Atan2
定義
atan2を真面目に定義しようとすると以下の通り:
$ {\rm atan2}(y, x) = \left\{ \begin{aligned} & {\rm tan}^{-1} \left( \frac{y}{x} \right) && {\rm if}\ x > 0, \\ & {\rm tan}^{-1} \left( \frac{y}{x} \right) + \pi && {\rm if}\ x < 0\ {\rm and}\ y \geq 0, \\ & {\rm tan}^{-1} \left( \frac{y}{x} \right) - \pi && {\rm if}\ x < 0\ {\rm and}\ y < 0, \\ & \frac{\pi}{2} && {\rm if}\ x = 0\ {\rm and}\ y > 0 \\ & -\frac{\pi}{2} && {\rm if}\ x = 0\ {\rm and}\ y < 0 \\ & {\rm undefined} && {\rm if}\ x = 0\ {\rm and}\ y = 0 \end{aligned} \right.
直感的な理解
右手の親指と人差し指を開き、親指と人差し指の向きが直交するようにし、銃の形を作ります
人差し指を分子(第1引数)の軸の向き・親指を分母(第2引数)の軸の向きにします
例えば、$ {\rm atan2}(y, x)の場合、手の平が見える向きで人差し指は上を指し示しているはず
親指の方向に点があれば、それは$ {\rm atan2}(y, x) \approx 0
人差し指の方向に点があれば、それは$ {\rm atan2}(y, x) \approx \pi/2
引数順
$ {\rm atan2}(x, y)の宗派と$ {\rm atan2}(y, x)の宗派がある
Mathematica・Wolfram|Alpha・Microsoft Excel・Google Spreadsheetsなどは$ {\rm atan2}(x, y)
それ以外はだいたい$ {\rm atan2}(y, x)
学術論文等でも$ {\rm atan}(y, x)が用いられることが多いっぽい