二维多边形物理碰撞试验

时间:2013-05-04 23:29:06

标签: algorithm computational-geometry collision intersection game-physics

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

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

1 个答案:

答案 0 :(得分:0)

Normal to the edge取决于polygon only。这不是碰撞数据。

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

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

边缘需要两个连续点,定义一条直线(边缘) 因此边缘的向量是:

EdgeVectorX = SecondPointX - FirstPointX
EdgeVectorY = SecondPointY - FirstPointY

正常的向量你改变X换Y并使其中一个为负:

NormalX = -EdgeVectorY
NormalY =  EdgeVectorX

要使它成为1长度向量,将NormalX和NormalY除以向量的长度:

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

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

荒谬的错误是当时间步长足够大以使多边形相互通过而没有检测到碰撞时。