1.数学知识
平面直角坐标系(也称笛卡尔坐标系)与极坐标系之间的换算关系
{ X = ρ cos ( θ ) Y = ρ sin ( θ ) \left\{ \begin{aligned} X & = \rho \cos( \theta ) \\ Y & = \rho \sin( \theta ) \\ \end{aligned} \right. {XY=ρcos(θ)=ρsin(θ)
其中:
X
X
X表示在平面直角坐标系中的横坐标
Y
Y
Y表示在平面直角坐标系中的纵坐标
ρ
\rho
ρ表示在极坐标中的极径
θ
\theta
θ表示在极坐标中的极角
2核心代码:
public Polar_y TestMethod1(Rect_v rv) //输入一个结构体(x,y)点(笛卡尔坐标系)的坐标
{
Polar_y pv;
pv.magnitude = Math.Sqrt(rv.x * rv.x + rv.y * rv.y);//开根
if (pv.magnitude == 0)//位于极点 magnitude表示极径
pv.angle = 0.0; //angle 表示极角
else
pv.angle = (180 / (4 * Math.Atan(1))) * Math.Atan2(rv.y, rv.x);//atan2()返回弧度值,此为转换为角度的公式
return pv; //返回一个结构体,包括极角和极径
}
3 完整可运行代码
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MathNet.Numerics;
//namespace PolarCoordinates
//{
public struct Polar_y
{
public double magnitude;//与极点的距离
public double angle;//角度
};
public struct Rect_v
{
public double x;
public double y;
};
[TestClass]
public class UnitTest
{
[TestMethod]
public Polar_y TestMethod1(Rect_v rv) //输入数一个结构体(x,y)点的坐标
{
Polar_y pv;
pv.magnitude = Math.Sqrt(rv.x * rv.x + rv.y * rv.y);//开根
if (pv.magnitude == 0)//位于极点
pv.angle = 0.0;
else
pv.angle = (180 / (4 * Math.Atan(1))) * Math.Atan2(rv.y, rv.x);//atan2()返回弧度值,此为转换为角度的公式
return pv; //返回一个结构体,包括极角和极径
}
}
public class Polar
{
public static void Main(String[] args)
{
Rect_v input;
Polar_y result;
input.x = 2.0;
input.y = 3.0;
UnitTest unit = new UnitTest();
result=unit.TestMethod1(input);
Console.WriteLine(result.angle);
Console.WriteLine(result.magnitude);
Console.ReadKey();
}
}
//}