从另一个圆圈反射一个圆圈

时间:2010-07-02 00:50:47

标签: physics collision geometry

使用iPhone和Objective C。

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

以下是众所周知的:

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

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

2 个答案:

答案 0 :(得分:4)

首先,你应该注意球的中心不必在圆圈内部,以表明有反射或反弹。只要球心和圆之间的距离小于球的半径,就会有反弹。

如果圆的半径为 R 并且球的半径为 r ,如果转换为圆半径 R + r 且球的半径为0.出于碰撞检测和反射/弹跳的目的,这是等效的。

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

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

对于上面给出的反射公式,使用矢量数学推导相对容易,但您也可以搜索“calculate reflection vector”之类的术语。公式中的符号将随着 V N 的假设方向而变化。 Mathworld has a derivation虽然如上所述,但迹象不同。

答案 1 :(得分:0)

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

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

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