Algorithm 二维多边形物理的碰撞测试

Algorithm 二维多边形物理的碰撞测试,algorithm,computational-geometry,collision,intersection,game-physics,Algorithm,Computational Geometry,Collision,Intersection,Game Physics,我想做一些2D刚体(多边形)物理,我发现了一个复杂的方程来计算碰撞响应。但是,在这之前,我需要一个好的方法来找到响应过程的“输入” 我认为这样的输入应该是碰撞点的坐标和碰撞边缘的法线 在这一点上。碰撞检测有很多算法。例如,我可以测试多边形A的某个顶点是否在多边形B内,但它不会给我边的法线。然后我可能会测试循环中边的相交-但这是最简单的方法还是更简单的方法?边的法线只取决于多边形。这不是碰撞数据 根据多边形在程序中的定义方式,可以从中获取法线 假设它是由一个顶点数组定义的 一条边包含两个连续的点,

我想做一些2D刚体(多边形)物理,我发现了一个复杂的方程来计算碰撞响应。但是,在这之前,我需要一个好的方法来找到响应过程的“输入”

我认为这样的输入应该是碰撞点的坐标和碰撞边缘的法线
在这一点上。碰撞检测有很多算法。例如,我可以测试多边形A的某个顶点是否在多边形B内,但它不会给我边的法线。然后我可能会测试循环中边的相交-但这是最简单的方法还是更简单的方法?

边的法线只取决于
多边形。这不是碰撞数据

根据多边形在程序中的定义方式,可以从中获取法线

假设它是由一个顶点数组定义的

一条边包含两个连续的点,它们定义了一条直线(边) 因此,边的向量为:

EdgeVectorX = SecondPointX - FirstPointX
EdgeVectorY = SecondPointY - FirstPointY
正常情况下,你可以将X换成Y,并使其中一个为负数:

NormalX = -EdgeVectorY
NormalY =  EdgeVectorX
若要使其成为1长度向量,请将法线X和法线除以向量的长度:

Length = SquareRoot(NormalX*NormalX + NormalY*NormalY)

关于检查顶点是否在某个多边形内,请确保测试该多边形内是否没有任何其他顶点。 如果有多个点,则必须使用上一个位置对实际位置进行插值,以找到单顶点碰撞的确切时刻。(唯一的例外是边到边平行碰撞的幸运案例)。你使用的时间步长越大,错误就越大


荒谬的错误是,时间步长大到足以使多边形相互穿过而不检测到碰撞。

这是碰撞数据,因为碰撞边是碰撞数据;-)。。。不管怎样,这就是从第一点和第二点给出的边得到法向量的方法。