Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中检测两个向量[svg]闭合形状的碰撞? 是否有可能在C中检测两个或多个闭合形状的碰撞? 我有char glyps(线和(或)bezier路径)_C_Svg - Fatal编程技术网

如何在C中检测两个向量[svg]闭合形状的碰撞? 是否有可能在C中检测两个或多个闭合形状的碰撞? 我有char glyps(线和(或)bezier路径)

如何在C中检测两个向量[svg]闭合形状的碰撞? 是否有可能在C中检测两个或多个闭合形状的碰撞? 我有char glyps(线和(或)bezier路径),c,svg,C,Svg,是否可以检测距离2形状?形状之间的最小距离。 我相信你说的是碰撞检测。如果这些形状是凸面和多边形,则可以使用SAT碰撞检测方法。在每个法线上投影每个顶点并查找重叠。如果在任何法线上没有重叠,您可以退出并说没有碰撞。如果不是,最小的重叠就是距离,方向是法线。没有简单的方法来进行非凸碰撞检测。大多数碰撞检测算法工作在两个凸形状上 一种简单但低效的方法是将每个多边形分解为凸多边形,并分别测试每个凸多边形与另一个凸多边形的相对位置。例如,你的“A”图形可以分为3个凸多边形,七星可以分为8个。如果发生2

  • 是否可以检测距离2形状?形状之间的最小距离。

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

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

    一种简单但低效的方法是将每个多边形分解为凸多边形,并分别测试每个凸多边形与另一个凸多边形的相对位置。例如,你的“A”图形可以分为3个凸多边形,七星可以分为8个。如果发生24种可能的碰撞中的任何一种,则两个原始多边形相交

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


    您还可以将这两种方法结合起来。在对任何凸次多边形进行相互测试之前,请先测试次多边形的边界圆

    请让你们的问题更具体,提供你们到目前为止为解决你们的问题所做的,以及从形状中心到“两个形状之间的距离”的距离?形状之间的质心距离?形状的最近顶点之间的距离?有很多方法可以定义“两个形状之间的距离”。他们都有不同的答案。为了得到任何有意义的答案,甚至是从顶点到边的最短距离,你需要澄清你在问什么。或者,对于一个形状的每个顶点,确定它位于另一个形状的每个边向量的哪一侧。如果它位于它们的“内部”,则会发生碰撞。我的图像非常清晰。我正在查看示例、教程、库等。您的图像没有您在回答中所述的任何“孔”。我有一条线或贝塞尔线(svg路径),但我的形状有孔。你能把链接放进去吗?图书馆?示例?这不适用于有孔的形状。凹多边形的处理更加复杂。使用算法将它们分割成凸多边形甚至三角形是很常见的。