一种基于自适应空间剖分的离散点云重复点快速查找方法与流程

文档序号:25859056发布日期:2021-07-13 16:14阅读:105来源:国知局
一种基于自适应空间剖分的离散点云重复点快速查找方法与流程

本发明涉及计算力学中网格生成和网格变形,尤其涉及计算流体力学中的网格生成和网格变形领域中的一种基于自适应空间剖分的离散点云重复点快速查找方法。



背景技术:

计算流体力学cfd(computationalfluiddynamics)是开展流体力学机理研究的重要手段之一,在航空航天飞行器设计与性能评估中发挥着愈来愈重要的作用。cfd通过计算网格对流场空间进行离散,然后求解代数离散方程获取流动变量,如密度、压力和温度等,并沿飞行器表面积分得到飞行器整体的性能特性。因此,计算网格是开展cfd数值仿真的基础,决定着数值分析的计算精度和仿真效率,良好的计算网格不仅可以加速收敛,还可以改善预测精度。对于气动外形设计优化、非定常流动和气动弹性等外形需要发生变化的特殊问题,网格变形是开展对应数值仿真的关键技术。

在网格生成和变形中,均可能遇到多个不同点集的合并和匹配问题,就需要对点集中存在的重复点进行标记和删除,以建立统一的点云集合。在实际应用过程中,多采用循环遍历的方式,逐个点进行对比,然后将相互之间重合的点进行标记。对于规模较小的点云问题,该方法能够比较快速地获得重复点的信息。但该算法的时间复杂度是点云中网格点数量的平方,随着点云规模的增大,重复点查找时间迅速增加,将极大地增加网格生成或网格变形的时间消耗,提高数值仿真的计算成本。作者等人曾提出一种离散点云重复点快速查找方法[zl202110308512.4],通过空间剖分的方式,将离散点云所在的长方体空间剖分为多个规则的空间小格,然后在空间小格内查找重复点,并组装得到整个离散点云的重复点信息。该专利所提方法通过对空间进行剖分,降低重复点查找问题的规模,从而能够有效降低重复点查找的时间消耗。专利[zl202110308512.4]中方法对于网格点均匀分布的离散点云具有很好的处理效果,但对于工程应用中常见的网格点非均匀分布的情况,需要人工调整空间的剖分参数,才能将重复点查找的规模降低、有效减少重复点查找的时间消耗,并且很多不包含网格点的无效空间的开辟,将极大地增加方法的计算机内存开销,降低处理问题的规模。



技术实现要素:

本发明的目的是通过构建长方体空间双向链表结构和限定长方体空间中离散网格点的数量,大幅降低重复点查找的计算量,提高重复点查找效率,并且通过减少无效长方体空间的数量,有效降低方法的计算机内存消耗,显著提升处理离散点云问题的规模。

为了实现上述目的,本发明采用如下技术方案:

一种基于自适应空间剖分的离散点云重复点快速查找方法,用于计算流体力学仿真前的离散网格生成,构建网格点拓扑连接关系,生成获取压力、速度、密度物理量的网格,包括以下步骤:

s1:循环遍历离散点云中的所有空间点,计算出所有空间点在三个坐标方向的最大值和最小值,确定离散点云所在空间的边界;

s2:根据全部空间点三个坐标方向的最大值和最小值构建离散点云所在的长方体空间;

s3:将构建的长方体空间作为节点加入双向链表结构,初始化长方体空间双向链表;

s4:检查当前指针指向的当前长方体空间,当网格点数量规模超过限定值时,对长方体空间进行剖分;

s5:从双向链表中删除被剖分的长方体空间,修改当前指针的指向,更新链表信息,并添加新剖分的长方体空间;

s6:循环遍历双向链表,对双向链表中超出限定网格点数量的长方体空间进行剖分,直至全部长方体空间的网格点数量低于限定阈值;

s7:遍历双向链表结构,完成每个长方体空间内部网格点的重复点查重;

s8:组装双向链表中全部长方体空间内的网格点重复信息,得到离散点云中全部网格点重复信息。

在上述技术方案中:在s2中包括:

s21:设定空间点在坐标系中的三个方向的最小值为,最大值为,

s22:根据空间点坐标构建点和点

其中,为大于零的系数;

