参考网址:
https://blog.csdn.net/a1047120490/article/details/106983168
https://blog.csdn.net/romantic_jie/article/details/114012756

在这里插入图片描述
图1:展示起点s和终点e
图2:假设是A*寻路的结果,粉色线就是路径,规律是以公用边的中点为路径点,然后连接起来就是寻路的路径。
图3:绿色路径是经过漏斗算法或者叫做拉绳算法平滑之后的路径。
可以对比图2和图3的路径,会发现图3的绿色路径更加平滑,转折较少,接近最短路径。
下面介绍漏斗算法的具体实现过程:
前置知识:
1)规定三角形顶点顺序为逆时针方向,比如第一个三角形是p0p1p2。
2)规定漏斗的左边和右边,比如这里的sp1和sp2,由于p1点在三角p0p1p2三角形顶点顺序中,在p2之前,我们就约定sp1为漏斗左边,sp2为漏斗右边。
在这里插入图片描述
p1和p2是相邻两个三角形的公用边,边sp1、边sp2、边p1p2,三个边形成一个三角形(形似漏斗,顾称之为漏斗算法)。其中边p1p2为漏斗的开口,它是三角形的底边。

边p1p3是另一个三角形的公用边。此时,连接sp3,新漏斗的左边是sp1(和旧漏斗的左边重合),而新漏斗的右边是sp3,比较旧漏斗sp1和sp2,和新漏斗sp1和sp3,发现新漏斗的开口更小,所以判定本次漏斗边为有效更新。
在这里插入图片描述
旧漏斗:sp1和sp3,新漏斗sp4和sp3,新漏斗的开口更小,所以本次更新有效。
在这里插入图片描述
旧漏斗:sp4和sp3,新漏斗sp4和sp5,新漏斗的开口更小,所以本次更新有效。
在这里插入图片描述

旧漏斗:sp4和sp5,新漏斗:sp4和sp6,但是此时的新漏斗的右边sp6已经翻转到左边sp4的左边了,判定此次更新失败,并认为旧漏斗的左边sp4的点p4为拐点。并以p4点为漏斗的尖端顶点,左边p4p7和右边p4p6构成新漏斗继续更新。
在这里插入图片描述
旧漏斗:p4p7和p4p6,新漏斗:p4p8和p4p6,新漏斗的开口更小,所以本次更新有效。
在这里插入图片描述
旧漏斗:p4p8和p4p6,新漏斗:p4p8和p4p9,新漏斗的开口更小,所以本次更新有效。
在这里插入图片描述
旧漏斗:p4p8和p4p9,新漏斗:p4p10和p4p9,新漏斗的开口更小,所以本次更新有效。
在这里插入图片描述
旧漏斗:p4p10和p4p9,新漏斗:p4p10和p4p11,发现漏斗口增大,本次移动无效,故此时p9为拐点。p9p10和p9p11为新漏斗。
在这里插入图片描述
p9p10和p9p11为漏斗,此时三角形无公用边,而终点e在最后一个三角形内,连接p9和e点,此时新漏斗p9p10和p9pe的开口小于旧漏斗,更新有效,最终形成的路径为:s->p4->p9->e。

更多推荐