Cでは、atan2関数には次のシグネチャがあります。
double atan2( double y, double x );
他の言語もこれを行います。これは私が知っている唯一の関数であり、引数をX、Yの順序ではなく、Y、Xの順序で取ります。座標を考えるとき、(X、Y)と思うので、定期的に失敗します。
atan2の引数の順序の規則がこのようになっている理由を誰かが知っていますか?
Cでは、atan2関数には次のシグネチャがあります。
double atan2( double y, double x );
他の言語もこれを行います。これは私が知っている唯一の関数であり、引数をX、Yの順序ではなく、Y、Xの順序で取ります。座標を考えるとき、(X、Y)と思うので、定期的に失敗します。
atan2の引数の順序の規則がこのようになっている理由を誰かが知っていますか?
arctan(y / x)に関連していると思うので、yが一番上に表示されます。
これについて少し話している素敵なリンクがあります:角度と方向
私の仮定は、これは三角法の定義によるもの、つまり
tan(theta) = opposite / adjacent
原点からの標準的な角度で作業する場合、反対側は常にYであり、隣接するものは常にXであるため、次のようになります。
atan2(opposite, adjacent) = theta
つまり、それはそのように行われたので、数学的な定義に関して順序の混乱はありません。
反対側がyと呼ばれ、隣接する側がxと呼ばれる直角三角形を想定します。
tan(角度)= y / x
arctan(tan(angle))= arctan(y / x)
これは、学校では、勾配を計算するためのニーモニックがランオーバーラン
、
つまりdy / dx、またはより簡単に言えばy/xであるためです。
そして、この順序は、アークタンジェント関数の引数に忍び込んでいます。
つまり、これは歴史的な遺物です。
私にとって、それは私が使用するときに私が何を考えているかに依存しますatan2
。微分について考えている
場合は正しく、座標ペアについて考えている場合は間違っています。
順序はExcelではatan2(X、Y)なので、逆の順序はプログラミングの問題だと思います。atan(Y / X)は、「n」と「(」の間に「2」を入れ、「/」を「、」に置き換えることで、簡単にatan2(Y、X)に変更できます。逆の順序では4つの操作が必要になり、一部の操作はより複雑になります(カットアンドペースト)。
私はよくExcelで計算を行い、それを.NETに移植するので、atan2でハングアップすることがあります。atan2を何らかの方法で標準化できれば最高です。
atan2の引数を逆にすると便利です。そうすれば、極角を計算するときに引数を反転することを心配する必要はありません。Mathematicaに相当するものはまさにそれを行います:https ://reference.wolfram.com/language/ref/ArcTan.html
昔、FORTRANには、あまり便利ではない引数の順序を持つATAN2関数がありました。このリファレンスマニュアルでは、(やや不正確に)arctan(arg1 / arg2)と記述されています。
最初の作成者が(多かれ少なかれ)arctan(arg1 / arg2)であるatan2(arg1、arg2)に固執し、決定がFORTRANからC、C ++、Python、Java、JavaScriptに盲目的にコピーされた可能性があります。