QQ登录

只需一步,快速开始

通过外接矩形与角度计算椭圆点坐标方法

[ 复制链接 ]
123.jpeg
现已知一个矩形参数,也就是矩形左上角X,Y,右下角X1,Y1坐标。
传递一个任意角度,计算这个角度在矩形内接椭圆上的点坐标。
方法很多,直接用流行的开源库,调用库函数就好。
由于自己想实现功能极为简单,直接写个函数。
这里分享出这个实现函数、用MFC和C#两语言写。
C#语言的:
  1. /// <summary>
  2.         /// 椭圆求点公式
  3.         /// </summary>
  4.         /// <param name="lpRect">椭圆边框</param>
  5.         /// <param name="angle">角度</param>
  6.         /// <returns></returns>
  7.         public Point GetArcPoint(Rectangle lpRect, float angle)
  8.         {
  9.             Point pt = new Point();
  10.             double a = lpRect.Width / 2.0f;
  11.             double b = lpRect.Height / 2.0f;
  12.             if (a == 0 || b == 0)
复制代码
MFC写的;
  1. /// <summary>
  2. /// 椭圆求点公式
  3. /// </summary>
  4. /// <param name="lpRect">椭圆外接矩形</param>
  5. /// <param name="angle">角度</param>
  6. /// <returns></returns>
  7. CPoint GetArcPoint(CRect lpRect, float angle)
  8. {
  9.          CPoint pt;
  10.         double a = lpRect.Width() / 2.0f;
  11.         double b = lpRect.Height() / 2.0f;
  12.         if (a == 0 || b == 0)
  13.                 return CPoint(lpRect.left, lpRect.top);

  14.         //弧度
  15.         double radian = angle * PI / 180.0f;

  16.         //获取弧度正弦值
  17.         double yc = sin(radian);
  18.         //获取弧度余弦值
  19.         double xc = cos(radian);
  20.         //获取曲率  r = ab/\Sqrt((a.Sinθ)^2+(b.Cosθ)^2
  21.         double radio = (a * b) / sqrt(pow(yc * a, 2.0) + pow(xc * b, 2.0));

  22.         //计算坐标
  23.         double ax = radio * xc;
  24.         double ay = radio * yc;
  25.         pt.x = (int)(lpRect.left + a + ax);
  26.         pt.y = (int)(lpRect.top + b + ay);
  27.         return pt;
  28. }
复制代码


调用部分
CRect rc(12,34,56,78);
WORD wStartAngle = 21;
wStartAngle =  360 - wStartAngle;
CPoint StartPoint = GetArcPoint(rc, wStartAngle);//

回复

使用道具 举报

快速回复 返回列表 客服中心 搜索