2011-06-01 83 views
1

由于重力9.81我有球加速。我也有一些线路,可以移动并且斜坡由用户改变。我如何处理球和线之间的弹跳碰撞,使它们以正确的角度反弹。我所有的碰撞检测工作都很好,我只是想知道是否有一种方法可以利用线的斜率来找出碰撞后球的合成向量。看似简单的球与线碰撞?

我在Objective-C用的XCode 4在Mac OS 10.6.8写

+0

它是什么,任何类型的游戏?如果是,那么你正在处理哪个游戏引擎? – rptwsthi 2011-06-01 06:26:51

+0

这是一个iPhone应用程序,但我想O物理我自己 – 2011-06-01 06:34:18

+0

对不起然后.. :( – rptwsthi 2011-06-01 06:37:39

回答

2

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

澄清:线的“正常”是单位长度的线的垂直向量。想想它:这条线代表一架飞机,它会有一个法线向量。假设N是线的归一化(单位长度)“正常”向量,设v是球的速度向量。使用点积(P = V DOT N)

  • 添加载体2 * P * N到V(V = V + 2 * P * N)

    1. V计划映射到N个

    我认为应该做的伎俩......

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

    +0

    那么基本上,让它碰撞的表面是水平平坦的,并且仅在y轴上-1反弹球? – 2011-06-01 06:35:17

    +1

    如果线条是水平的(dy = 0)或垂直的(dx = 0),它变得非常容易,您只需翻转速度矢量的正确“尺寸”的符号,例如:如果垂直线是击中 – 2011-06-01 06:37:34

    0

    你有没有考虑争取引擎在那里的少数做肮脏的工作,你的呢? Cocos2D,Box2DChipmunk是想到的三个。

    +0

    Cocos2D不是一个Phys引擎。它包含box2d和花栗鼠 – Andrew 2011-06-01 06:02:05

    +0

    不是我是绝对不使用物理引擎 – 2011-06-01 06:03:22

    +1

    我喜欢肮脏的工作... :) – 2011-06-01 06:03:38

    0

    最简单的方式做到这一点(在我看来):

    • 当您创建行计算,将其旋转为横向并计算矩阵的逆矩阵。
    • 当球与线碰撞:
      1. 由旋转矩阵
      2. 发生变化时旋转速度矢量的y分量
      3. 由旋转矩阵的逆旋转速度矢量的符号。

    旋转矩阵由下式给出:

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

    其中A是线和水平之间的角度:

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

    逆旋转矩阵由下式给出。

    上面使用标准的数学惯例(正x和y是右上象限,0弧度是沿着x轴的正方向,角度是逆时针增加。