首页 > 解决方案 > 如何计算球与墙壁碰撞的反射角

问题描述

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

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

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

这样的东西

标签: javascriptmathgame-physics

解决方案


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

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

哪里dot是向量点积。

解释:v_ion的投影e_ndot( 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


推荐阅读