s23:以点作为角点,构建长方体空间,并计算长方体空间的信息,长方体空间信息包括空间边界位置、网格点数量、网格点在离散点云中的编号。

在上述技术方案中:在s4中:设定网格点数量的限定阈值,如果当前指针指向长方体空间的网格点数量大于限定阈值,则对该长方体空间进行剖分,沿着三个坐标方向将长方体空间均匀分割成八个大小相同的长方体空间,根据原长方体空间的空间边界信息计算新的八个长方体空间的空间边界信息,并统计八个长方体空间中网格点的数量和网格点在离散点云中的编号。

在上述技术方案中:将被剖分的长方体空间从双向链表中删除,更新双向链表的头指针、尾指针的指向信息,如果被剖分的长方体空间的后续节点存在,将当前指针指向后续的长方体空间,如果不存在,当前指针指向为空。

在上述技术方案中:当剖分后的八个长方体空间中:

网格点数量仍大于限定阈值的长方体空间,依次添加到双向链表的起始位置,并更新头指针的指向;

网格点数量大于零且小于等于限定阈值的长方体空间,依次添加到双向链表的结束位置,并更新尾指针的指向;

网格点数量等于零的长方体空间,不加入双向链表,直接舍弃。

在上述技术方案中:在s6中包括:

s61:不停的循环s4和s5,调整当前指针的指向,从链表头部顺序遍历整个链表结构,对链表中大于限定网格点数量的长方体空间进行剖分,并更新链表信息;

s62:当当前指针指向空或当前指针指向的长方体空间网格点数量小于等于限定阈值时,将当前指针指向头指针,循环s61;

s63:不断对链表中不符合网格点数量的长方体空间进行剖分,直至链表头指针指向的长方体空间的网格点数量低于限定阈值,结束循环遍历,完成整个双向链表数据的创建。

在上述技术方案中:重复点查重的方法包括以下步骤:

s71:将当前指针指向头指针,根据s2和s4中构建的网格点在离散点云中的编号,访问离散点云,获取当前指针指向长方体空间中网格点的三维空间坐标;

s72:对当前长方体空间中的第m个点,遍历第1至第m-1个点,分别计算第i个遍历点与第m个点之间的空间距离

如果距离小于阈值,则重合,将标记为重复点,并将重复编号记录为i,退出遍历,

如果距离大于阈值,则不重合,遍历下一个点,直至遍历结束,

如果均不重合,标记为非重复点,所述阈值为正实数,本方案取值0.0000001;

s73:循环上一步遍历过程,对长方体空间内的全部网格点进行遍历查重,获取长方体空间内全部网格点的重复信息;

s74:向后移动当前指针,改变当前长方体空间,重复上述循环遍历过程,直至当前指针指向为空,完成整个双向链表结构中全部长方体空间内的重复点查找。

在上述技术方案中:

s81:将当前指针指向头指针,对于当前长方体空间内部的全部网格点,若第m个空间点被标记为重复点,且重复点的编号为n;

s82:根据s2和s4得到的网格点在离散点云中的编号,获得当前长方体空间内部第m、n个网格点在离散点云中的编号mp、np,则将离散点云中的第mp个网格点标记为重复点,重复点的编号为np;

s83:依次移动当前指针,遍历双向链表中的全部长方体空间,重复上述过程,获得离散点云中全部网格点的重复信息。

综上所述,由于采用了上述技术方案,本发明的有益效果是:

本发明通过自适应空间剖分,既可以快速有效地降低重复点查找的规模、提高重复点查找的效率,还可以减少无效长方体空间的数量,从而降低方法的内存消耗,提高方法处理离散点云的规模;

本发明采用自适应空间剖分方法,可以根据长方体空间网格点限定的数量自动对空间进行剖分,不再需要根据离散点云分布情况人工选择空间剖分参数,能够实现方法流程的全自动化,大幅提高方法的适用性和鲁棒性。

附图说明

本发明将通过例子并参照附图的方式说明,其中:

图1是离散点云的示意图;

图2是离散点云空间边界的示意图;

图3是初始长方体空间的示意图;

图4是双向链表初始化的示意图;

图5是长方体空间剖分及双向链表更新的示意图;

图6a是长方体空间双向链表循环遍历剖分的示意图;

图6b是长方体空间双向链表循环遍历剖分的示意图;

