两点计算角度

 /// <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;
        }

 

posted @ 2013-08-27 13:15  SupremeGISER  阅读(606)  评论(0编辑  收藏  举报