求小球碰到墙壁后来回沿四边运行的算法?????
用一个红色矩形来模拟四个墙壁,中间有个小球(圆),小球碰到墙壁后沿一个倾角反弹,然后按顺序碰到每一个边来回运行 (这在vb里很容易实现:用timer定时器)
我自己编了一个:
#include<graphics.h>
#include<stdlib.h>
#include<math.h>
void main()
{
int driver=DETECT,mode=0;
int r=20,height=400,width=500,x0=70,y0=40,x,y,x1,y1,x2,y2;
int m,n;unsigned size,size1;void *buf,*buf1;
registerbgidriver(EGAVGA_driver); /*建立独立图形运行程序 */
initgraph(&driver,&mode,"");
setbkcolor(BLUE);setcolor(RED);
setlinestyle(0,0,3);
rectangle(x0,y0,x0+width,y0+height);
setlinestyle(0,0,1);
x=x0+width/2+2; y=y0+r+2;
circle(x,y,r);setfillstyle(1,2);floodfill(x,y,4);
x=x0+width/2-r+2; y=y0+2;
size=imagesize(x,y,x+2*r,y+2*r);
buf=malloc(size); getimage(x,y,x+2*r,y+2*r,buf);
m=0;n=0;
while(!kbhit())
{
for(;x+m<x0+width-2*r-2;m++,n++)
{
putimage(x+m,y+n,buf,COPY_PUT);
}delay(20);
for(;y+n<y0+height-2*r-2;n++,m--)
{
putimage(x+m,y+n,buf,COPY_PUT);
}delay(20);
for(;x+m>x0+2;n--,m--)
{
putimage(x+m,y+n,buf,COPY_PUT);
}delay(20);
for(;y+n>y0+2;n--,m++)
{
putimage(x+m,y+n,buf,COPY_PUT);
}
delay(20);
setcolor(2);
settextstyle(3,0,0);
outtextxy(90,350,"PRESS KEY TO EXIT");
setcolor(RED);
}
getch();
closegraph();
}
以上算法不对,请高手给出正确算法????