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
문제는 180/2 * Math.PI 대신 180/2 * Math.PI를 사용했습니다. – Jordan
Atan2 결과를 -180 ... 180에서 0 ... 360으로 변환하려면 180으로 시프트하면됩니다. 360도 교대로 180 ... 540의 범위를 줄 수 있습니다. 180도 이동해야합니다. q = (Math.Atan2 (y, x) * 180.0/Math.PI + 180.0); (변환 오버 헤드를 없애려면 180.0과 180을 사용하십시오.) –
@RichardRobertson 아니, 그렇지 않아. 180을 추가하면 올바른 범위의 값을 얻을 수 있지만 값은 잘못된 값입니다. 당신은 내가 말한 것을 정확히 수행하고, 어떤 부정적인 가치에 360을 추가해야합니다. 음수 값만 이동하고, 그렇지 않으면 값을 변경하기 때문에 360을 이동해야합니다. 동그라미 주위의 각은 360을 기준으로 한 동등성과 비교됩니다. –