两点计算角度
/// <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; }