1.输入圆的半径R。
2.计算初始值d=1-R、x=0、y=R。
3.绘制点(x,y)及其在八分圆中的另外七个对称点。
4.判断d的符号。若d<0,则先将d更新为d+2x+3,再将(x,y)更新为(x+1,y);否则先将d更新为d+2(x-y)+5,再将(x,y)更新为(x+1,y-1)。
5.当x<y时,重复步骤3和4。否则结束
#include <graphics.h>
#include <iostream>
#include<sstream>
using namespace std;
void Circle_Midpoint(int x, int y, int r, int color){
int Cx=0, Cy=r, d=1-r;//计算初始值d=1-R、x=0、y=R
while(Cx<=Cy){//当x<y时,重复步骤3和4。否则结束
//绘制点(x,y)及其在八分圆中的另外七个对称点
putpixel(x+Cx,y+Cy,BLACK);
putpixel(x+Cx,y-Cy,BLACK);
putpixel(x-Cx,y+Cy,BLACK);
putpixel(x-Cx,y-Cy,BLACK);
putpixel(x+Cy,y+Cx,BLACK);
putpixel(x+Cy,y-Cx,BLACK);
putpixel(x-Cy,y+Cx,BLACK);
putpixel(x-Cy,y-Cx,BLACK);
if(d < 0)//若d<0,则先将d更新为d+2x+3,再将(x,y)更新为(x+1,y)
d+=2*Cx+3;
else//否则先将d更新为d+2(x-y)+5,再将(x,y)更新为(x+1,y-1)
d+=2*(Cx-Cy)+5,Cy--;
Cx++;
}
}
int main(){
initgraph(400,400,INIT_RENDERMANUAL);
setbkcolor(WHITE);
stringstream str;
//输入圆心坐标和半径
int x,y,r;
char st1[50];
inputbox_getline("input","Input X Y R", st1,50);
str<<st1;
str>>x>>y>>r;
Circle_Midpoint(x,y,r,BLACK);
getch();
closegraph();
return 0;
}