一非常奇怪的函数调用问题
用中点画圆法画圆,下面的程序中有两个模块,如果用第二个模块的话,能画出一个完整的圆,但是如果用第一个模块的话,只能画出第四象限的部分,这两个模块的功能应该都一样的啊,真不知道怎么回事.
#include <graphics.h>
/*第一个模块的开始
void CirclePoints(int x,int y,int color)
{
putpixel(x+200,y+200,color);
putpixel(y+200,x+200,color);
putpixel(-x+200,y+200,color);
putpixel(-y+200,x+200,color);
putpixel(-x+200,-y+200,color);
putpixel(-y+200,-x+200,color);
putpixel(y+200,-x+200,color);
putpixel(x+200,-y+200,color);
}
第一模块的结尾*/
/*第二个模块的开始*/
void CirclePoints(int x,int y,int color)
{
putpixel(x,y,color);
putpixel(y,x,color);
putpixel(-x,y,color);
putpixel(-y,x,color);
putpixel(-x,-y,color);
putpixel(-y,-x,color);
putpixel(y,-x,color);
putpixel(x,-y,color);
}
/*第二个模块的结尾*/
void IntMidPointCircle(int r,int color)
{
int x,y,d,i;
x=0;
y=r;
d=1-r;
CirclePoints(x+200,y+200,color);/*用第一个模块时改为CirclePoints(x,y,color);*/
while(x <y)
{
if(d <0)
d+=2*x+3;
else
{
d+=2*(x-y)+5;
y--;
}
x++;
CirclePoints(x+200,y+200,color);)/*用第一个模块时改为CirclePoints(x,y,color);*/
}
}
main()
{
int gdriver,gmode;
gdriver=DETECT;
initgraph(&gdriver,&gmode, " ");
IntMidPointCircle(30,6);
getch();
closegraph();
}
[解决办法]
putpixel(x+200,y+200,color);
putpixel((y+200),(x+200),color);
putpixel(-(x+200),(y+200),color);
putpixel(-(y+200),(x+200),color);
putpixel(-(x+200),-(y+200),color);
putpixel(-(y+200),-(x+200),color);
putpixel((y+200),-(x+200),color);
putpixel((x+200),(-y+200),color);