座標変換などでよく使われる、xとyの二値から角度を求めるような場合にはAtan2メソッドを使用することができます。 Atan2メソッドは-π≦θ≦πの範囲で結果を返します。 また、Atanメソッドとは異なり、Atan2メソッドは引数の象限を考慮します。 そのため、引数y, xの値によってはAtan2メソッドとAtanメソッドで異なる結果となる場合があります。 また、Atan2メソッドでは、引数をy, xの順で指定する点に注意してください。
Atan2メソッドを使って座標(x, y)とx軸のなす角を求める
using System;
class Sample {
static void Main()
{
double x, y;
x = 1.0; y = 1.0;
Console.WriteLine("({0}, {1}) : {2}", x, y, Math.Atan2(y, x));
Console.WriteLine("({0}, {1}) : {2}", x, y, Math.Atan(y / x));
Console.WriteLine();
x = 0.0; y = 1.0;
Console.WriteLine("({0}, {1}) : {2}", x, y, Math.Atan2(y, x));
Console.WriteLine("({0}, {1}) : {2}", x, y, Math.Atan(y / x));
Console.WriteLine();
x = -1.0; y = -1.0;
Console.WriteLine("({0}, {1}) : {2}", x, y, Math.Atan2(y, x));
Console.WriteLine("({0}, {1}) : {2}", x, y, Math.Atan(y / x)); // AtanメソッドとAtan2メソッドで結果が異なる
Console.WriteLine();
}
}
実行結果
(1, 1) : 0.785398163397448 (1, 1) : 0.785398163397448 (0, 1) : 1.5707963267949 (0, 1) : 1.5707963267949 (-1, -1) : -2.35619449019234 (-1, -1) : 0.785398163397448
複素数を扱う場合はComplex構造体を使うことができます。 Complex構造体では直交形式・極座標形式の複素数を扱い、また相互に変換することもできます。 詳しくは複素数型を参照してください。