下図のような角度(θ)を求める際にはアークタンジェントを計算しますが、C#ではSystem.MathクラスにAtanメソッド および Atan2メソッドが用意されています。
public static double Atan( double d ) |
public static double Atan2( double y, double x ) |
AtanとAtan2の違いですが、見てわかるように、メソッドの引数が1つなのと、2つ。それとAtanがメソッドの戻り値が -π / 2 ~ π / 2 なのに対して、Atan2では -π ~ π となります。
評価プログラム
実行結果
X = 1, Y = 1
Atan:0.785398163397448
Atan2:0.785398163397448
X = 0, Y = 1
Atan:1.5707963267949
Atan2:1.5707963267949
X = 0, Y = -1
Atan:-1.5707963267949
Atan2:-1.5707963267949
X = -1, Y = -1
Atan:0.785398163397448
Atan2:-2.35619449019234
X = 0, Y = 0
Atan:NaN
Atan2:0
まとめ
AtanとAtan2はC#に限らずC言語やExcelなどでも用意されているのですが、C#以外の言語では Atan(y / x) としたときに、x = 0 の時に0除算となるため、エラーになる場合が多いのですが、C#は何事も無かったかのうように計算しています。
といっても、Atanでは戻り値が -π / 2 ~ π / 2 に制限されてしまうため、個人的には角度を求める場合は、ほとんどAtan2を使っています。
←C#へ戻る