两点计算角度

/// <summary>
      /// 两点计算角度
      /// </summary>
      /// <param name="startx"></param>
      /// <param name="starty"></param>
      /// <param name="endx"></param>
      /// <param name="endy"></param>
      /// <returns></returns>
      public static double CalulateXYAnagle(double startx, double starty, double endx, double endy)
      {

                              //除数不能为0
          double tan = Math.Atan(Math.Abs((endy - starty) / (endx - startx))) * 180 / Math.PI;
          if (endx > startx && endy > starty)//第一象限
          {
              return -tan;
          }
          else if (endx > startx && endy < starty)//第二象限
          {
              return tan;
          }
          else if (endx < startx && endy > starty)//第三象限
          {
              return tan - 180;
          }
          else
          {
              return 180 - tan;
          }

      }

 

/// <summary>
      ///     计算旋转角度
      /// </summary>
      /// <param name="nowpoint"></param>
      /// <returns></returns>
      public double ComputeAngle(Point nowpoint)
      {
          //斜边长度
          double length = PointLegth(nowpoint, CentPoint);
          //对边比斜边 sin
          double hudu = Math.Asin(Math.Abs(nowpoint.Y - CentPoint.Y)/length);
          double ag = hudu*180/Math.PI;
          //第一象限90-
          if ((CentPoint.X - nowpoint.X) <= 0 && (CentPoint.Y - nowpoint.Y) >= 0)
              ag = 90 - ag;
              //第二象限90+
          else if ((CentPoint.X - nowpoint.X) <= 0 && (CentPoint.Y - nowpoint.Y) <= 0)
              ag = ag + 90;
              //第三象限270-
          else if ((CentPoint.X - nowpoint.X) >= 0 && (CentPoint.Y - nowpoint.Y) <= 0)
              ag = 270 - ag;
              //第四象限270+
          else if ((CentPoint.X - nowpoint.X) >= 0 && (CentPoint.Y - nowpoint.Y) >= 0)
              ag = ag + 270;
          //偏移
          ag -= 235;
          return ag;
      }
 
      /// <summary>
      ///     计算两点间距离
      /// </summary>
      /// <param name="pa"></param>
      /// <param name="pb"></param>
      /// <returns></returns>
      public double PointLegth(Point pa, Point pb)
      {
          return Math.Sqrt(Math.Pow((pa.X - pb.X), 2) + Math.Pow((pa.Y - pb.Y), 2));
      }

 

posted @   ZN大叔  阅读(7048)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示