两点计算角度

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

 

转载于:https://www.cnblogs.com/SupremeGISER/p/3284691.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值