自由之战安蕾尔出装:c程序的问题

来源:百度文库 编辑:高考问答 时间:2024/04/28 21:40:50
这是我写的程序,画线时将原点移到屏幕中心setcolor(getmaxcolor());
setviewport(getmaxx()/2, getmaxy()/2, getmaxx(), getmaxy(), CLIP_ON);,并改为一般的平面直角坐标系,dda算法没有为题,中点算法时一换坐标线就不对了,好像象限考虑的也不全,谁能帮我改改(只放上了主要的)
if(x0>x1)
{
temp1=x0; x0=x1; x1=temp1;
temp2=y0; y0=y1; y1=temp2;
}
start = clock();
if(choi==1)
{

for(ti=1;ti<=1000;ti++)
{
ddaline(x0,y0,x1,y1);
}
end = clock();
duration = (end - start) / CLK_TCK;
printf("The time it took was: %f\n",duration/1000 );
}
else if(choi==2)
{

for(ti=1;ti<=1000;ti++)
{
midpline(x0,y0,x1,y1);
}
end = clock();
duration = (end - start) / CLK_TCK;
printf("The time it took was: %f\n",duration/1000 );
}
getch();
closegraph();
}
void midpline(int x0,int y0,int x1,int y1)
{
float dx,dy,d,incrE,incrNE,x,y;
int temp;
/*y0=-y0;
y1=-y1;*//*changing coordinate is not suit for midpoint algorithm*/
dx = x1-x0;
dy = y1-y0;
if( dx==0 )
{
if( y0>y1 )
{ temp = y0;
y0 = y1;
y1 = temp;
}
for( y=y0;y<=y1;y++ )
{
putpixel(x0,y,2);
}
}
else
{

d = dy*2-dx;
incrE = dy*2;
incrNE = (dy-dx)*2;
x = x0;
y = y0;
putpixel(x,y,2);
while(x<x1)
{
if( d<=0 )
{
d+=incrE;
x++;
}
else
{
d+=incrNE;
x++;
y++;
}
putpixel(x,y,2);
}
}
}