CN113449910B - 一种基于顺序存储二叉树的航线自动生成方法 - Google Patents
一种基于顺序存储二叉树的航线自动生成方法 Download PDFInfo
- Publication number
- CN113449910B CN113449910B CN202110705953.8A CN202110705953A CN113449910B CN 113449910 B CN113449910 B CN 113449910B CN 202110705953 A CN202110705953 A CN 202110705953A CN 113449910 B CN113449910 B CN 113449910B
- Authority
- CN
- China
- Prior art keywords
- binary tree
- point
- node
- route
- index
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
- G06Q10/04—Forecasting or optimisation specially adapted for administrative or management purposes, e.g. linear programming or "cutting stock problem"
- G06Q10/047—Optimisation of routes or paths, e.g. travelling salesman problem
-
- G—PHYSICS
- G01—MEASURING; TESTING
- G01C—MEASURING DISTANCES, LEVELS OR BEARINGS; SURVEYING; NAVIGATION; GYROSCOPIC INSTRUMENTS; PHOTOGRAMMETRY OR VIDEOGRAMMETRY
- G01C21/00—Navigation; Navigational instruments not provided for in groups G01C1/00 - G01C19/00
- G01C21/20—Instruments for performing navigational calculations
- G01C21/203—Specially adapted for sailing ships
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Radar, Positioning & Navigation (AREA)
- Remote Sensing (AREA)
- Human Resources & Organizations (AREA)
- Economics (AREA)
- Strategic Management (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Game Theory and Decision Science (AREA)
- Development Economics (AREA)
- Automation & Control Theory (AREA)
- Entrepreneurship & Innovation (AREA)
- Marketing (AREA)
- Operations Research (AREA)
- Quality & Reliability (AREA)
- Tourism & Hospitality (AREA)
- General Business, Economics & Management (AREA)
- Theoretical Computer Science (AREA)
- Navigation (AREA)
Abstract
本发明涉及一种基于顺序存储二叉树的航线自动生成方法,包括以下步骤:步骤1、初始化二叉树结点数组、航线索引数组;步骤2、二叉树的根结点初始化为起始点;步骤3、判断当前测试线上是否存在碍航区,如果不存在,连接起始点和终点作为自动生成的航线;如果存在,完成当前测试线的子二叉树构建;步骤4、将子二叉树的左、右结点先后添加到结点数组;步骤5、构建左子树和右子树;步骤6、在二叉树构建过程中,每完成一条可行性航线的搜索,将终点结构体添加到结点数组;步骤7、根据存储的航线索引数组和结点数组,比较选出最短可行性航线。本发明避免了航路二叉树的遍历搜索和航路点的判别比较,大大降低了时间复杂度和空间复杂度。
Description
技术领域
本发明属于船舶和航海技术领域,涉及航线自动生成方法,尤其一种基于顺序存储二叉树的航线自动生成方法。
背景技术
电子海图已经广泛应用于海上航行,利用矢量电子海图提供的数据,找出环境空间中的可航行区域与不可航区域,根据起点和目标点位置信息自动生成最优无碰航线。在基于电子海图的自动航线设计中,障碍区绕行是其中的一个关键问题。有人利用方位相差最小和航段最大等准则,建立自动绕行碍航区的机制,在遇到障碍物时直接进行左右路径选择,这种贪婪方法得到的航线可能不是实际的最优航线。为了避免贪婪算法的失真,航路二叉树算法在航线生成过程中进行多路径优化,把起始点作为当前测试点,搜索当前测试点的最近绕行碍航区,根据航路绕行碍航区二分性的特点,确定左、右子结点并建立航路子二叉树,以子结点为当前测试点,重复上述步骤得到各航路子二叉树,最后在所有可行性航路中提取最短距离航线。但是采用航路二叉树方法获取最优航线,在构建二叉树时采用“分段存储”各航路子二叉树的方法实现航路点的保存,按照航路子二叉树的构建顺序,分别将其存储在管理航路二叉树的动态链表中,还需按照“深度优先”和“试探搜索”相结合的原则进行航路点的判别和比较,搜索得到所有可行性航线。对于障碍物密集、地形复杂的海区,航路二叉树方法生成的航路点较多,时间复杂度和空间复杂度会显著提高。
发明内容
本发明的目的在于克服现有技术的不足,提供一种基于顺序存储二叉树的航线自动生成方法,根据电子海图矢量数据提取出的碍航区集合,通过计算机自动计算分析,在海图上任意两点之间快速自动生成最短可行性航线。
本发明解决其现实问题是采取以下技术方案实现的:
一种基于顺序存储二叉树的航线自动生成方法,包括以下步骤:
步骤1、初始化测试线为起始点和终点之间的连线,初始化二叉树结点数组、航线索引数组为空;
步骤2、二叉树的根结点初始化为起始点,并且将根结点结构体存储到结点数组中;
步骤3、判断当前测试线上是否存在碍航区,如果存在,转到步骤4;如果不存在,转到步骤6;
步骤4、找到距离最近的碍航区,从左、右两侧切点进行绕行,直至找到不位于自身最近碍航区上的航路点,完成当前测试线的子二叉树构建;
步骤5、构建完当前测试线的子二叉树之后,将生成的左、右两个结点先后添加到结点数组中;
步骤6、如果当前测试线上不存在碍航区,分别将终点及其索引存储到二叉树结点数组及航线索引数组;判断当前是否已完成了全局二叉树还是子二叉树,如果已完成全局二叉树的构建,跳到步骤10;否则返回递归循环的步骤7或步骤8;
步骤7、更新测试线起点为左结点结构体中航路点链表的最后一个点,测试线终点不变,转到步骤3构建左子树;
步骤8、更新测试线起点为右结点结构体中航路点链表的最后一个点,测试线终点不变,转到步骤3构建右子树;
步骤9、左、右子树构建完成,判断是否已完成全局二叉树的构建,如果已完成全局二叉树的构建,跳到步骤10;否则返回递归循环的步骤7或步骤8;
步骤10、全局二叉树构建完成,航线索引数组存储了所有可行性航线终点在结点数组中的索引,通过该索引找到所有可行性航线的路径长度,比较选出最短路径长度的可行性航线,并从终点出发通过父结点索引回溯到起始点,从而生成从起始点到终点的最短航线。
而且,所述步骤1的具体方法为:
(1)测试线是指当前航路点到终点之间的连线,用来检测前进方向上是否存在碍航区,初始化测试线为起始点和终点之间的连线;
(2)定义二叉树结点结构体,包括航路点链表、父结点在结点数组的索引、从起始点到当前结点中航路点链表最后一个航路点的累计路径长度,初始化结点数组为空,在构建二叉树的过程中,按照结点的生成顺序,将各个结点结构体顺序存储到结点数组中;
(3)初始化航线索引数组为空,在构建二叉树过程中会形成多条路径到达终点,每搜索到一条可行性航线,都会将该条航线的终点作为结点存储到结点数组中,并且将该结点(终点)在结点数组中的索引存储到航线索引数组中。
而且,所述步骤4的具体方法为:找到距离最近的绕行碍航区,根据绕行碍航区的航路二分性特点,得到左右两条与当前测试线方位相差最大的连线,取这两条线在碍航区上相应的交点为左右切点,然后分别判断这两点是否位于它们自身最近的碍航区上,如果不是,分别记录下左右切点到对应的航路点链表中,否则进行绕行碍航区处理直至找到满足此判断的航路点,并且记录下绕行过程中所有的航路点到对应的航路点链表中,则当前测试线的子二叉树搜索完毕;而对于生成子二叉树的左、右两条路径还与其他的碍航区相交的情形,从当前测试线起点出发沿着测试线方向前进,找到当前测试线与最近绕行碍航区的交点,之后沿着碍航区轮廓边线直至左(右)切点停止,从而实现此类复杂情况的绕行处理。
而且,所述步骤4的对于生成子二叉树的左、右两条路径还与其他的碍航区相交情形的处理步骤包括:
(1)遍历任务海区内的碍航区集合,判断生成子二叉树的左、右两条路径是否与其他碍航区相交;
(2)如果相交,计算当前测试线与最近碍航区的所有交点,找出距离测试线起点最近的交点;
(3)从左、右切点顺、逆时针沿最近碍航区绕行,取出最近碍航区的下一个顶点,判断该顶点是否仍在测试线的左、右侧,如果是,将该顶点添加到左、右切点所在的航路点链表中,并继续取出最近碍航区的下一个顶点,否则将交点添加到左、右切点所在的航路点链表中,并结束判断循环。
而且,所述步骤6的判断当前是完成了全局二叉树还是子二叉树的构建的具体方法为:
如果终点在二叉树结点数组中的索引为2,即起始点与终点之间没有任何碍航区,是连通可达的,则当前已完成全局二叉树的构建;如果终点在二叉树结点数组中的索引大于2,则当前已完成子二叉树的构建。
而且,所述步骤9的判断是否已完成二叉树的构建的具体方法为:
二叉树构建是通过递归函数实现的,在函数中定义全局变量记录当前结点在结点数组的索引,以便将所有结点按生成顺序存储到结点数组中,同时定义局部变量记录当前递归函数中左、右结点索引,当递归函数回到最上层时,局部变量左结点索引为2,右结点索引为3,能够作为判断是否完成全局二叉树构建的依据。
而且,所述步骤10的通过该索引找到所有可行性航线的路径长度,比较选出最短路径长度的可行性航线,并从终点出发通过父结点索引回溯到起始点,从而生成从起始点到终点的最短航线的具体步骤包括:
(1)二叉树构建完成之后,顺序遍历航线索引数组,取出当前索引值,访问二叉树结点数组中当前索引的结点结构体,记录该结点结构体中的路径长度值,遍历完航线索引数组,即可找到所有可行性航线的路径长度;
(2)比较所有可行性航线的路径长度,选出其中的最短路径,记录最短可行性航线的索引,即该航线终点在结点数组中的索引;
(3)从该航线终点索引出发,通过终点的父结点索引找到上一个结点,并记录下该结点对应的航路点链表,如果该结点不是起始点,则继续通过父结点索引回溯寻找并记录对应的航路点链表,直至回溯到起始点为止,从而生成从起始点到终点的最短航线。
本发明的优点和有益效果:
1、本发明在步骤2、5、6中根据结点的生成顺序,将各结点结构体顺序存储到二叉树结点数组中,并且将所有可行性航线的终点在结点数组的索引存储到航线索引数组中;又如步骤10中所述,在二叉树构建完成之后,根据航线索引数组和二叉树结点数组,找出最短的可行性航线,避免了航路二叉树的遍历搜索和航路点的判别比较,大大降低了时间复杂度和空间复杂度。
2、本发明在步骤4中对于生成子二叉树的左、右两条路径还与其他的碍航区相交的情形进行了简化处理,从当前测试线起点出发沿着测试线方向前进,找到当前测试线与最近绕行碍航区的交点,之后沿着碍航区轮廓边线直至左(右)切点停止,从而实现这种复杂情况的绕行处理,避免了嵌套构建子二叉树,从而减少了测试线与多个碍航区的相交判断与碍航区绕行,提高了航线生成效率。
3、本发明通过顺序存储二叉树的方式搜索出多条可行性航线,可以扩展成多约束最优航线搜索机制,在所有可行性航线中加入航线最短、转弯限制、航路点个数等约束条件,筛选出多条不同约束条件下的最优航线。
附图说明
图1为本发明的生成子二叉树的左、右两条路径还与其他的碍航区相交的情形的绕行处理示意图;
图2为本发明实施例生成的最短航线图。
具体实施方式
以下结合附图对本发明实施例作进一步详述:
一种基于顺序存储二叉树的航线自动生成方法,包括以下步骤:
步骤1、初始化测试线为起始点和终点之间的连线,初始化二叉树结点数组、航线索引数组为空;
所述步骤1的具体方法为:
(1)测试线是指当前航路点到终点之间的连线,用来检测前进方向上是否存在碍航区,初始化测试线为起始点和终点之间的连线;
(2)定义二叉树结点结构体,包括航路点链表、父结点在结点数组的索引、从起始点到当前结点中航路点链表最后一个航路点的累计路径长度,初始化结点数组为空,在构建二叉树的过程中,按照结点的生成顺序,将各个结点结构体顺序存储到结点数组中;
(3)初始化航线索引数组为空,在构建二叉树过程中会形成多条路径到达终点,每搜索到一条可行性航线,都会将该条航线的终点作为结点存储到结点数组中,并且将该结点(终点)在结点数组中的索引存储到航线索引数组中。
步骤2、二叉树的根结点初始化为起始点,并且将根结点结构体存储到结点数组中;
在本实施例中,该结点结构体中航路点链表仅包含起始点,父结点索引赋值0,路径长度赋值0;
步骤3、判断当前测试线上是否存在碍航区,如果存在,转到步骤4;如果不存在,转到步骤6;
步骤4、找到距离最近的绕行碍航区,根据绕行碍航区的航路二分性特点,得到左、右两条与当前测试线方位相差(夹角)最大的连线,取这两条线在碍航区上相应的交点为左、右切点,然后分别判断这两点是否位于它们自身最近的碍航区上,如果不是,分别记录下左、右切点到对应的航路点链表中,否则进行绕行碍航区处理直至找到满足此判断的航路点,并且记录下绕行过程中所有的航路点到对应的航路点链表中,则当前测试线的子二叉树搜索完毕;而对于生成子二叉树的左、右两条路径还与其他的碍航区相交的情形,为了提高航线生成效率,从当前测试线起点出发沿着测试线方向前进,找到当前测试线与最近绕行碍航区的交点,之后沿着碍航区轮廓边线直至左、右切点停止,从而实现这种复杂情况的绕行处理。
在本实施例中,找到距离最近的绕行碍航区,在此碍航区上,作各顶点与当前测试线的起点之间的连线,根据绕行碍航区的航路二分性特点,得到左、右两条与当前测试线方位相差(夹角)最大的连线,取这两条线在碍航区上相应的交点为左、右切点,然后分别判断这两点是否位于它们自身最近的碍航区上,如果不是,分别记录下左右切点到对应的航路点链表中,否则进行绕行碍航区处理直至找到满足此判断的航路点,并且记录下绕行过程中所有的航路点到对应的航路点链表中,这样当前测试线的子二叉树搜索完毕。而对于生成子二叉树的左、右两条路径还与其他的碍航区相交的情形,如图1所示,为了提高航线生成效率,从当前测试线起点出发沿着测试线方向前进,找到当前测试线与最近绕行碍航区的交点,之后沿着碍航区轮廓边线直至左、右切点停止,从而实现这种复杂情况的绕行处理。
所述步骤4的对于生成子二叉树的左、右两条路径还可能与其他的碍航区相交情形的处理步骤包括:
(1)遍历任务海区内的碍航区集合,判断生成子二叉树的左、右两条路径是否与其他碍航区相交;
(2)如果相交,计算当前测试线与最近碍航区的所有交点,找出距离测试线起点最近的交点;
(3)从左(右)切点顺(逆)时针沿最近碍航区绕行,取出最近碍航区的下一个顶点,判断该顶点是否仍在测试线的左(右)侧,如果是,将该顶点添加到左(右)切点所在的航路点链表中,并继续取出最近碍航区的下一个顶点,否则将交点添加到左(右)切点所在的航路点链表中,并结束判断循环。
步骤5、构建完当前测试线的子二叉树之后,将生成的左、右两个结点先后添加到结点数组中;左、右结点结构体中的航路点链表为绕行过程中所有的航路点,父结点索引均赋值为当前测试线起点所在结点的索引,分别计算出左、右结点的路径长度,即父结点的路径长度与父结点到当前左(右)结点的路径长度之和。
步骤6、如果当前测试线上不存在碍航区,即连通直达,将终点添加到二叉树结点数组;该结点结构体中包含航路点链表(仅包含终点)、父结点索引、路径长度;其中,该结点结构体中航路点链表仅包含终点,父结点索引为当前测试线起点所在结点的索引,计算出该结点(终点)的路径长度。将终点在结点数组中的索引存储到航线索引数组。判断当前是完成了全局二叉树还是子二叉树的构建,如果已完成全局二叉树的构建,则跳到步骤10;如果已完成子二叉树的构建,则返回递归循环的步骤7或步骤8。
所述步骤6的判断当前是完成了全局二叉树还是子二叉树的构建的具体方法为:
如果终点在二叉树结点数组中的索引为2,即起始点与终点之间没有任何碍航区,是连通可达的,则当前已完成全局二叉树的构建;如果终点在二叉树结点数组中的索引大于2,则当前已完成子二叉树的构建。
步骤7、更新测试线起点为左结点结构体中航路点链表的最后一个点,测试线终点不变,转到步骤3构建左子树;
步骤8、更新测试线起点为右结点结构体中航路点链表的最后一个点,测试线终点不变,转到步骤3构建右子树;
步骤9、左、右子树构建完成,如果已完成全局二叉树的构建,跳到步骤10;否则返回递归循环的步骤7或步骤8。
在本实施例中,所述步骤9的左、右子树构建完成之后,通过定义递归函数局部变量存储左、右结点在结点数组的索引从而判断是否完成二叉树的构建,如果左结点索引局部变量等于2,且右结点索引局部变量等于3,则已完成全局二叉树的构建,跳到步骤10;否则就只是完成子二叉树的构建,返回递归循环的步骤7或步骤8。
所述步骤9的通过定义递归函数局部变量存储左、右结点在结点数组的索引从而判断是否完成二叉树的构建的具体方法为:
二叉树构建是通过递归函数实现的,在函数中定义全局变量记录当前结点在结点数组的索引,以便将所有结点按生成顺序存储到结点数组中,同时定义局部变量记录当前递归函数中左、右结点索引,当递归函数回到最上层时,局部变量左结点索引为2,右结点索引为3,可以作为判断是否完成全局二叉树构建的依据。
步骤10、全局二叉树构建完成,航线索引数组存储了所有可行性航线终点在结点数组中的索引,通过该索引找到所有可行性航线的路径长度,比较选出最短路径长度的可行性航线,并从终点出发通过父结点索引回溯到起始点,从而生成从起始点到终点的最短航线。
所述步骤10的通过该索引找到所有可行性航线的路径长度,比较选出最短路径长度的可行性航线,并从终点出发通过父结点索引回溯到起始点,从而生成从起始点到终点的最短航线的具体步骤包括:
(1)二叉树构建完成之后,顺序遍历航线索引数组,取出当前索引值,访问二叉树结点数组中当前索引的结点结构体,记录该结点结构体中的路径长度值,遍历完航线索引数组,即可找到所有可行性航线的路径长度;
(2)比较所有可行性航线的路径长度,选出其中的最短路径,记录最短可行性航线的索引,即该航线终点在结点数组中的索引;
(3)从该航线终点索引出发,通过终点的父结点索引找到上一个结点,并记录下该结点对应的航路点链表,如果该结点不是起始点,则继续通过父结点索引回溯寻找并记录对应的航路点链表,直至回溯到起始点为止,从而生成从起始点到终点的最短航线。
本发明的效果可通过以下仿真实验作进一步说明:
以21.5°N~21.98°N,112.5°E~113°E的开源海图数据xml文件为基础,读取其中的障碍物信息,从而将该任务海区环境地图划分为可航区和碍航区,在实现环境建模后,利用本发明方法进行最短路径搜索,生成起始点S到目的点T之间的最短航线。
从图2可以看出,本发明方法能够实现在典型背景环境下的两点间航线规划,计算复杂度低、规划效率高。
本发明的工作原理是:
一种基于顺序存储二叉树的航线自动生成方法,包括以下步骤:
(1)初始化测试线为起始点和终点之间的连线,初始化二叉树结点数组、航线索引数组为空;(2)二叉树的根结点初始化为起始点,并且将根结点结构体存储到结点数组中;(3)判断当前测试线上是否存在碍航区,如果不存在,连接起始点和终点作为自动生成的航线;如果存在,找到距离最近的碍航区,从左、右两侧切点进行绕行,直至找到不位于自身最近碍航区上的航路点,完成当前测试线的子二叉树构建;(4)将子二叉树的左、右结点先后添加到结点数组,其中结点结构体包含绕行生成的航路点链表、父结点在结点数组的索引、累计路径长度;(5)更新测试线为左结点中最后一个航路点与终点的连线,构建左子树;更新测试线为右结点中最后一个航路点与终点的连线,构建右子树;(6)在二叉树构建过程中,如果当前结点的最后一个航路点与终点之间不存在碍航区,则已完成一条可行性航线的搜索,将终点结构体添加到结点数组,并记录终点索引于航线索引数组;(7)二叉树构建完成之后,通过航线索引数组找到所有可行性航线的路径长度,比较选出最短路径长度的可行性航线,从终点出发通过父结点索引回溯到起始点,从而生出最短航线。
需要强调的是,本发明所述实施例是说明性的,而不是限定性的,因此本发明包括并不限于具体实施方式中所述实施例,凡是由本领域技术人员根据本发明的技术方案得出的其他实施方式,同样属于本发明保护的范围。
Claims (5)
1.一种基于顺序存储二叉树的航线自动生成方法,其特征在于:包括以下步骤:
步骤1、初始化测试线为起始点和终点之间的连线,初始化二叉树结点数组、航线索引数组为空;
步骤2、二叉树的根结点初始化为起始点,并且将根结点结构体存储到结点数组中;
步骤3、判断当前测试线上是否存在碍航区,如果存在,转到步骤4;如果不存在,转到步骤6;
步骤4、找到距离最近的碍航区,从左、右两侧切点进行绕行,直至找到不位于自身最近碍航区上的航路点,完成当前测试线的子二叉树构建;
步骤5、构建完当前测试线的子二叉树之后,将生成的左、右两个结点先后添加到结点数组中;
步骤6、如果当前测试线上不存在碍航区,分别将终点及其索引存储到二叉树结点数组及航线索引数组;判断当前是否已完成了全局二叉树还是子二叉树,如果已完成全局二叉树的构建,跳到步骤10;否则返回递归循环的步骤7或步骤8;
步骤7、更新测试线起点为左结点结构体中航路点链表的最后一个点,测试线终点不变,转到步骤3构建左子树;
步骤8、更新测试线起点为右结点结构体中航路点链表的最后一个点,测试线终点不变,转到步骤3构建右子树;
步骤9、左、右子树构建完成,判断是否已完成全局二叉树的构建,如果已完成全局二叉树的构建,跳到步骤10;否则返回递归循环的步骤7或步骤8;
步骤10、全局二叉树构建完成,航线索引数组存储了所有可行性航线终点在结点数组中的索引,通过该索引找到所有可行性航线的路径长度,比较选出最短路径长度的可行性航线,并从终点出发通过父结点索引回溯到起始点,从而生成从起始点到终点的最短航线;
所述步骤1的具体方法为:
(1)测试线是指当前航路点到终点之间的连线,用来检测前进方向上是否存在碍航区,初始化测试线为起始点和终点之间的连线;
(2)定义二叉树结点结构体,包括航路点链表、父结点在结点数组的索引、从起始点到当前结点中航路点链表最后一个航路点的累计路径长度,初始化结点数组为空,在构建二叉树的过程中,按照结点的生成顺序,将各个结点结构体顺序存储到结点数组中;
(3)初始化航线索引数组为空,在构建二叉树过程中会形成多条路径到达终点,每搜索到一条可行性航线,都会将该条航线的终点作为结点存储到结点数组中,并且将该结点在结点数组中的索引存储到航线索引数组中;
所述步骤10的通过该索引找到所有可行性航线的路径长度,比较选出最短路径长度的可行性航线,并从终点出发通过父结点索引回溯到起始点,从而生成从起始点到终点的最短航线的具体步骤包括:
(1)二叉树构建完成之后,顺序遍历航线索引数组,取出当前索引值,访问二叉树结点数组中当前索引的结点结构体,记录该结点结构体中的路径长度值,遍历完航线索引数组,即可找到所有可行性航线的路径长度;
(2)比较所有可行性航线的路径长度,选出其中的最短路径,记录最短可行性航线终点在结点数组中的索引;
(3)从该航线终点索引出发,通过终点的父结点索引找到上一个结点,并记录下该结点对应的航路点链表,如果该结点不是起始点,则继续通过父结点索引回溯寻找并记录对应的航路点链表,直至回溯到起始点为止,从而生成从起始点到终点的最短航线。
2.根据权利要求1所述的一种基于顺序存储二叉树的航线自动生成方法,其特征在于:所述步骤4的具体方法为:找到距离最近的绕行碍航区,根据绕行碍航区的航路二分性特点,得到左右两条与当前测试线方位相差最大的连线,取这两条线在碍航区上相应的交点为左右切点,然后分别判断这两点是否位于它们自身最近的碍航区上,如果不是,分别记录下左右切点到对应的航路点链表中,否则进行绕行碍航区处理直至找到满足此判断的航路点,并且记录下绕行过程中所有的航路点到对应的航路点链表中,则当前测试线的子二叉树搜索完毕;而对于生成子二叉树的左、右两条路径还与其他的碍航区相交的情形,从当前测试线起点出发沿着测试线方向前进,找到当前测试线与最近绕行碍航区的交点,之后沿着碍航区轮廓边线直至左、右切点停止,从而实现此类复杂情况的绕行处理。
3.根据权利要求2所述的一种基于顺序存储二叉树的航线自动生成方法,其特征在于:所述步骤4的对于生成子二叉树的左、右两条路径还与其他的碍航区相交情形的处理步骤包括:
(1)遍历任务海区内的碍航区集合,判断生成子二叉树的左、右两条路径是否与其他碍航区相交;
(2)如果相交,计算当前测试线与最近碍航区的所有交点,找出距离测试线起点最近的交点;
(3)从左、右切点顺、逆时针沿最近碍航区绕行,取出最近碍航区的下一个顶点,判断该顶点是否仍在测试线的左、右侧,如果是,将该顶点添加到左、右切点所在的航路点链表中,并继续取出最近碍航区的下一个顶点,否则将交点添加到左、右切点所在的航路点链表中,并结束判断循环。
4.根据权利要求1所述的一种基于顺序存储二叉树的航线自动生成方法,其特征在于:所述步骤6的判断当前是否已完成了全局二叉树还是子二叉树的构建的具体方法为:
如果终点在二叉树结点数组中的索引为2,即起始点与终点之间没有任何碍航区,是连通可达的,则当前已完成全局二叉树的构建;如果终点在二叉树结点数组中的索引大于2,则当前已完成子二叉树的构建。
5.根据权利要求1所述的一种基于顺序存储二叉树的航线自动生成方法,其特征在于:所述步骤9的判断是否已完成二叉树的构建的具体方法为:
二叉树构建是通过递归函数实现的,在函数中定义全局变量记录当前结点在结点数组的索引,以便将所有结点按生成顺序存储到结点数组中,同时定义局部变量记录当前递归函数中左、右结点索引,当递归函数回到最上层时,局部变量左结点索引为2,右结点索引为3,能够作为判断是否完成全局二叉树构建的依据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110705953.8A CN113449910B (zh) | 2021-06-24 | 2021-06-24 | 一种基于顺序存储二叉树的航线自动生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110705953.8A CN113449910B (zh) | 2021-06-24 | 2021-06-24 | 一种基于顺序存储二叉树的航线自动生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113449910A CN113449910A (zh) | 2021-09-28 |
CN113449910B true CN113449910B (zh) | 2022-04-12 |
Family
ID=77812582
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110705953.8A Active CN113449910B (zh) | 2021-06-24 | 2021-06-24 | 一种基于顺序存储二叉树的航线自动生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113449910B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113393055B (zh) * | 2021-07-05 | 2023-07-25 | 苏州清研捷运信息科技有限公司 | 一种货车导航沿途限行数据的预处理及使用方法 |
CN114136322B (zh) * | 2021-11-19 | 2023-06-20 | 中国船舶重工集团公司第七0七研究所 | 一种基于经验航法的大型无人艇自动航线规划 |
CN116343958B (zh) * | 2023-03-03 | 2024-05-10 | 湖北工业大学 | 多相体系连通性的判断方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110220514A (zh) * | 2019-05-27 | 2019-09-10 | 中国电子科技集团公司第二十八研究所 | 一种基于海图数据的动态航线生成方法 |
CN112947485A (zh) * | 2021-03-31 | 2021-06-11 | 亿海蓝(北京)数据技术股份公司 | 路径规划方法及系统 |
-
2021
- 2021-06-24 CN CN202110705953.8A patent/CN113449910B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110220514A (zh) * | 2019-05-27 | 2019-09-10 | 中国电子科技集团公司第二十八研究所 | 一种基于海图数据的动态航线生成方法 |
CN112947485A (zh) * | 2021-03-31 | 2021-06-11 | 亿海蓝(北京)数据技术股份公司 | 路径规划方法及系统 |
Non-Patent Citations (2)
Title |
---|
基于航路二叉树的航线自动生成方法;汪柱等;《武汉大学学报(信息科学版)》;20100405(第04期);全文 * |
顺序存储二叉树的遍历及其应用研究;马靖善等;《渤海大学学报(自然科学版)》;20130615(第02期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113449910A (zh) | 2021-09-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113449910B (zh) | 一种基于顺序存储二叉树的航线自动生成方法 | |
CN100523735C (zh) | 一种基于小网格路网组织结构的快速地图匹配方法 | |
US11747826B2 (en) | Method for route optimization based on dynamic window and redundant node filtering | |
Freeman et al. | On searching a contour map for a given terrain elevation profile | |
CN113485369B (zh) | 改进a*算法的室内移动机器人路径规划和路径优化方法 | |
CN102693266B (zh) | 搜索数据库的方法、生成索引结构的导航设备和方法 | |
CN108827335B (zh) | 一种基于单向搜索模型的最短路径规划方法 | |
CN104266656A (zh) | 用于道路网的最短路径搜索方法及装置 | |
CN112987799B (zh) | 一种基于改进rrt算法的无人机路径规划方法 | |
CN110006429A (zh) | 一种基于深度优化的无人船航迹规划方法 | |
CN108444490B (zh) | 基于可视图和a*算法深度融合的机器人路径规划方法 | |
CN107121146B (zh) | 基于路链深度的最优路径规划方法 | |
CN110220521A (zh) | 一种高精地图的生成方法和装置 | |
CN107092978B (zh) | 一种面向虚拟地球的最短路径分层规划方法 | |
CN105091889A (zh) | 一种热点路径的确定方法及设备 | |
CN113048981B (zh) | 一种面向dem的无道路区域路径规划算法的方法 | |
CN110220510A (zh) | 一种考虑地图准确性的水下机器人海底地形匹配导航路径规划方法 | |
CN115164907A (zh) | 基于动态权重的a*算法的森林作业机器人路径规划方法 | |
CN113865589A (zh) | 一种基于地形坡度的长距离快速路径规划方法 | |
CN104596527A (zh) | 一种划分各级引导道路和细街路的方法 | |
CN112484733B (zh) | 一种基于拓扑图的强化学习室内导航方法 | |
CN114088098A (zh) | 一种用于极区水下航行器数据库辅助导航路径规划方法 | |
CN111899316B (zh) | 一种地层结构的二维地层网格数字化编辑方法及装置 | |
WO2022007227A1 (zh) | 一种自动泊车的方法和车辆 | |
CN113808424A (zh) | 基于双向Dijkstra的城市路网K条最短路径的获取方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |