MFC中绘制任意弧度的圆弧

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

除了上述这些必备条件以外,我添加了一个参数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);
	}
}

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