读书人

一非常奇怪的函数调用有关问题

发布时间: 2012-03-14 12:01:12 作者: rapoo

一非常奇怪的函数调用问题
用中点画圆法画圆,下面的程序中有两个模块,如果用第二个模块的话,能画出一个完整的圆,但是如果用第一个模块的话,只能画出第四象限的部分,这两个模块的功能应该都一样的啊,真不知道怎么回事.
#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);

读书人网 >C语言

热点推荐