为了账号安全,请及时绑定邮箱和手机立即绑定

球对球碰撞.检测和处理

球对球碰撞.检测和处理

球对球碰撞.检测和处理在Stack溢出社区的帮助下,我编写了一个非常基本但有趣的物理模拟器。你点击并拖动鼠标来发射一个球。它会弹来跳去,最后停在“地板”上。我想加入的下一个大特性是球对球的碰撞。球的运动被分解成x和y的速度矢量。我有重力(y矢量的每一步的小约化),我有摩擦力(两个向量的小减缩,每一次与墙的碰撞)。这些球诚实地以一种令人惊讶的现实的方式移动。我想我的问题有两部分:什么是检测球对球碰撞的最佳方法?我是否只有一个O(n^2)循环,对每个球进行迭代,并检查其他每个球的半径是否重叠?我用什么方程来处理球到球的碰撞?物理101它如何影响两个球的速度x/y矢量?这两个球的方向是什么?我该如何把这个应用到每个球上?处理碰撞检测的“墙壁”和由此产生的矢量变化是容易的,但我看到更复杂的球-球碰撞。对于墙壁,我只需取适当的x或y向量的负数,它就会朝正确的方向走。我不认为是这样的。一些快速的澄清:为了简单,现在我可以用完全弹性的碰撞,我所有的球现在都有相同的质量,但是我可能会在将来改变它。编辑:我发现有用的资源带矢量的二维球物理:没有三角函数的二维碰撞二维球碰撞检测实例:加碰撞检测成功!我的球碰撞检测和反应工作很棒!相关守则:碰撞检测:for (int i = 0; i < ballCount; i++)   {       for (int j = i + 1; j < ballCount; j++)       {           if (balls[i].colliding(balls[j]))           {             balls[i].resolveCollision(balls[j]);         }     } }这将检查每个球之间的碰撞,但跳过冗余检查(如果必须检查球1是否与球2发生碰撞,则不需要检查球2是否与球1发生碰撞。而且,它跳过了检查与自身的碰撞)。然后,在我的球类中,我有了CONICING()方法和RESSIVE Collision()方法:public boolean colliding(Ball ball) {     float xd = position.getX() - ball.position.getX();     float yd = position.getY() - ball.position.getY();     float sumRadius = getRadius() + ball.getRadius();     float sqrRadius = sumRadius * sumRadius;     float distSqr = (xd * xd) + (yd * yd);     if (distSqr <= sqrRadius)     {         return true;     }     return false; } public void resolveCollision(Ball ball) {     // get the mtd     Vector2d delta = (position.subtract(ball.position));     float d = delta.getLength();     // minimum translation distance to push balls apart after intersecting     Vector2d mtd = delta.multiply(((getRadius() + ball.getRadius())-d)/d);      // resolve intersection --     // inverse mass quantities     float im1 = 1 / getMass();      float im2 = 1 / ball.getMass();     // push-pull them apart based off their mass     position = position.add(mtd.multiply(im1 / (im1 + im2)));     ball.position = ball.position.subtract(mtd.multiply(im2 / (im1 + im2))); }源代码:完整的源球到球对撞机。如果有人对如何改进这个基本的物理模拟器有一些建议,请告诉我!有一件事我还没有补充,那就是角动量,所以球会更现实地滚动。还有其他建议吗?留下评论!
查看完整描述

目前暂无任何回答

  • 0 回答
  • 0 关注
  • 718 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信