--------------------
int n
scanf("%d",&n)
for (int j=0j<nj++)
{
for(i=0i<185i++)
{
putimage(70+i, 170, buf, COPY_PUT)/*左边球向右运动*/
putimage(500-i, 170, buf, COPY_PUT)/*右边球向左运动*/
}
for(i=0i<185i++)
{
putimage(255-i, 170, buf, COPY_PUT)
putimage(315+i, 170, buf, COPY_PUT)
}
}
看题义应该是只考虑在一维空间这种简单的情形,也就是只有正反两个同线方向,并且还不用考虑的球的大小(如果一个小球与一个大球相撞,还要考虑撞击方向不在两球心连线上,会怎么样?!当然画图演示时如果球有大小,就要把握好撞击的时刻),同向撞击和反向撞击其实是归类到同一个物理公式中的,撞击后的球速并不难求(根据动量守恒求方向,根据能量守恒求大小,当然要把公式简化变形到适合程序计算的形式)。如果只是想以文字方式打印输出那实在是太简单了,没什么好说的;如果是想以动画方式形象地演示出来,这里有一个粗糙的方案:设定一个很小的时间间隔,每隔个时间片断后,计算一下两球的位移(根据当时的速度计算相对上一次位移的偏移量),每次都要比较这两个位移的相对距离,如果发现这个距离小于事先设定好的误差值就认为它们相撞了,在这一刻利用物理公式计算出新的球速,以后就按新球带更新位移……如标题所示相互碰撞的小球交换相互速度(完全d性碰撞)
鼠标拖拽窗口 随着窗口的增大或减小 小球的大小和速度(速度的模)随机变化
下面是我写的一个函数 请问如何实现上述要求 谢谢 //x,y分别表示小球水平和竖直的速度
bool collision(TShape* sh1, TShape* sh2) {
float x1 = sh1->Left + sh1->Width/2.0
float y1 = sh1->Top + sh1->Height/2.0
float x2 = sh2->Left + sh2->Width/2.0
float y2 = sh2->Top + sh2->Height/2.0
if (sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)) <= sh1->Width/2.0 + sh2->Width/2.0)
return true
else
return false
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)