CN112346409B - 一种快速判断点云包含问题的方法 - Google Patents
一种快速判断点云包含问题的方法 Download PDFInfo
- Publication number
- CN112346409B CN112346409B CN202011284790.2A CN202011284790A CN112346409B CN 112346409 B CN112346409 B CN 112346409B CN 202011284790 A CN202011284790 A CN 202011284790A CN 112346409 B CN112346409 B CN 112346409B
- Authority
- CN
- China
- Prior art keywords
- point
- line segment
- points
- value
- contour
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 53
- 238000012216 screening Methods 0.000 claims abstract description 49
- 230000001174 ascending effect Effects 0.000 claims description 11
- 238000012163 sequencing technique Methods 0.000 abstract description 3
- 238000004364 calculation method Methods 0.000 description 14
- 238000012545 processing Methods 0.000 description 9
- 238000003754 machining Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 238000012360 testing method Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 238000010146 3D printing Methods 0.000 description 2
- 238000011960 computer-aided design Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000005299 abrasion Methods 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000003466 anti-cipated effect Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 238000013178 mathematical model Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B19/00—Programme-control systems
- G05B19/02—Programme-control systems electric
- G05B19/18—Numerical control [NC], i.e. automatically operating machines, in particular machine tools, e.g. in a manufacturing environment, so as to execute positioning, movement or co-ordinated operations by means of programme data in numerical form
- G05B19/408—Numerical control [NC], i.e. automatically operating machines, in particular machine tools, e.g. in a manufacturing environment, so as to execute positioning, movement or co-ordinated operations by means of programme data in numerical form characterised by data handling or data format, e.g. reading, buffering or conversion of data
- G05B19/4086—Coordinate conversions; Other special calculations
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B2219/00—Program-control systems
- G05B2219/30—Nc systems
- G05B2219/35—Nc in input of data, input till input file format
- G05B2219/35356—Data handling
Landscapes
- Engineering & Computer Science (AREA)
- Human Computer Interaction (AREA)
- Manufacturing & Machinery (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Automation & Control Theory (AREA)
- Image Analysis (AREA)
Abstract
本发明公开了一种快速判断点云包含问题的方法,包括:(1)输入待判断的点集和轮廓的线段组信息;(2)确定轮廓的线段组中各端点坐标的最大值和最小值;(3)针对输入的点集,筛选出坐标在所述最大值和最小值之间的点,得到按顺序排列的筛选坐标点集合;(4)通过点筛选轮廓线段后计算是否相交;根据相交总数判断该点是否在区域内;(5)重复步骤(4),对筛选坐标点集合中所有坐标点逐一进行判断,找出在轮廓内的点,输出点云包含结果。本发明方法通过对点标序号,对点和线段排序,对于需要判断的点和需要计算的线段进行了多步动态筛选,实现了点云包含问题的快速判断,本发明方法稳定可靠,鲁棒性强。
Description
技术领域
本发明属于计算机辅助制造CAM(Computer aided manufacturing)技术领域,尤其是涉及路径规划中平行填充路径的生成,具体涉及一种快速判断点云包含问题的方法。
背景技术
随着科学技术的飞速发展和计算机的普及,计算机辅助设计渐渐代替了许多繁琐的工作,使得计算机不再只是一种高效的计算工具,也成为了了帮助人们进行创造性设计工作的帮手。这其中,计算几何就是计算机能实现这一功能的基础理论之一。计算几何的定义是:“对几何外形信息的计算机表示、分析和综合”。其主要研究内容是几何形体的数学描述和计算机表述,通过一系列离散点或特征多边形建立数学模型,再通过计算机进行计算,求出希望得到的信息。其几何化、代数化和图形化的特点不仅帮助我们表示和处理各种复杂的曲面和几何形体,也克服了我们过分依赖坐标系选取的不足之处。
和计算机辅助设计一样,计算机辅助制造也是借助计算机的优势,为制造方法开辟了一条新的道路。无论是形形色色的数控机床还是新兴的三维打印技术,都需要借助计算机生成一系列加工路径,再由机器完成加工。在不考虑机器优劣的前提下,加工路径的合理性对加工时间、加工精度以及刀具磨损等有着较大的影响。加工路径可以分为按照轮廓加工和直线加工两种,其中机加工多采用直线加工,而三维打印多采用按照轮廓加工。无论是哪种加工路径,都是在每层填充深度或进给深度的平面,生成覆盖当前层加工区域的轨迹。
对于直线加工来说,加工轨迹的生成需要一系列扫描线与当前层轮廓线相交,得到的交点两两连接后再将这些线段连起来。可以预见每一层都会产生非常多的交点,而如何快速判断哪些点相连能够生成加工路径以及如何排除掉中间点对于路径的快速生成非常关键。判断点是否在给定轮廓内可以采用射线法,即对该点做一条射线,与轮廓若有奇数个交点则该点在轮廓内,否则在轮廓外。
因此解决上述问题的最直接的方法就是暴力法,对每个点使用射线法判断。这一方法逻辑简单,但是每个点都要和组成轮廓的每条线段进行一次求交点操作,十分费时,时间复杂度为O(n^2),其中n为点的总数。当轮廓较为复杂或当前区域包括多个轮廓时,扫描线生成的交点总数n会变得很大,该方法的效率将非常低。
发明内容
为了解决现有点云包含问题判定方法效率低的问题,本发明提供一种快速判断点云包含问题的方法。
该方法首先通过轮廓边界尺寸筛除一定不在轮廓内的点来减少需要判断的点的数量。再根据点的y值筛选出会跟点的射线有交点的轮廓线段组进行求交计算,借此较少需要计算的轮廓线段的数量。原来的暴力求解总共需要计算n*m次,其中n为点的总数,m为轮廓线段组总数。通过对点云和线段组排序,可以快速筛选出不需要计算的点以及不需要求交的轮廓线段后,最大限度的减小了n和m的值,使得计算量大大减少,保证了以最少的点数和线段数进行计算,从而提高效率,解决暴力法效率低的问题。
一种快速判断点云包含问题的方法,包括如下步骤:
(1)输入待判断的点集和轮廓的线段组信息;
(2)确定轮廓的线段组中各端点坐标的最大值和最小值;
(3)针对输入的点集,筛选出坐标在所述最大值和最小值之间的点,得到按顺序排列的筛选坐标点集合;
(4)按顺序选择筛选坐标点集合中的一个点作为当前坐标点,筛选出相关轮廓线段,并判断以当前坐标点做的射线是否与相关轮廓线段相交,并根据交点数量判断该点是否在输入的轮廓内;
(5)重复步骤(4),对筛选坐标点集合中所有坐标点逐一进行判断,找出在轮廓内的点,输出点云包含结果。
作为优选,所述轮廓为一个或多个,且每个轮廓均为闭合轮廓,即每个轮廓上相邻的两个点两两连成线段时,其上最后一个点和该轮廓起始点连成线段并与其他线段共同组成一个闭合轮廓。因为本发明的目的是要判断点是否在指定区域内,所以所有轮廓从逻辑上应该是闭合的,即组成轮廓的终止点应与起始点重合。虽然在将点两两连成线段时设定了每个轮廓的最后一个点和该轮廓起始点连成线段保证轮廓闭合,但如果所给的轮廓不是闭合的可能会将轮廓最后一个点舍弃,造成轮廓信息缺失。
作为优选,步骤(3)中,针对输入的点集,将点的序号作为键,点的坐标信息作为值,构建map数据结构;步骤(4)中,根据构建的map数据结构,将在轮廓内的点的序号和坐标信息输出。这一步骤是为了保证不改变输入的点的顺序的情况下,对点进行便捷操作,且方便后续使用序号查询点。
作为进一步优选,步骤(3)中,构建map数据结构后,对输入的点赋予对应的序号信息,然后再进行所述的筛选。
作为更进一步优选,步骤(3)中,构建map数据结构后,先对带有序号信息点进行排序,然后再进行所述的筛选,大大提高筛选效率;其中,对带有序号信息的点进行排序时,可以按照x值进行升序/降序排列,也可以按照y值进行升序/降序排列。
作为优选,步骤(4)中,筛选出相关轮廓线段的筛选条件为:
Q(k,min)<Q≤Q(k,max)或Q(k,min)≤Q<Q(k,max),且所有轮廓线段的筛选条件相同;即筛选所有轮廓线段时,应选择上述筛选条件中其中一个作为统一的筛选标准;
其中,Q为当前点的x/y坐标值;Q(k,min)为第k条轮廓线段的两个端点中x/y坐标值相对较小一个端点的x/y坐标值;Q(k,max)为该轮廓线段另一个端点的x/y坐标值;k∈[1,o],o为轮廓线段组中线段总数。
作为优选,步骤(2)中,对输入的轮廓的线段组按照每个线段的两个端点中较小的Qk值进行升序排列;步骤(4)中,进行相关轮廓线段的筛选时,在检查到第一条Q(k,min)大于点的Q值的线段后,之后的线段不需要再判断,减少了计算的工作量;
其中,Qk为第k条轮廓线段中一端点的x/y值;Q(k,min)为第k条轮廓线段的两个端点中x/y坐标值相对较小一个端点的x/y坐标值;Q(k,max)为该轮廓线段另一个端点的x/y坐标值;k∈[1,o],o为轮廓线段组中线段总数。
作为优选,步骤(2)中,对输入的轮廓的线段组按照每个线段的两个端点中较大的Qk值进行降序排序;步骤(4)中,进行相关轮廓线段的筛选时,在检查到第一条Q(k,max)小于点的Q值的线段后,之后的线段不需要再判断,减少了计算的工作量;
其中,Qk为第k条轮廓线段中一点的x/y值;Q(k,min)为第k条轮廓线段的两个端点中x/y坐标值相对较小一个端点的x/y坐标值;Q(k,max)为该轮廓线段另一个端点的x/y坐标值;k∈[1,o],o为轮廓线段组中线段总数。
作为优选,步骤(5)中,重复步骤(4)时,进行相关轮廓线段的筛选时,直接在上一个点筛选出的相关轮廓线段中进行筛选和增补,以简化重复时的工作量。
以步骤(2)中,对输入的轮廓的线段组按照每个线段的两个端点中较小的y值(y(k,min))进行升序排列为例:
作为具体优选,步骤(5)中,重复步骤(4)时,进行相关轮廓线段的筛选时,直接在上一个点筛选出的相关轮廓线段中筛除不再满足条件的线段,并接着线段组中最后一条线段添加满足条件的线段(以y(k,min)逐渐增大的顺序依次添加),遇到第一条y(k,min)大于点的y的值时结束添加,大大降低了筛选的工作量。
作为具体优选,在步骤(4)中,判断点做的射线与筛选出的线段是否相交的步骤如下:
步骤4.1:对点的x值增加一个值得到第二个点来代替射线;
步骤4.2:若点的x值大于线段的x(k,max)则点与线段不会相交;
步骤4.3:若点的x值小于或等于x(k,max),线段两点中一点的y值与点的y值相等,则线段与射线相交于线段端点;
步骤4.4:若点的x值小于或等于x(k,max),点的y值满足y(k,min)<y<y(k,max),则射线与线段交于线段上。
作为进一步优选,步骤4.1中,第二个点的x值应当远大于xmax,其中,xmax为轮廓的线段组中所有线段中的最大x值。
选择向x轴正方向延伸,对原有点的x值增加较大的值,如2000(xmax<<2000),y值不变,生成一条平行于x轴的线段,因为增加值足够大,可以近似代替射线。因为我们选择向x轴正方向做射线,所以在步骤5.2中,当前点的x值是射线的最小x值,因此若点的x值大于线段的x(k,max)则点与线段不会相交。步骤4.3和步骤4.4是对线段相交的判断。
上述射线法采用射线向x轴正方向延伸,当然该射线也可以是向x轴负方向延伸,其计算步骤与上述向x正方向延伸相同。
作为具体优选,一种快速判断点云包含问题的方法,包括如下步骤:
(1’)输入想要判断的点集{P0i},其中i∈[1,n],n为点的数量;输入轮廓线组{Bj},其中j∈[1,m],m为轮廓线总数;
(2’)将{Bj}中每条轮廓上相邻的两个点两两组合成线段,将全部轮廓得到的线段组记为{Sk},其中k∈[1,o],o为线段总数;
(3’){Sk}根据最低点y值(y(k,min))升序排序,并得到{Sk}中y坐标的最大最小值记为ymax、ymin;
(4’)为{P0i}中的点采用map数据结构标上序号后按照y值大小排序,再筛选出y值在[ymin,ymax]区间的点,记做筛选坐标点集合{P1a},其中a∈[1,p],p为筛选出的点的数量;
(5’)从{P1a}中按顺序选择点,根据该点的y值筛选{Sk}中y(k,min)<y≤y(k,max)(筛选条件也可以是y(k,min)≤y<y(k,max))的线段,记为相关轮廓线段组,其中,k∈[1,o],o为线段总数;并计算相关轮廓线段组中所有些线段与该点做的射线是否相交;
(6’)计算上述所有相交点的总数,并根据总的交点数判断该点是否在区域内,即相交的总点数为奇数时点在轮廓内,为偶数时点在轮廓外;并将在轮廓内的点的序号存入{NC},其中c∈[1,q],q为存入的点的数量;
(7’)重复步骤(5’)和步骤(6’),直到{P1a}中所有点都判断完毕,{NC}为在轮廓内的点的序号,其他点在轮廓外。
采用本发明方案,对输入的点赋予对应的序号信息,步骤4或者步骤(7’)得到的结果是点的序号,可以根据map查询序号得到对应的点。
上述具体优选方式均是在步骤(2)或步骤(3’)中,对输入的轮廓的线段组按照每个线段的两个端点中较小的y值(y(k,min))进行升序排列为前提进行的。当然也可以在步骤(2)或步骤(3’)中,对输入的轮廓的线段组按照每个线段的两个端点中较小的x值(x(k,min))进行升序排列,或对输入的轮廓的线段组按照每个线段的两个端点中较大的x/y值(即x(k,max)/y(k,max))进行降序排列,并对具体优选方式进行相应调整。
与现有技术相比,本发明的有益效果为:
本发明的方法通过map类型数据结构将点云标记后排序,利用排序后的轮廓线段得到轮廓的Qmax和Qmin,并根据[Qmin,Qmax]筛除Q值不在此区间范围内的点。这一步因为点已经排序,所以在找到第一个Q值大于/小于轮廓的Qmax/Qmin的点之后,后面的点都不需要再判断,这样可以减轻计算量。这之后再以点的Q值为筛选条件,筛选出可能跟当前点相交的轮廓线段区间,在当前点改变时对轮廓区间进行微调。与筛除点类似,线段组的排序也会减轻计算量。多次筛除保证了只有可能会相交的点和轮廓线段才会留下参与运算。通过筛选点和动态筛选轮廓线段组的方法,极大减少了计算的次数,有效的解决了点云包含问题计算量大的问题。本发明方法稳定可靠,可以有效解决点云包含判断效率低的缺点。
附图说明
图1为本发明实施例的流程示意图;
图2a为本发明的方法中一种闭合轮廓点分布示意图;
图2b为本发明的方法中一种非闭合轮廓点分布示意图;
图3为本发明的方法中map数据结构逻辑示意图;
图4为本发明的方法中点筛选不相交轮廓线段原理示意图;
图5为本发明的方法中相交判定的极端情况示意图;
图6为点云包含问题中一种典型轮廓区域示意图。
具体实施方式
下面结合附图和实施例对本发明技术方案做进一步详细说明,以下实施例不构成对本发明的限定。
如图1所示,一种快速判断点包含问题的方法,具体实施步骤如下:
步骤101:输入想要判断的点集{P0i},其中i∈[1,n],n为点的数量;输入轮廓线组{Bj},其中j∈[1,m],m为轮廓线总数。
如图2a所示,为本发明支持的轮廓,起始点和终止点相同,构成闭合轮廓,将该轮廓上的点两两组合成轮廓线段,即点1与点2构成线段1,点2与点3构成线段2等,轮廓线段组保存在{Sk}中,其中k∈[1,o],o为线段总数,最后一条线段由点4、点5构成,使轮廓闭合的同时也没有遗漏轮廓信息。图2b在逻辑上就说不通,既然要判断点是否包含在区域内,所给区域就必须是闭合的
步骤102:{Sk}中的线段都是由两个点组成,取其中y值(即y坐标值)小的作为当前线段的最小y值,将所有线段按照最小y值升序排序,并得到{Sk}中y坐标的最大最小值记为ymax、ymin。
步骤103:用map数据类型为{P0i}中的点标上序号后按照y值升序排序,再根据步骤102中获得的ymax、ymin筛除点。
map结构定义如下:Map<String,Point>,其中point类型是一个二维数组,分别保存点的x值和y值,map结构事实上是关于字符串和点坐标的键值对,如图3所示,其中键为字符串序号“1”、“2”、“3”等按照输入的顺序赋予的字符串,值为保存点本身x、y值的数组。在实际操作中,坐标数值保留的小数位数需根据实际情况而定,一般保留小数点后保留7~8位。
用map给点标序号后,对点云排序和筛除的具体步骤如下:
步骤301-1:按顺序取{P0i}中的一个点;
步骤301-2:从“1”开始存为map的一个键,将点以point类型存入当前键指向的值中;
步骤301-3:重复步骤301-2至{P0i}所有点都已存到map中,此时map中存入了i个键值对,其中i为输入点的总数,map中的键对应的从“1”-“i”;
步骤301-4:对于输入的点集{P0i}赋予map序号信息,对点云(带有序号信息的点集{P0i})按照y值大小升序排序;
步骤301-5:根据步骤102中获得的ymin、ymax筛选出y值在[ymin,ymax]区间的点,组成筛选坐标点集合,记做{P1a},其中a∈[1,p],p为筛选出的点的数量。因为在步骤301-4中,所有点已经按照y值大小升序排列过,所以从第一个点开始判断,当找到第一个y值大于ymax的点后,剩下没判断过的点就不必再判断了,它们必然不满足y值在[ymin,ymax]区间。
步骤104:筛除过后的点云{P1a}依然是按照y值从小到大排列,从第一个点(y值最小的点)开始一次选择一个点设为当前点。
步骤105:按照y(k,min)<y≤y(k,max)(或者y(k,min)≤y<y(k,max))的原则筛选{Sk}中符合要求的线段,记做轮廓线段;由于线段组{Sk}是按照y值从小到大排序,所以在根据y(k,min)<y≤y(k,max)的条件筛选{Sk}时,在检查到第一条y(k,min)大于y值的线段后,之后的线段也不需要再判断,减少了计算的工作量。另一方面,与步骤301-5类似,在重复步骤105时,可以从上一次步骤105(即上一个点筛选)得到的线段组中筛除不再满足条件的线段,并接着线段组中最后一条线段(y值较大的线段)添加满足条件的线段(以y(k,min)逐渐增大的顺序依次添加),遇到第一条y(k,min)大于y值的线段时结束添加,这样可以简化重复时的工作量。
结合图4,根据当前点A的y值筛选出可能相交轮廓线段分为两步:
首先根据A的y值筛选出{Sk}中y(k,min)<y≤y(k,max)的线段,即线段5和线段11;
第二步由于点A做的射线向x轴正方向延伸,所以点A的x值是射线的最小x值,因此若点的x值大于线段的x(k,max)则点与线段不会相交,即线段11不会与点A相交。
可以发现,在图4的例子中,轮廓共有12条线段,但是经过两次筛除后只剩下了线段5参与接下来的相交计算,本发明正是通过多次类似的方式对点云包含问题进行计算减负,使得效率大大提升。
步骤106:判断当前点是否在轮廓内,若在轮廓内则进行步骤107,不在则返回步骤104判断下一个点。
结合图4、图5,判断当前点是否在轮廓内的步骤如下:
步骤106-1:对点的x值增加一个值得到第二个点生成一条线段来代替射线,y值不变;其中,第二个点的x值远远大于{Sk}中线段的xmax,xmax为{Sk}中所有线段中的最大x值;
步骤106-2:若当前点的x值大于线段的x(k,max)则点与线段不会相交;
步骤106-3:若当前点的x值小于或等于x(k,max),线段两点中一点的y值与点的y值相等,则线段与射线相交于线段端点;
步骤106-4:若当前点的x值小于或等于x(k,max),点的y值满足y(k,min)<y<y(k,max),则射线与线段交于线段上。
图4的情况比较简单,通过步骤105后只剩下线段5参与相交计算,且相交类型属于步骤106-4。但作为普适性方法,需要考虑极端情况,如图5。在图5中,点A在轮廓外,线段8、线段1、线段2、线段3、线段5、线段6都通过步骤105的筛选,所以与A点做的射线相交的线段有线段8、线段1、线段2、线段3、线段5和线段6,共有6个交点,根据射线法判断点A在轮廓外,结果正确。
当然,作为可行的方案,也可以采用y(k,min)≤y<y(k,max)的条件完成对图4和图5的筛选和判断(是否在轮廓内),此时对于图4的筛选结果不变,判断结果必然不变。对于图5,当采用y(k,min)≤y<y(k,max)的条件进行筛选时,符合要求的线段是线段8和线段7,共有2个交点,根据射线法判断点A在轮廓外,结果相同。
步骤107:新建一个字符串类型的数组,保存当前点的序号(与map中的序号对应)至{NC},其中c∈[1,q],q为存入的序号的数量。
步骤108:判断当前点对应的a值是否等于筛除过后的点云{P1a}的总数p,若不是则说明{P1a}中的点还未判断完全,则当前点a值加一继续判断下一个点;若是则输出步骤107中的数组,数组里保存的是所有在轮廓内的点的序号,其中a为当前点在点云{P1a}中的排序。
另外,上述实施例是以y坐标值为排序标准,以x轴方向作为射线方向进行交点判断。作为另外的替换方案,也可以以相同的思路,采用x坐标值作为排序依据,对应的以y轴方向作为射线方向进行交点的判断,详细步骤可以参考上述内容,在此不再赘述。
本发明的典型实施实例如下:
1.大规模测试点构造:
图6所示为一个较为复杂的轮廓区域,由外围的正多边形和内部的凹多边形构成,两轮廓线之间为给定区域。因为整个轮廓区域上的点的x值和y值都在(0,100)范围内,所以运用生成随机数的方式生成x值和y值都在(0,100)范围内的随机点,可以根据循环次数控制生成点的个数。
2.本发明的方法与暴力法的测试比较:
在装有英特尔Core i7-7500@2.70GHz CPU以及8GB内存的电脑上,运用以上生成的点和轮廓线数据,测试暴力法和本发明方法在图6的轮廓中判断相同数量点的时间。测试采用C++语言编写,两种方法的运行时间统计表1所示。
需要说明的是,在测试暴力法运行时间时,当点数较多时,测试程序运行时间过长(超过2个小时),在表1中用省略号表示对应时间。由表1可知,在一千点数以下时,暴力法和本发明方法之间的差距不大,本方法优势并不特别明显。但随着点数增加到一万,本方法的优势逐渐显现。之所以会有这样的趋势,是因为本方法需要对点标序号,对点和线段排序。这些操作在点数不多的时候并不会有特别明显的作用,反而会额外花费时间,但是当点数增加后,这些步骤对提升效率非常有帮助。
本发明方法通过对点标序号,对点和线段排序,对于需要判断的点和需要计算的线段进行了多步动态筛选,实现了点云包含问题的快速判断。本发明方法稳定可靠,鲁棒性强,可以针对点云包含问题进行快速判断。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的一般技术人员来说,本发明还可以有各种更改和变化。在不脱离本发明原理的前提下,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种快速判断点云包含问题的方法,其特征在于,包括如下步骤:
(1)输入待判断的点集和轮廓的线段组信息;
(2)确定轮廓的线段组中各端点坐标的最大值和最小值;
(3)针对输入的点集,筛选出坐标在所述最大值和最小值之间的点,得到按顺序排列的筛选坐标点集合;
(4)按顺序选择筛选坐标点集合中的一个点作为当前坐标点,筛选出相关轮廓线段,并判断以当前坐标点做的射线是否与相关轮廓线段相交,并根据交点数量判断该当前坐标点是否在输入的轮廓内;
(5)重复步骤(4),对筛选坐标点集合中所有坐标点逐一进行判断,找出在轮廓内的点,输出点云包含结果。
2.根据权利要求1所述的快速判断点云包含问题的方法,其特征在于,步骤(3)中,针对输入的点集,将点的序号作为键,点的坐标信息作为值,构建map数据结构;步骤(4)中,根据构建的map数据结构,将在轮廓内的点的序号和坐标信息输出。
3.根据权利要求2所述的快速判断点云包含问题的方法,其特征在于,步骤(3)中,构建map数据结构后,对输入的点赋予对应的序号信息,然后再进行所述的筛选。
4.根据权利要求3所述的快速判断点云包含问题的方法,其特征在于,步骤(3)中,构建map数据结构后,先对带有序号信息的点进行排序,然后再进行所述的筛选。
5.根据权利要求1所述的快速判断点云包含问题的方法,其特征在于,步骤(4)中,筛选出相关轮廓线段的筛选条件为:
Q(k,min)<Q≤Q(k,max)或Q(k,min)≤Q<Q(k,max),且所有轮廓线段的筛选条件相同;
其中,Q为当前点的x/y坐标值;Q(k,min)为第k条轮廓线段的两个端点中x/y坐标值相对较小一个端点的x/y坐标值;Q(k,max)为该轮廓线段另一个端点的x/y坐标值;k∈[1,o],o为轮廓线段组中线段总数。
6.根据权利要求1所述的快速判断点云包含问题的方法,其特征在于,步骤(2)中,对输入的轮廓的线段组按照每个线段的两个端点中较小的Qk值进行升序排序;步骤(4)中,进行相关轮廓线段的筛选时,在检查到第一条Q(k,min)大于点的Q值的线段后,之后的线段不需要再判断;
其中,Qk为第k条轮廓线段中一端点的x/y值;Q(k,min)为第k条轮廓线段的两个端点中x/y坐标值相对较小一个端点的x/y坐标值;Q(k,max)为该轮廓线段另一个端点的x/y坐标值;k∈[1,o],o为轮廓线段组中线段总数。
7.根据权利要求1所述的快速判断点云包含问题的方法,其特征在于,步骤(2)中,对输入的轮廓的线段组按照每个线段的两个端点中较大的Qk值进行降序排序;步骤(4)中,进行相关轮廓线段的筛选时,在检查到第一条Q(k,max)小于点的Q值的线段后,之后的线段不需要再判断;
其中,Qk为第k条轮廓线段中一点的x/y值;Q(k,min)为第k条轮廓线段的两个端点中x/y坐标值相对较小一个端点的x/y坐标值;Q(k,max)为该轮廓线段另一个端点的x/y坐标值;k∈[1,o],o为轮廓线段组中线段总数。
8.根据权利要求6或7所述的快速判断点云包含问题的方法,其特征在于,步骤(5)中,重复步骤(4)时,进行相关轮廓线段的筛选时,直接在上一个点筛选出的相关轮廓线段中进行筛选和增补。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011284790.2A CN112346409B (zh) | 2020-11-17 | 2020-11-17 | 一种快速判断点云包含问题的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011284790.2A CN112346409B (zh) | 2020-11-17 | 2020-11-17 | 一种快速判断点云包含问题的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112346409A CN112346409A (zh) | 2021-02-09 |
CN112346409B true CN112346409B (zh) | 2021-10-08 |
Family
ID=74363970
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011284790.2A Expired - Fee Related CN112346409B (zh) | 2020-11-17 | 2020-11-17 | 一种快速判断点云包含问题的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112346409B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114820875A (zh) * | 2021-01-28 | 2022-07-29 | 北京字跳网络技术有限公司 | 一种有向距离场图像的生成方法、装置、设备及存储介质 |
CN113704841B (zh) * | 2021-08-31 | 2023-11-14 | 浙江大学 | 一种基于偏置的优化排样方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08278115A (ja) * | 1995-04-05 | 1996-10-22 | Mitsubishi Heavy Ind Ltd | 多面体画像における一つの対象面の輪郭線を判別する方法 |
CN102800125A (zh) * | 2012-06-18 | 2012-11-28 | 浙江大学 | 一种支持套索的大规模点云选择方法 |
CN103969656A (zh) * | 2014-05-08 | 2014-08-06 | 北京数字绿土科技有限公司 | 基于机载激光雷达的建筑物建模方法和装置 |
CN104325638A (zh) * | 2014-05-14 | 2015-02-04 | 浙江大学 | 基于分区的3d打印填充路径生成方法 |
CN104809689A (zh) * | 2015-05-15 | 2015-07-29 | 北京理工大学深圳研究院 | 一种基于轮廓的建筑物点云模型底图配准方法 |
CN111415383A (zh) * | 2020-03-19 | 2020-07-14 | 浙江大学 | 一种平面多边形包含关系确定方法 |
-
2020
- 2020-11-17 CN CN202011284790.2A patent/CN112346409B/zh not_active Expired - Fee Related
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08278115A (ja) * | 1995-04-05 | 1996-10-22 | Mitsubishi Heavy Ind Ltd | 多面体画像における一つの対象面の輪郭線を判別する方法 |
CN102800125A (zh) * | 2012-06-18 | 2012-11-28 | 浙江大学 | 一种支持套索的大规模点云选择方法 |
CN103969656A (zh) * | 2014-05-08 | 2014-08-06 | 北京数字绿土科技有限公司 | 基于机载激光雷达的建筑物建模方法和装置 |
CN104325638A (zh) * | 2014-05-14 | 2015-02-04 | 浙江大学 | 基于分区的3d打印填充路径生成方法 |
CN104809689A (zh) * | 2015-05-15 | 2015-07-29 | 北京理工大学深圳研究院 | 一种基于轮廓的建筑物点云模型底图配准方法 |
CN111415383A (zh) * | 2020-03-19 | 2020-07-14 | 浙江大学 | 一种平面多边形包含关系确定方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112346409A (zh) | 2021-02-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112346409B (zh) | 一种快速判断点云包含问题的方法 | |
CN101944239B (zh) | 三维模型分割方法、装置以及包含该装置的图像处理系统 | |
CN111709092B (zh) | 一种基于有限元单元节点的子午线轮胎胎面花纹有限元自动建模方法 | |
CN108763827B (zh) | 一种输电塔有限元模型建立方法及装置 | |
CN104392253B (zh) | 一种草图数据集的交互式类别标注方法 | |
JP3796658B2 (ja) | 解析モデル作成装置 | |
CN111259772A (zh) | 图像标注方法、装置、设备和介质 | |
CN108830385A (zh) | 深度学习模型训练方法和装置及计算机可读存储介质 | |
CN102289991A (zh) | 一种基于视觉变量的地图注记自动分类配置方法 | |
CN108180918A (zh) | 一种点云测地路径正向跟踪生成方法及装置 | |
CN106250933A (zh) | 基于fpga的数据聚类的方法、系统及fpga处理器 | |
CN106815447A (zh) | 基于历史数据的复杂结构件加工特征智能定义与分类方法 | |
CN105653881A (zh) | 基于多密度层次的流场可视化方法 | |
CN110969260A (zh) | 不平衡数据过采样方法、装置及存储介质 | |
CN114676522A (zh) | 融合gan和迁移学习的气动形状优化设计方法及系统及设备 | |
JP4653538B2 (ja) | 3次元データ管理装置、3次元データ管理プログラム及び3次元データ管理方法 | |
JPH05250480A (ja) | 自由形式ストロークの生成方法 | |
CN107391289B (zh) | 一种三维笔式交互界面可用性评估方法 | |
Hu et al. | Parallel BVH construction using locally density clustering | |
CN111583410A (zh) | 一种衣片网格模型自动生成方法 | |
JP2701003B2 (ja) | ソリッドモデル合成装置及びソリッドモデル合成方法 | |
CN112488176B (zh) | 一种基于三角网格及神经网络的加工特征识别方法 | |
CN107515979A (zh) | 一种对大批量工件模型数据的处理方法及处理系统 | |
CN110046335B (zh) | 一种外形检测报告的快速生成方法 | |
CN111415383A (zh) | 一种平面多边形包含关系确定方法 |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20211008 |