在圆的生成算法中有一种使用极坐标生成圆的算法,实际上我们可以利用极坐标方程绘制在任意位置任意弧度的圆弧。
首先,需要了解圆的极坐标方程组,如下所示
在了解圆的极坐标方程后,我们要绘制圆弧则需要
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);
}
}
注意,利用上述算法来绘制圆弧也有一个缺陷:计算量大