我试图让用户画一个桨,然后他们可以用它来击球。但是,我似乎无法让球正确反弹,因为球速度的 x 和 y 分量没有与墙壁对齐。我怎样才能解决这个问题?
我在这里尝试了 Gareth Rees 给出的建议,但显然我对向量的了解不够,无法遵循它。例如,我不知道你在向量中究竟存储了什么——我知道它是一个带方向的值,但是你是否存储了它之间的 2 个点、斜率、角度?
我真正需要的是给定墙壁的角度以及球击中时的 x 和 y 速度,然后找到新的 x 和 y 速度。
Gareth Rees 的公式是正确的,但我发现这里的图片和解释更清楚一些。也就是说,基本公式是:
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)
。
如果曲面是弯曲的,则在接触点使用法线。