【问题标题】:Reflecting a circle off another circle从另一个圆圈反射一个圆圈
【发布时间】:2011-03-10 21:49:25
【问题描述】:

使用 iPhone 和 Objective C。

我正在开发一款游戏,我需要正确地将球从圆形物体上反射回来。我正在尝试将其作为线和圆的交叉点。我的球位置在圆圈外,并且在下一次平局更新时,我的新球位置将在圆圈内。我知道线(球路径)和圆的交点。现在我想围绕交点旋转球路径的终点,以获得正确的切线反射角。

以下是已知的:

  • 球电流 x,y
  • 球头 x,y
  • 球半径
  • 圆心 x,y
  • 圆半径
  • 球轨迹与圆 x 和 y 的交点

我知道我需要找到切线和入射球路径之间的入射角,它也等于我的反射角。我想一旦我知道这两个角度,我就可以从 180 中减去它们以获得我的旋转角度,然后将我的端点围绕相交角度旋转那个量。我只是不知道怎么做。

【问题讨论】:

    标签: physics collision geometry


    【解决方案1】:

    首先,您应该注意,球的中心不必在圆圈内就表明存在反射或反弹。只要球心到圆的距离小于球的半径,就会发生弹跳。

    如果圆的半径是R,球的半径是r,如果你转换成圆的半径是R+r,球的半径为 0。为了碰撞检测和反射/弹跳,这是等价的。

    如果你有(放大的)圆和球的路径之间的交点,你可以很容易地计算出该点的圆的法线N(它是方向上的单位向量从圆心到碰撞点)。

    对于传入向量 V,反射向量为 V-2(NV) N,其中 (NV) 是点积。对于这个问题,传入的向量V是从交点到圆内点的向量。

    至于上面给出的反射公式,用向量数学推导比较容易,但你也可以谷歌搜索“calculate reflection vector”之类的词。公式中的符号会随着 VN 的假设方向而变化。 Mathworld has a derivation 虽然如前所述,符号不同。

    【讨论】:

      【解决方案2】:

      我只知道几何部分的解决方案。
      设:
      r1 => 球半径
      r2 => 圆半径

      您可以使用毕达哥拉斯定理计算两个圆之间的距离。
      如果距离小于r1+r2,则进行碰撞。

      对于碰撞,我会推荐你​​Here。它在 python 中,但我认为它应该让你知道该怎么做。希望,甚至在 Objective C 中实现它。教程由PeterCollingRidge 提供。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-24
        • 2018-12-15
        • 1970-01-01
        • 1970-01-01
        • 2019-09-04
        • 2019-04-25
        • 2012-11-12
        • 1970-01-01
        相关资源
        最近更新 更多