【问题标题】:Collision Detection in 2D Motion2D 运动中的碰撞检测
【发布时间】:2011-05-26 22:40:30
【问题描述】:

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

【问题讨论】:

  • Wham!(该链接演示了一种快速、准确且“简单”的碰撞检测方法。)
  • 听起来像 2D,而不是 1D,运动。
  • 有一些简单的公式可以找出所有这些信息,除非你需要来模拟它,否则你应该只看一下它们。通过计算velocity 来统计并从那里开始。

标签: c physics


【解决方案1】:
  • 建立一个坐标系,地面位于 y=0。跟踪球飞行时的坐标,然后检查它何时 y=0,也就是它撞击地面的位置。您还可以在球移动时跟踪 x 和 y 速度。

  • 使用物理技能。 This 是一个很好的教程。如果你有的话,我推荐 Halliday、Resnick 和 Walker 的 Fundamentals of Physics。他们有一个非常好的章节。

【讨论】:

    【解决方案2】:

    如果您只是在寻找数学,您可以为其编写 C 代码。我发现这个很有帮助。 Math Models

    【讨论】:

      【解决方案3】:

      碰撞检测只涉及确定 2 个对象之间的距离。

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

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

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

      【讨论】:

      • 我不明白的是如何实现实际的碰撞。发生碰撞怎么办?
      • @kachilous 你可以吸收能量,使物体粘在地上。您可以使物体以它在地面上的一半速度“弹跳”。这个问题没有正确答案——这取决于你想让它变得多复杂(世界级的物理引擎!)、多快(对于游戏中的实时渲染)以及你生命中的宝贵时间你愿意浪费在做这件事上。 (有“免费”的超棒物理引擎可用 - Havok、Bullet 等)
      猜你喜欢
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多