二维运动中的碰撞检测

4
我创建了一个非常简单的数值模拟,模拟了一个物体以某个角度从建筑物上抛出,当物体撞击地面时,模拟停止。现在我想添加碰撞检测。我该怎么做呢? 我知道需要找到物体(球)撞击地面的确切时间,以及x和y方向的速度,物体撞击地面时的位置,还要添加参数来说明球在撞击后会反弹多少。但我不知道该如何去做。我知道有各种各样的碰撞检测方法,但由于我是新手,最易懂的方法是最好的。

1
Wham!(该链接演示了一种快速、准确且“简单”的检测碰撞的方法。) - Mateen Ulhaq
1
听起来像是二维运动,而不是一维的。 - Matt Ball
除非你必须模拟它,否则有一些简单的公式可以找到所有这些信息,你应该直接查阅它们。首先计算速度,然后从那里开始。 - user229044
3个回答

1
  • 建立一个坐标系,将地面设为y=0。跟踪球飞行时的坐标,然后检查它何时达到y=0,这就是它落地的位置。您还可以跟踪球移动时的x和y速度。

  • 运用物理技能。这个是一个很好的教程。如果您有条件,我推荐Halliday、Resnick和Walker的《物理学基础》。他们在这方面有非常好的章节。


1

如果您只是想寻找数学方程,可以为其编写C代码。我发现数学模型对此很有帮助。


0

碰撞检测简单地涉及确定两个对象之间的距离。

如果您只对物体与地面之间的碰撞感兴趣,可以使用:

if(object.y <= ground.y) {
    //collision occurred
}

要在对象之间进行碰撞检测,您可以循环遍历所有对象,并以相同的方式进行比较。


我不明白的是如何实现实际的碰撞。当发生碰撞时,我该怎么做? - kachilous
@kachilous 你可以吸收能量,使物体粘在地面上。你可以让物体以原来速度的一半“弹跳”起来。对于这个问题没有标准答案 - 它取决于你想要多么复杂(一个世界级的物理引擎!),有多快(用于实时渲染,如游戏),以及你愿意浪费多少宝贵的时间去做它。(有“免费”的超级棒的物理引擎可用 - Havok、Bullet等)。 - Mateen Ulhaq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接