多个小球碰撞碰壁运动
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
#include
#define XN 600
#define YN 600 //设置图形窗口的大小
void Ball(int x,int y)
{
fillcircle(x,YN-y,10);
}
int Compare(int a,int b)//简化的二维平面小球的碰撞
{
if(a>=b)return 1;
else return -1;
}
int BallMove(int x[],int y[],int a[],int b[],int n)//单位时间的位移
{
int i;
for(i=0;i
x[i]+=a[i];
y[i]+=b[i];
}
return 0;
}
void Judge(int x[],int y[],int a[],int b[],int n)
{
int i=0,j=0;
while(i
for(j=i+1;j
if((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])<400)
{
a[i]=Compare(x[i],x[j]);
b[i]=2*Compare(y[i],y[j]); //简化的二维平面小球的碰撞,随便写的
a[j]=2*Compare(x[j],x[i]);
b[j]=Compare(y[j],y[i]);
}
}
i++;
}
i=0;
while(i
if((x[i]-11)<=0||((XN-11)-x[i])<=0)
if((y[i]-11)<=0||(y[i]-(YN-11))>=0)
{
a[i]=-a[i];
b[i]=-b[i];
}
else
a[i]=-a[i];
if((y[i]-11)<=0||(y[i]-(YN-11))>=0)
b[i]=-b[i];
i++;
}
return;
}
void main()
{
int i=0,x[20]={0},y[20]={0},a[20]={1},b[20]={1},n=20;
for(i=0;i
x[i]=20*i+90;
y[i]=20*i+90;
a[i]=-1;
b[i]=1;
}
initgraph(XN,YN);
setwritemode(R2_XORPEN);
setfillcolor(RED);
setlinestyle(BLUE);
while(1)
{
for(i=0;i
Sleep(10); //调节整体速度快慢
for(i=0;i
Judge(x,y,a,b,n); //判定是否相碰或碰壁,若有,改变速度向量
BallMove(x,y,a,b,n); //单位时间坐标位置的变动
}
getch();
closegraph();
}