> 文档中心 > Far planner 代码系列(29) EnclosePolygonsCheck()

Far planner 代码系列(29) EnclosePolygonsCheck()

今天我们再讲一下 EnclosePolygonsCheck()函数,首先说几个预备的知识:

        1、polys_ctnodes_是存放每一个polygon的首个ctnode,通过front或back可以循环到该polygon的每一个ctnodes

        2、ctnode的is_ground_associate属性的标识位(true or false)在AdjustCTNodeHeight函数里进行修改的

        有了上面的知识点,我们来看函数:

        函数首先循环我们的 polys_ctnodes_ 取出每个polygon的首个ctnode,然后按front的方向区遍历该polygon剩下的ctnode。如果front方向的ctnode没有global_match,那么我们就跳过剩下的步骤,继续往该front方向的front方向继续寻找ctnode,如下图所示:

         如图所示,左边就是正常情况下is_global_match为true的情况,右边就是它的front方向的is_global_match为false的情况,找了它的front的front 也就是ctnode4。

        接下来看函数:

         当我们判断ctnodes的连接是不是顺序的时候,如果是左图的情况,那么就是顺序的,如果是右图的情况,这时候就不是顺序连接的因为ctnode1本来连接ctnode5,现在却连到了ctnode4,那么这时候,IsCTNodesConnectWithinOrder就会用IsInCylinder函数去判断ctnode5ctnode1和ctnode4的连线的空间约束条件是否满足,如果满足,那就把ctnode5返回给block_vertex,如果block_vertex(也就是ctnode5满足is_ground_associate且在margin_range范围内,那么我们就认为block_vertex(也就是ctnode5是组成该polygon的一个必要的点。

开发者涨薪指南 Far planner 代码系列(29) EnclosePolygonsCheck() 48位大咖的思考法则、工作方式、逻辑体系