图6c是长方体空间双向链表循环遍历剖分的示意图;

图7是长方体空间中网格点在离散点云中的编号的示意图;

图8是长方体空间中网格点重复信息的示意图;

图9是离散点云中网格点重复信息的示意图;

其中:1是离散点云,2是网格点,3是长方体空间,4是长方体空间内网格点数量,5是长方体空间网格点顺序编号,6是网格点在离散点云中的编号,7是长方体空间中网格点重复编号,8是离散点云中网格点重复编号。

具体实施方式

本说明书中公开的所有特征,或公开的所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合。

本说明书(包括任何附加权利要求、摘要和附图)中公开的任一特征,除非特别叙述,均可被其他等效或具有类似目的的替代特征加以替换。即,除非特别叙述,每个特征只是一系列等效或类似特征中的一个例子而已。

本实施例针对的离散点云1如图1所示,首先需要确定离散点云1的三维空间的边界。如图2所示,循环遍历离散点云1中的所有网格点2,采用对比交换的方式计算出所有网格点2在三个坐标方向x、y、z的最大值和最小值,即对于任一网格点2,对比现有的值与网格点2的坐标x、y、z的大小,然后根据对比结果更新值,直至全部网格点2完成遍历。图1中的离散点云1最后更新得到的-1.0、1.0、-1.0、1.0、-1.0、1.0。

根据全部网格点2三个坐标方向x、y、z的最大值和最小值构建如图3所示中的角点和角点。其中,为大于零的系数,用于消除数值误差可能带来的将网格点划分在长方体空间外面的问题。针对离散点云1,值取为0.05,获得角点的坐标为(-1.1,-1.1,-1.1)和(1.1,1.1,1.1)。然后,以图3中点作为长方体的两个角点,构建离散点云1所在的长方体空间3,如图3所示。图3中初始长方体空间的边界为,网格点数量为37,网格点在离散点云中的编号从1~37。

初始化长方体空间双向链表结构。将步骤二构建的初始长方体空间3作为节点加入双向链表结构,用ps,head和tail表示长方体空间双向链表结构的当前指针、头指针和尾指针,分别指向链表中的当前长方体空间、头长方体空间和尾长方体空间,头指针head的前向指针指向为空,尾指针tail的后向指针指向为空,如图4所示。当前双向链表仅有1个长方体空间,ps、head和tail指针均指向该长方体空间,从而实现长方体空间双向链表的初始化。

检查当前指针ps指向的当前长方体空间3,当网格点数量4规模超过限定值时,对该长方体空间进行剖分。为了便于说明算法,对于当前离散点云算例,指定网格点数量限定阈值等于10,ps指向长方体空间的网格点数量为37,大于限定阈值的值,因此对该长方体空间进行八叉树剖分。沿着3个坐标方向将长方体空间均匀分割成8个大小相同的长方体空间,八个长方体空间中的第2~第7个没有网格点,第1个长方体空间有15个网格点,空间边界是,网格点在离散点云中的编号是2、5、7、12、15、19、23、24、28、29、30、32、34、36、37,第8个长方体空间有22个网格点,空间边界是,网格点在离散点云中的编号是1、3、4、6、8、9、10、11、13、14、16、17、18、20、21、22、25、26、27、31、33、35。

从双向链表中删除被剖分的长方体空间3,修改当前指针ps的指向,更新链表信息,并添加新剖分的长方体空间3。将被剖分的网格点数量为37的长方体空间从双向链表中删除,此时链表为空链表,头指针head、尾指针tail和当前指针ps均指向为空。剖分后的8个长方体空间中,第1个长方体空间有15个网格点,网格点数量大于限定阈值,将该长方体空间添加到链表的头部,链表节点数变为1,头指针head和尾指针tail均指向该长方体空间,当前指针ps指向为空;第2~第7个长方体空间的网格点数量均为零,直接舍弃,不加入双向链表结构;第8个长方体空间有22个网格点,网格点数量大于限定阈值,将该长方体空间添加到链表的头部,链表节点数变为2,头指针head指向网格点数为22的长方体空间,尾指针tail指向网格点数为15的长方体空间,当前指针ps指向为空,长方体空间剖分和添加后的双向链表如图5所示。

