工控编程吧
标题:
通过外接矩形与角度计算椭圆点坐标方法
[打印本页]
作者:
qq263946146
时间:
2022-11-16 18:14
标题:
通过外接矩形与角度计算椭圆点坐标方法
(, 下载次数: 4)
上传
点击文件名下载附件
现已知一个矩形参数,也就是矩形左上角X,Y,右下角X1,Y1坐标。
传递一个任意角度,计算这个角度在矩形内接椭圆上的点坐标。
方法很多,直接用流行的开源库,调用库函数就好。
由于自己想实现功能极为简单,直接写个函数。
这里分享出这个实现函数、用MFC和C#两语言写。
C#语言的:
/// <summary>
/// 椭圆求点公式
/// </summary>
/// <param name="lpRect">椭圆边框</param>
/// <param name="angle">角度</param>
/// <returns></returns>
public Point GetArcPoint(Rectangle lpRect, float angle)
{
Point pt = new Point();
double a = lpRect.Width / 2.0f;
double b = lpRect.Height / 2.0f;
if (a == 0 || b == 0)
复制代码
MFC写的;
/// <summary>
/// 椭圆求点公式
/// </summary>
/// <param name="lpRect">椭圆外接矩形</param>
/// <param name="angle">角度</param>
/// <returns></returns>
CPoint GetArcPoint(CRect lpRect, float angle)
{
CPoint pt;
double a = lpRect.Width() / 2.0f;
double b = lpRect.Height() / 2.0f;
if (a == 0 || b == 0)
return CPoint(lpRect.left, lpRect.top);
//弧度
double radian = angle * PI / 180.0f;
//获取弧度正弦值
double yc = sin(radian);
//获取弧度余弦值
double xc = cos(radian);
//获取曲率 r = ab/\Sqrt((a.Sinθ)^2+(b.Cosθ)^2
double radio = (a * b) / sqrt(pow(yc * a, 2.0) + pow(xc * b, 2.0));
//计算坐标
double ax = radio * xc;
double ay = radio * yc;
pt.x = (int)(lpRect.left + a + ax);
pt.y = (int)(lpRect.top + b + ay);
return pt;
}
复制代码
调用部分
CRect rc(12,34,56,78);
WORD wStartAngle = 21;
wStartAngle = 360 - wStartAngle;
CPoint StartPoint = GetArcPoint(rc, wStartAngle);//
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4