【问题标题】:collision test for 2d polygon physics二维多边形物理碰撞测试
【发布时间】:2013-05-04 23:29:06
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    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)
    

    关于检查顶点是否在某个多边形内,一定要测试里面是否没有任何其他顶点。 如果不止一个点,您必须将实际位置与前一个位置进行插值,以找到单个顶点碰撞的确切时刻。 (唯一的例外是边缘到边缘平行碰撞的幸运情况)。您使用的时间步长越大,错误越大。

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

    【讨论】:

    • 它是碰撞数据,因为碰撞边缘是碰撞数据,;-)
    • ...无论如何,您可以从第一点和第二点给出的边缘获取法线向量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多