如何对圆与线段末端之间的碰撞建模

时间:2019-07-15 16:30:01

标签: algorithm math geometry collision-detection

我有一个圆朝固定线段移动(从A点到B点的长度是有限的)。当接触点是线段的确切终点(例如B点)而不是线段内部时,我想模拟碰撞(在碰撞后查找圆的方向和速度)。

当圆触及线段内的直线时,就像撞球从撞球台上弹起一样,方程很容易或容易找到。但是,当圆在线段的确切末端与线接触时会发生什么?就像一个圆和一个无限小的圆的碰撞一样吗?用数学方法对碰撞进行建模以确定在碰撞后圆要去向何方?

我应该提到的是,我正在寻找游戏环境下的问题的答案。因此,与在实际(即超准确)物理模拟中可以使用的东西相比,我更多的是寻找看起来更现实的东西。

2 个答案:

答案 0 :(得分:3)

线段的方向或长度并不重要,仅是圆撞到的终点位置。

我认为:

  • 线段是固定的,即不会移动。
  • 没有能量进入圆的旋转/旋转
  • 这是一种弹性碰撞;无摩擦赔偿是100%

当圆碰到端点时,就好像它碰到了一条在撞击点与圆相切的线。圆的速度将是该切线中反映的原始速度。换句话说,投影在切线上的速度不变。切线法线上的投影速度反转。

enter image description here

答案 1 :(得分:0)

我不确定这里是否有明确定义的正确答案。就是说,我可能会默认为:

      \       /
       \  B  /
        \   /
         \x/
     A    |    C
          |
          |

(注意:两条对角线应完全对角线,因此A和C部分为135度,B部分为90度)

来自A部分的所有内容都应该反弹,好像它从左侧碰到了线段的宽边一样。同样,来自C节的任何内容都应反弹,就像它从右侧碰到线段的宽边一样。来自B部分的任何东西都应该反弹,好像它撞到垂直于线段的表面(想象一个非常细的矩形)一样。任何与左右方向成45度角撞击的东西(跨越B和其他部分之间的边界)都应沿相同的方向弹回,就像碰到了一个完全垂直于其轨迹的表面一样。