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

use*_*195 2 c# xna physics vector

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

我试图通过加雷思·里斯提出的意见在这里,但显然我不知道有足够的了解向量能够遵循它.例如,我不知道你在矢量中存储了什么 - 我知道它是一个带方向的值,但你存储它之间的两个点,斜率,角度?

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

tom*_*m10 6

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

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

因为你不熟悉矢量符号,所以你需要知道这个公式:矢量基本上只是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).

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