【问题标题】:Bouncing a ball off a wall with arbitrary angle?以任意角度将球从墙上弹起?
【发布时间】:2012-04-06 20:23:23
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# vector xna physics


    【解决方案1】:

    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)

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

    【讨论】:

    • 一段漂亮的矢量教程!虽然您没有定义除法(查找单位向量所必需的),但不难理解适用于乘积的相同规则......只需将向量的每个分量除以标量即可。
    猜你喜欢
    • 1970-01-01
    • 2017-07-20
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多