/// <summary>
/// 将角度转换成弧度
/// </summary>
/// <param name="angle">角度</param>
/// <returns></returns>
public static double AngleToRadian(double angle)
{
return angle * Math.PI / 180;
}
/// <summary>
/// 实现两个起始角度相差90度,且方向相反的直角坐标系的角度之间的相互转换。
/// 例如 将以正北为0,顺时针为正的角度,转换到 以X轴为0 ,逆时针为正的角度
/// </summary>
/// <param name="angle">角度</param>
/// <returns></returns>
public static double CartesianCoordinatePlaneChange90(double angle)
{
return ((360 - angle) + 90) % 360;
}
/// <summary>
/// 将10进制的经或纬席转换成 度 分 秒
/// </summary>
/// <param name="d">经 或 纬 度</param>
/// <returns></returns>
public static List<int> XYtoDFM(double d)
{
int du = (int)d;
double num2 = (d - du) * 60.0;
int fen = (int)num2;
num2 = (num2 - fen) * 60.0;
int miao = (int)num2;
return new List<int>() { du, fen, miao };
}
/// <summary>
/// 将10进制的经或纬席转换成 度 分 秒
/// </summary>
/// <param name="lonlat">经度 或纬度</param>
/// <param name="d">度</param>
/// <param name="m">分</param>
/// <param name="s">秒</param>
public static void LonLatToDMS(double lonlat, out int d, out int m, out int s)
{
d = (int)lonlat;
m = (int)((lonlat - d) * 60.0);
s = (int)((((lonlat - d) * 60.0) - m) * 60.0);
}
/// <summary>
/// 将度分秒转换成 小数度格式
/// </summary>
/// <param name="d">度</param>
/// <param name="m">分</param>
/// <param name="s">秒</param>
/// <returns></returns>
public static double DMSToLonLat(double d, double m, double s)
{
return (d + (m / 60.0)) + (s / 3600.0);
}
/// <summary>
/// 在直角从标系中,以X轴为0,逆时针为正。根据两点计算经的方向(单位 弧度)
/// </summary>
/// <param name="x1">起点x1</param>
/// <param name="y1">起点y1</param>
/// <param name="x2">终点x2</param>
/// <param name="y2">终点y2</param>
/// <returns></returns>
public static double GetAngle(double x1, double y1, double x2, double y2)
{
double y = y2 - y1;
double x = x2 - x1;
return GetAngle(x,y);
}
/// <summary>
/// 在直角从标系中,以X轴为0,逆时针为正。根据正切值 Y/X 得到的弧度
/// </summary>
/// <param name="X">X</param>
/// <param name="Y">Y</param>
/// <returns></returns>
public static double GetAngle(double X, double Y)
{
double angle = 0;
if (X == 0)
{
if (Y > 0)
{
return Math.PI;
}
else if (Y < 0)
{
return Math.PI * 3 / 2;
}
else if (Y == 0)
{
return 0;
}
}
else
{
angle = Math.Atan(Y / X);
//一象限
if (X > 0 && Y > 0)
{
}
//二象限
else if (X < 0 && Y > 0)
{
angle += Math.PI;
}
//三象限
else if (X < 0 && Y < 0)
{
angle += Math.PI;
}
//四象限
else if (X > 0 && Y < 0)
{
angle += Math.PI * 2;
}
}
return angle;
}