2011-10-23 14 views
0

問題は、距離を見つけるのではなく、Atan()でラジアンを見つけて度に変換することです。長方形の点を極座標に変換する

using System; 
class Program 
{ 
    static void Main() 
    { 
     double xCoord =0, yCoord=0 ;  
     //accessing methods 
     getUserInput(ref xCoord, ref yCoord); 
     CalulatePolarCoords(ref xCoord, ref yCoord); 
     outputCords(ref xCoord, ref yCoord); 
     Console.ReadLine(); 
    }//End Main() 

    static void getUserInput(ref double xc, ref double yc) 
    { 
    //validating input 
     do 
     { 
      Console.WriteLine(" please enter the x cororidnate must not equal 0 "); 
      xc = double.Parse(Console.ReadLine()); 
      Console.WriteLine("please inter the y coordinate"); 
      yc = double.Parse(Console.ReadLine()); 
     if(xc <= 0) 
    Console.WriteLine(" invalid input"); 
     } 
     while (xc <= 0); 
      Console.WriteLine(" thank you"); 

    } 

    //calculating coords 
    static void CalulatePolarCoords(ref double x , ref double y) 
    { 
     double r; 
     double q; 
     r = x; 
     q = y; 
     r = Math.Sqrt((x*x) + (y*y)); 

     q = Math.Atan(x/y); 

    x = r; 
    y = q; 
    } 
    static void outputCords(ref double x, ref double y) 
    { 
     Console.WriteLine(" The polar cordinates are..."); 
     Console.WriteLine("distance from the Origin {0}",x); 
     Console.WriteLine(" Angle (in degrees) {0}",y); 
     Console.WriteLine(" press enter to continute"); 

    } 
}//End class Program 

答えて

4

ここでAtan2を使用します。

q = Math.Atan2(y, x); 

180/Math.PIで倍数に変換してください。

これは360の範囲0でそれをしたいなら、あなたは私も強くおすることをお勧めします360

ことにより、任意の負の角度をシフトする必要があります180にあなたの範囲-180で結果が得られます直交座標で渡すのと同じパラメーターで極座標を返しません。このように、あなたの関数を作成します。

static void CalculatePolarCoords(double x, double y, out double r, out double q) 

あなたoutputCoords方法も間違ってrefパラメータを使用しています。メソッドに渡された値にはrefのパラメータを使用し、変更した後、呼び出し元に戻す必要があります。

+1

私は180/Math.PIの代わりに180/2 * Math.PIを使用していましたか? – Jordan

+0

Atan2の結果を-180 ... 180から0 ... 360に変換するには、 360度シフトすると、180 ... 540の範囲が得られます。q =(Math.Atan2(y、x)* 180.0/Math.PI + 180.0)だけシフトする必要があります。 (可能な変換オーバーヘッドを除去するために180.0対180を使用)。 –

+0

@RichardRobertsonいいえ、そうではありません。 180を追加すると適切な範囲の値が得られますが、値は間違った値になります。あなたは私が言うことを正確に行う必要があり、負の値に360を加える必要があります。負の値だけをシフトします。それ以外の場合は、値を変更しているため、360をシフトする必要があります。円の周りの角度は、等価モジュロ360で比較されることに注意してください。 –

関連する問題