简单愚蠢漏斗算法如何工作?


Answers:


18

该算法从您先前找到的路径开始,在这种情况下为三角形列表:

路径

Mikko博客文章底部的代码构造了portals数组,该数组是代表路径多边形之间的线段的线段列表。这些是平滑路径必须经过的“门户”(或者来自“让我们跟踪多边形边缘中点”的多边形边缘)。请注意,门户网站列表的起点和终点以退化的线段为起点和终点。

该门户网站列表在他的图片中显示为黄色虚线段。

门户网站

该算法从宽漏斗开始,然后通过沿入口侧边点(线段的端点)迭代地向前移动漏斗边来进行,只要这能拉紧漏斗(AD)。

算法

这意味着每次向前移动都应将漏斗边缘向内移动,这可以通过代表旧边和潜在新边的向量的叉积来检查(下图中的P × Q;另请参见triarea2Mikko的代码)。如果向前移动某一边不会使漏斗变紧,则我们不会针对门户网站的当前迭代(E)更新该边。

向内移动

另一个需要处理的情况是漏斗退化为线段时。为了解决这个问题,算法再次使用叉积检查了边的一侧是否在“错误的”侧,这一次是由漏斗顶点和右侧和左侧端点(R × S in下图)。

简并漏斗

如果是这种情况,则将来自漏斗顶点的矢量和正确的侧端点添加到平滑路径(上图中的R),并以其端点作为新顶点(FG)重新开始算法,除非,当然,如果这是目标。


2
@Rolfcore答案清楚吗?如果没有,哪些部分需要改进?
埃里克

我认为他只是忘了接受答案,这个答案非常好,应该连载^^。
GameDeveloper

坦率地说,也许是在F动作中,您不会告诉我们不要从头开始,因为有一个朝南的小弯角可能会导致最紧的漏斗,因此我们必须等待机器人侧实际上使测试,而不仅仅是一个。所以我们用G代替F来做。.好的解释:)
GameDeveloper
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.