看似简单的球&线路碰撞?

时间:2011-06-01 05:56:21

标签: iphone objective-c macos math vector

由于重力9.81,我有一个球加速。我也有一些线条,可以移动,并由用户改变它们的斜率。如何处理球和线之间的弹跳碰撞,使它们以正确的角度反弹。我所有的碰撞检测工作正常,我只是想知道是否有一种方法可以使用线的斜率来找到碰撞后球的合成矢量。

我使用Mac OS 10.6.8上的XCode 4编写Objective-C

3 个答案:

答案 0 :(得分:2)

我认为你需要球与之碰撞的“表面”的“正常”矢量,然后相应地“翻转”球的“速度”矢量。

澄清:线的“正常”是线的垂直向量,单位长度。可以这样想:线代表一个平面,它有一个法向量。

从我的头顶: 设N为线的归一化(单位长度)“正常”向量,设v为球的速度向量。

  1. 使用点积计划v到N(p = v DOT N)

  2. 将向量2 * p * N添加到v(v = v + 2 * p * N)

  3. 我认为应该这样做......

    我还建议使用已经指出的物理引擎。

答案 1 :(得分:0)

您是否考虑过招募少数几台发动机为您做肮脏的工作?我会想到Cocos2DBox2DChipmunk三个。

答案 2 :(得分:0)

简单的方法(在我看来):

  • 创建线时,计算将其旋转为水平的矩阵,并计算该矩阵的倒数。
  • 当球与线碰撞时:
    1. 通过旋转矩阵
    2. 旋转速度矢量
    3. 更改y分量的符号
    4. 通过旋转矩阵的倒数旋转速度矢量。

旋转矩阵由下式给出:

( cos A ,  sin A )
( -sin A , cos A )

反向旋转矩阵由下式给出:

( cos A , -sin A )
( sin A ,  cos A )

其中A是直线与水平面之间的角度。

以上使用标准数学约定(正x和y是右上象限,0弧度沿x轴正方向,角度逆时针增加。