【问题标题】:How to calculate reflection angle of a ball colliding with a wall如何计算球与墙壁碰撞的反射角
【发布时间】:2019-04-11 06:34:54
【问题描述】:

我有一个球,我正将它移向一个这样的角度:

ball.x += ball.speed * Math.sin(ball.angle)
ball.y += ball.speed * -Math.cos(ball.angle)

如何计算球与墙壁碰撞时的反射角?(水平或垂直)

类似this

【问题讨论】:

标签: javascript math game-physics


【解决方案1】:

对于任何具有法向矢量e_n 的墙,具有初始速度矢量v_i 的球在反射后具有速度矢量v_f

v_f = v_i - 2 dot( v_i, e_n) e_n,

其中dot 是向量点积。

说明: v_ie_n 上的投影是dot( v_i, e_n )。这是朝向墙壁的速度,这是反射时反转的部分。组件p = dot( v_i, e_n ) 产生一个向量p e_n。剩余分量可以通过叉积或简单地v_s = v_i - p e_n 计算。最终速度是未改变的分量加上反转的投影分量,即v_s - p e_n = v_i - 2 p e_n = v_i - 2 dot( v_i, e_n) e_n

【讨论】:

  • 这是假设一个不旋转的球。实际上,倾斜角度的摩擦和反射也会导致旋转的变化(这会改变内部能量的分布并影响速度等等)因此,台球桌上的边缘放置在一个高度使得旋转也能正确反映。
猜你喜欢
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
相关资源
最近更新 更多