在圆的生成算法中有一种使用极坐标生成圆的算法,实际上咱们能够利用极坐标方程绘制在任意位置任意弧度的圆弧。
首先,须要了解圆的极坐标方程组,以下所示
在了解圆的极坐标方程后,咱们要绘制圆弧则须要
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