AABB vs Circle-反之亦然,使用单独的轴定理

|| 在遵循本教程进行2d游戏碰撞处理时,本教程介绍了我最喜欢的游戏之一“ N”中使用的碰撞。他们如何更有效地使用单独的轴定理来处理AABB vs AABB和AABB vs Circle之间的碰撞。 http://www.metanetsoftware.com/technique/tutorialA.html。我了解AABB vs AABB碰撞处理的实现,但我不理解AABB vs Circle碰撞检测,尤其是voronoi地区。完全混淆了如何/从哪里开始。 AABB vs AABB碰撞检测 通过找到每个边缘的法线来找到沿所有边缘的轴。 将所有顶点投影到 结果Axis,最终结果应该 为标量值。 结果标量值依次 用于查找碰撞是否 存在与否。 有人可以解释一下如何处理AABB vc Circle碰撞-反之亦然吗?     
已邀请:
        由于与圆的碰撞总是要与半径进行比较(在您的情况下是通过投影),因此,仅需要最接近的线段(多边形的边缘)和法线向量即可。从线段的点很容易计算出法线矢量(类似于unit(y2-y1,x1-x2)...斜率的负倒数)。找出最接近的边缘是剩余的构造块。沃罗诺伊地区为我们提供了最后的基础。 您了解轴对齐的边界框之间的冲突。我假设您也了解两个圆圈之间的碰撞。我假设你不了解伏洛诺伊地区。那么,从哪里开始呢? Voronoi图。我强烈建议您找到图解说明。这个链接很好。但是,根据您的迷失程度,可能会增加一些背景知识(但是,严重的是,没有任何解释可以胜过视觉效果): voronoi图是计算几何中无处不在的数据结构之一。任何计算几何书籍都将讨论Voronoi图。它回答了一个简单的问题:最近的邮局在哪里?给定平面中的一组点(邮局),伏洛诺伊图将平面分成不同的区域,每个区域都包含一个点。如果您在特定区域中,则知道哪个点(邮局)离您最近。如果您是一个圆,那么出于简单的原因,这对于碰撞检测将非常有用:最接近的点是测试碰撞的最重要点。 请注意,如果您想数学上得出伏洛诺伊图,则只需考虑所有点对并计算所有等分线。然后,与所有等分线相交,并丢弃不重要的线段,因为其他某个点更靠近兴趣点(在每个交叉点处都会发生)。但是,这导致了效率极低的算法。有效的实现涉及计算几何中的另一个普遍存在的问题:线扫算法。它的详细信息可以在其他地方找到。重要的一点是,它提供了仅考虑算法任何阶段的重要点的方法。 您教程中的voronoi地区要复杂一些。我们有线段,而不仅仅是点。幸运的是,行扫描算法可以很好地处理此问题。您通常需要担心线段的开始或结束。从概念上讲,一旦掌握了基本算法,就不会有太大变化。同样,这对于用圆进行碰撞检测非常有用:给定voronoi区域,您知道测试碰撞的线段。 这甚至有帮助吗?反馈表示赞赏。我很乐意澄清任何事情。在没有视觉效果的情况下解释voronoi图可能不是一个好主意。     

要回复问题请先登录注册