由于安装了easyx的vc6.0只能用initgraph(x,y)初始化一个x*y的第一象限的画板。所以对于书上的画圆法我们需要稍微进行一点改变。这个算法只能画1/8的圆,其它7/8的圆只能通过对称关系得到。所以为了方便我们把圆心设置在y=x这条直线上,这样坐标(x,y)关于y=x对称的点为(y,x)。所以我们将圆心设在(R,R);
对于圆心在(R,R)的圆方程为F(x,y)=(x-R)*(x-R)+(y-R)*(y-R)-R*R;
判别式:d=F(M)=F(Xi+1,Yi-0.5)=(Xi+1-R)*(Xi+1-R)+(Yi+0.5-R)* (Yi+0.5-R)-R*R;
若d<0:d’=F(Xi+2,Yi-0.5)= d+2*(x-R)+3;
若d>0:d’=F(Xi+2,Yi-1.5)= d+2*(x-y)+5;
因为第一个像素点是(R,2R);所以d0=F(R+1,2R-0.5)= 1+(R-0.5)*(R-0.5)-R*R;
根据上述分析 即可写出中点画线法的算法:
#include
#include
#include
#include
void MidpointCircle(int R)
{
initgraph(2*R+100,2*R+100);
int x,y;
double d;
x=R;
y=2*R;
//d0的初始值
d=1+pow(R-0.5,2)-R*R;