Sab*_*a B 2 math 3d physics 2d collision
按照本教程进行我的2D游戏碰撞处理,本教程解释了我最喜欢的游戏"N"中使用的碰撞.他们如何更有效地使用单独的轴定理来实现AABB与AABB和AABB与Circle之间的碰撞.http://www.metanetsoftware.com/technique/tutorialA.html.我理解AABB与AABB碰撞处理的实现,但我无法理解AABB与Circle碰撞检测特别是voronoi区域.完全混淆了如何/从哪里开始.
AABB与AABB碰撞检测
有人可以解释如何处理碰撞AABB vc Circle - 反之亦然?
由于与圆的碰撞总是归结为与半径的比较(在您的情况下,通过投影),具有最近的线段(多边形的边)和法向量是您需要的唯一构建块.法线向量很容易从线段的点计算出来(类似于单位(y2-y1,x1-x2)......斜率的负倒数).找出哪条边最近是剩下的构建块.Voronoi地区为我们提供了最后的构建模块.
您了解轴对齐边界框之间的碰撞.我假设你也理解两个圆圈之间的碰撞.我假设你不懂voronoi地区.那么,从哪里开始呢?Voronoi图.我强烈建议您找到图解说明.这个链接非常好.然而,取决于你是多么失落,也许还有一些额外的背景(严肃地说,没有任何解释可以击败视觉):
voronoi图是计算几何的普遍存在的数据结构之一.任何计算几何书都将讨论Voronoi图.它回答了一个简单的问题:最近的邮局在哪里?给定平面(邮局)中的一组点,voronoi图将平面分成不同的区域,每个区域包含一个点.如果您在特定地区,您知道哪个点(邮局)离您最近.如果你是一个圆圈,这对于碰撞检测很有帮助,原因很简单:最接近的点是测试碰撞最重要的点.
请注意,如果要以数学方式导出voronoi图,只需考虑所有点对并计算所有二等分线.然后,您将所有的二等分线相交并丢弃不重要的线段,因为其他一些点更接近感兴趣点(在每个交叉点处发生).然而,这导致了非常低效的算法.有效的实现涉及计算几何中的另一个无处不在的事物:线扫描算法.它的细节可以在其他地方找到; 重要的是它提供了一种只考虑算法任何阶段的重要点的方法.
教程中的voronoi区域稍微复杂一些.我们有线段,而不仅仅是点.幸运的是,线扫描算法很好地处理了这个问题.您最需要担心线段的开始或结束.从概念上讲,一旦你掌握了基本算法,就没有太大的变化.同样,这对于使用圆圈进行碰撞检测非常有用:给定voronoi区域,您可以知道要测试碰撞的哪个线段.
这甚至有帮助吗?反馈意见.我很乐意澄清任何事情.解释没有视觉效果的voronoi图可能是一个坏主意.