2011-10-23 5 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/2 * Math.PI 대신 180/2 * Math.PI를 사용했습니다. – Jordan

+0

Atan2 결과를 -180 ... 180에서 0 ... 360으로 변환하려면 180으로 시프트하면됩니다. 360도 교대로 180 ... 540의 범위를 줄 수 있습니다. 180도 이동해야합니다. q = (Math.Atan2 (y, x) * 180.0/Math.PI + 180.0); (변환 오버 헤드를 없애려면 180.0과 180을 사용하십시오.) –

+0

@RichardRobertson 아니, 그렇지 않아. 180을 추가하면 올바른 범위의 값을 얻을 수 있지만 값은 잘못된 값입니다. 당신은 내가 말한 것을 정확히 수행하고, 어떤 부정적인 가치에 360을 추가해야합니다. 음수 값만 이동하고, 그렇지 않으면 값을 변경하기 때문에 360을 이동해야합니다. 동그라미 주위의 각은 360을 기준으로 한 동등성과 비교됩니다. –

관련 문제