从任意角度的墙上弹出一个球?

时间:2012-04-06 20:23:24

标签: c# vector xna physics

我试图让用户画一个他们可以用来击球的球拍。但是,我似乎无法让球正确弹跳,因为球的速度的x和y分量不与墙排成一线。我怎么能绕过这个?

我尝试了Gareth Rees here给出的建议,但显然我不太了解矢量能够遵循它。例如,我不知道你在矢量中存储了什么 - 我知道它是一个带方向的值,但是你存储它之间的两个点,斜率,角度吗?

我真正需要的是给出球的角度以及球击中时的x和y速度,然后找出新的x和y速度。

1 个答案:

答案 0 :(得分:6)

Gareth Rees得到了正确的公式,但我发现图片和解释here更加清晰。也就是说,基本公式是:

Vnew = -2*(V dot N)*N + V
where
V = Incoming Velocity Vector
N = The Normal Vector of the wall

由于您不熟悉矢量符号,因此以下是您需要了解的公式:矢量基本上只是x,y对,因此V = (v.x, v.y)N = (n.x, n.y)。平面最好用平面法线来描述,即垂直于平面的单位长度矢量。然后是一些公式,b*V = (b*v.x, b*v.y); V dot N = v.x*n.x+v.y*n.y,也就是说,它是一个标量;和A + B = (a.x+b.x, a.y+b.y)。最后,为了找到基于任意向量的单位向量,它是N = M/sqrt(M dot M)

如果曲面是弯曲的,请使用接触点处的法线。