// FIXME void primCircleSegment(uword cx, uword cy, uword r, color c) { int x, y; real32 d; x = 0; y = r; d = (real32)5/(real32)4 - (real32)r; CirclePoints(x, y, c, cx, cy); while (y > x) { if (d < 0) { d = d + 2*x + 3; x++; } else { d = d + 2*(x-y) + 5; x++; y--; } CirclePoints(x, y, c, cx, cy); } }
//林宇强制作:根据圆的八对称关系,绘制八分之一圆弧即可通过CirclePoints绘制出整个完整圆 void MidPointCircle(int r,CDC* pDC) { int x, y; float d; x = 0; y = r; d = 1.25 - r; CirclePoints(x, y,100,100, pDC); while (x <= y) { if (d < 0) { d += 2 * x + 3; } else { d += 2 * (x - y) + 5; y--; } x++; CirclePoints(x , y,100,100, pDC); } }
/*----------------------------Bresenham算法生成圆-----------------------------*/ void DrawCircle(int centreX, int centreY, int R, int mycolor) { int x, y, delt, dHD, deltV, next; x = 0; y = R; delt = 2 * (1-R); while(y >= 0) { CirclePoints(x, y, centreX, centreY, mycolor); /* 八分法 */ if(delt < 0) { dHD = 2 * (delt + y) - 1; if(dHD <= 0) { next = 0; } else { next = 1; } } else if(delt > 0) { deltV = 2 * (delt - x) - 1; if(deltV <= 0) { next = 1; } else { next = 2; } } else { next = 1; } switch(next) { case 0: x++; delt += 2 * x + 1; break; case 1: x++; y--; delt += 2 * (x - y + 1); break; case 2:y--; delt += -2 * y + 1; break; } /*switch*/ } /*while*/ }