我试图让用户画一个桨,然后他们可以用它来击球。但是,我似乎无法使球正确反弹,因为球速度的x和y分量未与墙对齐。我该如何解决?

我尝试了Gareth Rees here给出的建议,但是显然我对向量了解不足,无法遵循它。例如,我不知道您在向量中究竟存储了什么-我知道这是一个带有方向的值,但是您是否存储了它之间的2个点(斜率,角度)?

我真正需要的是在击球时给定壁的角度以及x和y的速度,以便随后找到新的x和y的速度。

最佳答案

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)

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

关于c# - 从任意角度的墙壁弹起球?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10048840/

10-17 00:22