C语言编程:两小球动态碰撞(键盘控制碰撞次数)

C语言编程:两小球动态碰撞(键盘控制碰撞次数),第1张

easy~~~~

--------------------

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

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12121741.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存