循环遍历双向链表,不断对双向链表中超出限定网格点数量的长方体空间进行剖分,直至全部长方体空间的网格点数量均低于限定阈值。循环步骤四和步骤五,通过调整当前指针ps的指向,从链表头部顺序遍历整个链表结构,对链表中大于限定网格点数量的长方体空间进行剖分,并更新链表信息。当当前指针ps指向头指针head时,当前指针ps指向的长方体空间有22个网格点,大于网格点数量限定阈值,对网格点数为22的长方体空间进行八叉树剖分,得到的8个长方体空间中:

第1个长方体空间有9个网格点,空间边界是,网格点在离散点云中的编号是1、3、4、8、11、16、25、26、27,添加到网格点数为15的长方体空间后;第2~第3个长方体空间的网格点数量为零,舍弃不加入链表;

第4个长方体空间有5个网格点,空间边界是,网格点在离散点云中的编号是17、18、20、22、33,添加到网格点数为9的长方体空间后;第5、第6、第8个长方体空间的网格点数量为零,舍弃不加入链表;

第7个长方体空间有8个网格点,空间边界是,网格点在离散点云中的编号是6、9、10、13、14、21、31、35,添加到网格点数为5的长方体空间后,如图6a所示。

当网格点数量为22的长方体空间剖分完成后,将当前指针ps指向网格点数为15的长方体空间,因其网格点数量大于限定阈值,对网格点数为15个的长方体空间进行八叉树剖分,得到的8个长方体空间中:

第1个长方体空间有6个网格点,空间边界是,网格点在离散点云中的编号是2、5、7、15、30、32,添加到网格点数为8的长方体空间后;第2~第7个长方体空间的网格点数量为零,舍弃不加入链表;

第8个长方体空间有9个网格点,空间边界是,网格点在离散点云中的编号是12、19、23、24、28、29、34、36、37,添加到网格点数为6的长方体空间后,如图6b所示。

此时网格点数为15的长方体空间从双向链表删除,当前指针ps指向网格点数量为9的长方体空间,低于限定阈值,当前链表遍历结束。头指针head也指向网格点数量为9的长方体空间,网格点数量也低于限定阈值,循环遍历双向链表结束。此时完整长方体空间双向链表构建完成,如图6c所示,每个长方体空间内的网格点数量均低于限定阈值,网格点在长方体空间内部的序号5和在离散点云中的编号6如图7所示。

遍历双向链表结构,完成每个长方体空间内部网格点的重复点查重。首先,将当前指针ps指向头指针head,根据前述步骤构建的网格点在离散点云中的编号(如图7所示),访问离散点云,获取当前指针ps指向长方体空间中网格点的三维空间坐标数据(x,y,z)。然后遍历当前长方体空间中的全部网格点,获取长方体空间的重复点。以图7中双向链表的第3个节点的长方体空间为例,有8个网格点,遍历第2至第8个网格点,每个网格点与前面之前的网格点进行对比,例如第5个网格点与第1~第4个网格点对比,如果存在重复,将该点的重复点编号7的值取为与之重复点的序号5的值,如果不存在重复,将该点的重复点编号7的值取为零。遍历完成后,第3个长方体空间中序号为6的网格点与序号为2的网格点重复,网格为6的重复点编号7的值取为2,如图8所示。调整当前指针ps指向,循环执行前述遍历过程,完成全部长方体空间内网格点的遍历查重,得到的重复点编号7,如图8所示。

组装双向链表中全部长方体空间内的网格点重复信息,得到离散点云中全部网格点重复信息。将当前指针ps指向头指针head,通过调整当前指针ps指向,遍历全部长方体空间,完成全部重复点信息的收集和组装。仍以图8中双向链表的第3个节点的长方体空间为例,序号为6的网格点被标记为重复点,重复点的序号为2。根据图7中构建的长方体空间内网格点在离散点云中的编号,序号为6的网格点在离散点云中的编号为21,序号为6的网格点在离散点云中的编号为9。因此,离散点云中编号为21的点被记录为重复点,重复点编号8的值为9。遍历全部长方体空间,获取离散点云共有3个重复点,编号为11、21、36,分别与编号3、9、29的网格点重复,如图9所示。

本发明并不局限于前述的具体实施方式。本发明扩展到任何在本说明书中披露的新特征或任何新的组合,以及披露的任一新的方法或过程的步骤或任何新的组合。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1