Python 直线端点上的球线段碰撞

Python 直线端点上的球线段碰撞,python,math,vector,line,collision,Python,Math,Vector,Line,Collision,所以我有一个程序,在这个程序中,一个受重力作用的球从用户用鼠标点击创建的直线上反弹。这些管线通常是倾斜的。我的碰撞反弹效果非常好,除非球的反弹效果大致如下: ->O------ 我的代码是通过寻找线的法向量来工作的,这样球的入射速度vec和线的法向量的标量积是负的(这意味着向量有相反的方向)。 然后我把速度分解成平行于和垂直于法线的项, 与平行分量的方向相反 在上述边缘情况下,球基本上沿直线移动。我该怎么解释呢?有什么建议吗?>可能的解决方案: 您可以构建一个由4条独立的“线”组成的二维矩形(即

所以我有一个程序,在这个程序中,一个受重力作用的球从用户用鼠标点击创建的直线上反弹。这些管线通常是倾斜的。我的碰撞反弹效果非常好,除非球的反弹效果大致如下: ->O------

我的代码是通过寻找线的法向量来工作的,这样球的入射速度vec和线的法向量的标量积是负的(这意味着向量有相反的方向)。 然后我把速度分解成平行于和垂直于法线的项, 与平行分量的方向相反

在上述边缘情况下,球基本上沿直线移动。我该怎么解释呢?有什么建议吗?>

可能的解决方案:

  • 您可以构建一个由4条独立的“线”组成的二维矩形(即您想要/需要的矩形),而不是使用单个1D“线”。也就是说,您可以与矩形对象的4个面中的任何一个发生碰撞。这样行吗
  • 进行某种角球碰撞——如果球“击中”一条线的起点或终点,则将其适当反弹。我认为这样做的方法如下:
    我如果角落在球的半径内,则会发生碰撞。
    二,。在球的角和中心之间定义一条线。
    iii.沿着这条线反转球的速度分量

  • 嗯,是的,但我必须改变所有碰撞检测和弹跳角度的算法。是否没有办法以一种有效的方式实现这一点?就像一个特殊的函数,在这种特殊情况下,它的工作方式不同?