MFC中绘制任意弧度的圆弧

在圆的生成算法中有一种使用极坐标生成圆的算法,实际上我们可以利用极坐标方程绘制在任意位置任意弧度的圆弧。
首先,需要了解圆的极坐标方程组,如下所示
圆的极坐标方程
在了解圆的极坐标方程后,我们要绘制圆弧则需要
1. 指定θ的范围
2. 指定圆弧的起始位置
3. 确定圆弧所在圆的圆心和半径

除了上述这些必备条件之外,我添加了一个参数COLORREF color用来指定所绘制圆弧的颜色。
下面是绘制圆弧的代码

//在任意位置绘制不同弧度的圆弧
//center为圆心,pStart为圆弧起点坐标,radian为圆弧跨越的弧度范围,radius为半径
void DrawArc(CPoint center, CPoint pStart, double radian, int radius,COLORREF color)
{
	double angle, max;
	double dy = (double)pStart.y - (double)center.y, dx = (double)pStart.x - (double)center.x;
	angle = atan2(dy,dx);//求起始点对应的的弧度
	max = angle + radian;
	int x = pStart.x,y = pStart.y;
	SetPixel(x, y, color);
	//PI为定义的宏,其值为3.1415926
	//ROUND(x)也为定义的宏,用来四舍五入,其定义为#define ROUND(a) (int)(a+0.5)
	for (angle+=PI/(double)180; angle < max; angle += PI / (double)180)
	{
		x = center.x + radius * cos(angle);
		y = center.y + radius * sin(angle);
		SetPixel(ROUND(x), ROUND(y), color);
	}
}

注意,利用上述算法来绘制圆弧也有一个缺陷:计算量大

发布了16 篇原创文章 · 获赞 18 · 访问量 4132

猜你喜欢

转载自blog.csdn.net/qq_42103091/article/details/102106708
今日推荐