2016-09-15 27 views
-3
  1. 是否有可能检测到C中碰撞两个或多个闭合形状? 我有炭glyps(线和(或)贝塞尔路径) collision

enter image description here如何在C中检测碰撞两个向量[svg]闭合形状?

  • 能够检测距离2周的形状?形状之间的最小距离。 distance
  • +2

    请让你的问题更具体,提供你迄今为止所做的解决你的问题和[MCVE](http://stackoverflow.com/help/mcve)。 – tnull

    +1

    _“两个形状之间的距离”_与形状中心的距离?与形状之间的质心距离?最接近的形状顶点之间的距离?有很多方法可以定义“两个形状之间的距离”。他们都有不同的答案。你需要澄清你要问的问题以获得任何有意义的答案。 – Knetic

    +0

    ...或甚至从顶点到边缘的最短距离。或者,对于一个形状的每个顶点,确定它所在的其他形状的每个边缘矢量的哪一侧。如果它们全部位于“内部”,就会发生碰撞。反之亦然。 –

    回答

    0

    我相信你在谈论碰撞检测。如果这些形状是凸面和多边形,则可以使用SAT碰撞检测方法。您在每个法线上投影每个顶点并查找重叠。如果在任何正常情况下没有重叠,您可以退出并说没有碰撞。如果不是最小的重叠是你的距离,方向是正常的。

    +0

    我有一条线或贝塞尔线(svg路径),但我的形状有洞可以把链接?图书馆?示例? –

    +1

    http://www.dyn4j.org/2010/01/sat/ – Serge

    +0

    这不适用于有孔的形状,凹面多边形更复杂。使用算法将它们分成凸多边形或甚至三角形是很常见的。 – py13579

    1

    有没有简单的方法来做非凸面碰撞检测。大多数碰撞检测算法在两个凸形上工作。

    一个简单但低效的方法是将每个多边形分解成凸多边形,并分别在相反的方向上测试每个凸多边形与另一个多边形。例如,你的“A”图可以分成3个凸多边形,七角星可以分解成8个。如果发生24个可能的碰撞中的任何一个,那么两个原始多边形相交。

    另一种方法是使用保守的边界区域作为第一个近似值。确定围绕“A”和七角星的所有点的两个最小圆。确定圆形碰撞很容易:计算中心之间的距离并查看与圆形半径之和的比较结果。如果圆不相交,那么多边形绝对不会相交。如果圆圈相交,那么多边形可能相交,因此需要进一步的测试。

    你也可以结合这两种方法。在测试任何凸面子多边形之前,测试子多边形的边界圆。

    +0

    这不是库,代码等。“在C中” –