3

使用 iPhone 和 Objective C。

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

以下是已知的:

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

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

4

2 回答 2

4

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

如果圆的半径是R并且球的半径是r,那么如果您转换为圆的半径为R+r并且球的半径为 0 的情况,事情就会得到简化。出于碰撞检测和反射的目的/弹跳,这是等价的。

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

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

至于上面给出的反射公式,用向量数学推导比较容易,但你也可以谷歌搜索“计算反射向量”之类的词。公式中的符号将随着VN的假设方向而变化。 Mathworld 有一个推导,尽管如前所述,符号不同。

于 2010-07-02T02:49:40.390 回答
0

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

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

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

于 2013-01-15T11:50:26.180 回答