发明内容
本发明针对现有技术的弊端,提供一种根据激光雷达栅格点云构建CSG模型的方法。
本发明所述的根据激光雷达栅格点云构建CSG模型的方法,包括如下步骤:
步骤一,读取地面激光雷达获取的栅格点云数据,同时利用所述栅格点云数据构建空间索引结构树;
步骤二,按照随机抽样一致性算法在上述空间索引结构树的叶子节点数据中提取平面特征点云数据、球面特征点云数据、以及柱面特征点云数据;并利用上述提取的特征点云数据根据最小二乘法分别拟合平面、球面、以及柱面的规则几何模型;
步骤三,根据上述平面、球面、以及柱面的规则几何模型,分别构造对应的长方体、球体、以及圆柱体三维模型;
步骤四,将长方体、球体、以及圆柱体的规则几何模型转换为三维空间体素模型,再将所述三维空间体素模型三角化为三角网模型,之后利用该三角网模型结合多面布尔运算算法生成CSG模型。
本发明所述的根据激光雷达栅格点云构建CSG模型的方法中,所述空间索引结构树的叶子节点的数据包括节点的三维最小外包盒信息、二维行列数外包矩形信息、节点名称标识信息、节点存储点坐标的标识信息、三维坐标偏移参数信息。
本发明所述的根据激光雷达栅格点云构建CSG模型的方法的步骤一中,依次读取栅格点云数据,通过读取栅格点云数据中点的标识信息或者直接赋予标识信息,将所读取的点标识依次插入空间索引树的叶子节点;
计算每个叶子节点的最小外包矩形体,并利用均匀采样的方法以自下而上的方式填充空间索引树的非叶子节点数据,直至根节点,从而构建出多细节层次多分辨率空间索引结构树。
本发明所述的根据激光雷达栅格点云构建CSG模型的方法中,在将所读取的点依次插入空间索引树的叶子节点时,判断空间索引树的叶子节点中点的数量,若点的数量大于设定阈值,则进行节点的分裂,直至所有的点都插入到空间索引树的叶子节点中。
本发明所述的根据激光雷达栅格点云构建CSG模型的方法的步骤二中,提取球面特征点云数据的步骤包括:
随机选取一点为中心点,以由该中心点向八个方向放射的星形结构上的预定数量的点为种子点;
将所选取的种子点拟合成球面,并计算各选定的小块点云中点与该球面的距离;
选取距离小于设定阈值的点为符合条件点,当所述符合条件点的数量达到预定值时,以这些符合条件点拟合成初始球面;
移动小块点云,计算各小块点云中点与该拟合的精确球面的距离,选取距离小于设定球面距离阈值的点为球面特征点,不断迭代拟合精确球面,直到获得全部球面特征点云数据。
本发明所述的根据激光雷达栅格点云构建CSG模型的方法的步骤二中,提取平面特征点云数据的步骤包括:
以随机选取的一点为基准点,以由该基准点自下而上、自左而右选取预定数量的点为种子点,以所选取的种子点拟合成平面;
对种子点进行数量扩展,并计算各扩展种子点与所述拟合的平面之间的距离,选取距离小于设定阈值的扩展种子点为新的种子点;
将此新的种子点加入前述种子点中并再次拟合成新的平面;
重复上述步骤直至无再进行扩展的种子点,所得新的平面上的点的数据即为平面特征点云数据。
本发明所述的根据激光雷达栅格点云构建CSG模型的方法中,计算所得的多个平面的法向,以第一个平面的法向为基准,若第二平面的法向与该第一平面的法向夹角小于设定的阈值,且两个平面间两个方向上的距离小于给定阈值,则此第二平面与第一平面为同一平面;
重复上述步骤,直至所有平面判断完毕;
将判断为同一平面的各平面进行合并,从而得到各平面所对应的平面特征点云数据。
本发明所述的根据激光雷达栅格点云构建CSG模型的方法的步骤二中,提取柱面特征点云数据的步骤包括:
以随机选取的一点为基准点,以由该基准点自下而上、自左而右选取预定数量的点为种子点,以所选取的种子点拟合成柱面;
对种子点进行数量扩展,并计算各扩展种子点与所述拟合的柱面之间的距离,选取距离小于设定阈值的扩展种子点为新的种子点;
将此新的种子点加入前述种子点中并迭代拟合成新的柱面;
重复上述步骤直至无再进行扩展的种子点,所得新的柱面上的点的数据即为柱面特征点云数据。
本发明所述的根据激光雷达栅格点云构建CSG模型的方法中,计算所得的多个柱面的轴向,以第一个柱面的轴向为基准,若第二个柱面的轴向与该第一个柱面的轴向夹角小于设定的阈值,且柱面间轴向距离小于给定阈值,则此第二个柱面与第一个柱面为同一柱面;
重复上述步骤,直至所有柱面判断完毕;
将判断为同一柱面的各柱面进行合并,从而得到各柱面所对应的柱面特征点云数据。
本发明所述的根据激光雷达栅格点云构建CSG模型的方法的步骤二中,若两个或多个叶子节点中的平面的法向夹角处于预定的阈值范围内、以及所述平面的边界点集连通,则将此两个或多个叶子节点中的平面特征点云数据进行合并;
若两个或多个叶子节点中的柱面的法向夹角处于预定的阈值范围内、以及柱面的边界点集连通,则将此两个或多个叶子节点中的柱面特征点云数据进行合并;
若两个或多个叶子节点中的球面的球心坐标的差值及球体半径的差值语出预设的阈值范围内,则经此两个或多个叶子节点中的球面特征点云数据进行合并。
本发明所述的根据激光雷达栅格点云构建CSG模型的方法的步骤三中,依据球面特征点云数据而确定球心坐标信息及球体半径信息,再依据球心三维坐标信息和球体半径信息构造球体三维模型。
本发明所述的根据激光雷达栅格点云构建CSG模型的方法的步骤三中,构造长方体三维模型的步骤包括:
提取预设几个平面的点集,计算各自的最小外包矩形体属性;
确定各个点集对应的拟合平面处于相互垂直状态,选取相邻的二到三个平面点集作为构成长方体所属的点集;
计算上述确定的长方体点集的有向包围盒属性(OBB),将该三维有向包围盒对象作为长方体三维模型。
本发明所述的根据激光雷达栅格点云构建CSG模型的方法中,若各个点集对应的拟合平面的法向夹角为90±5度,则各个点集对应的拟合平面视为处于相互垂直状态。
本发明所述的根据激光雷达栅格点云构建CSG模型的方法的步骤三中,以柱面特征点云数据确定圆柱体的半径及中心轴线,以柱面特征点云数据在中心轴线上的投影点的最大的距离差为圆柱体的长度而构造圆柱体三维模型。
本发明所述的根据激光雷达栅格点云构建CSG模型的方法中,充分利用原始数据的拓扑信息进行特征提取,在过程上避免了现有技术中耗时耗力的拓扑信息重建这一步骤,在效率上有很大的提高,且能够自动提取常用的几种规则几何模型。
具体实施方式
下面结合附图对本发明做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。
如图1所示,本发明所述的根据激光雷达栅格点云构建CSG模型的方法,包括如下步骤:
步骤101,读取地面激光雷达获取的栅格点云数据,同时利用所述栅格点云数据构建空间索引结构树。
本发明中,所述空间索引结构树的叶子节点的数据包括节点的三维最小外包盒信息、二维行列数外包矩形信息、节点名称标识信息、节点存储点坐标的标识信息、三维坐标偏移参数信息。
本步骤中,依次读取栅格点云数据,通过读取栅格点云数据中点的标识信息或者直接赋予标识信息,将所读取的点标识依次插入空间索引树的叶子节点。因为文件中点的排序就是按时间乎序排列的,所以可依次读取点的属性信息,读取顺序即为该点的ID号并置于标志位中,ID号的首位为0。在将所读取的点依次插入空间索引树的叶子节点时,判断空间索引树的叶子节点中点的数量,若点的数量大于设定阈值,则进行节点的分裂,直至所有的点都插入到空间索引树的叶子节点中。例如,设定阈值为20000点,则当前叶子节点中点的数量大于20000时,就需要进行节点的分裂,以保证在每个叶子节点中都有不超过阈值范围的点数;所述剩余的点插入到分裂后的节点中,直至所有的点都插入到叶子节点中。
计算每个叶子节点的最小外包矩形体,并利用均匀采样的方法以自下而上的方式填充空间索引树的非叶子节点数据,直至根节点,从而构建出多细节层次多分辨率空间索引结构树。也就是说该分块后的树形结构的非叶子节点也存储多分辨率的点云数据,但不存储真实三维坐标数据,只是存储坐标数据的索引ID。这样一个以四叉树为基础的空间索引结构树(称为QMBB树),在数据读取的过程中一次性快速实时生成,栅格点云在逻辑上被分割成多分辨率细节层次数据块。基于四叉树分块索引的设计思路充分考虑到扫描的原始单站点云数据的栅格性,依扫描点云的行数和列数先以自上而下的方式构建基于四叉树的点云最小外包盒的空间索引,同时对栅格点云数据进行分割,数据分割的实质是每次按照地面激光雷达实际扫描的横向步进角度和纵向步进角度分别进行二分,完成球面或扇形分割。
步骤102,按照随机抽样一致性算法在上述空间索引结构树的叶子节点数据中提取平面特征点云数据、球面特征点云数据、以及柱面特征点云数据;并利用上述提取的特征点云数据根据最小二乘法分别拟合平面、球面、以及柱面的规则几何模型。
随机抽样一致性(RANSAC)算法的样本点是随机地选取数据点样本中所需要的种子点,这显然没有利用单站扫描数据中点之间已有的拓扑关系。如果利用它固有的点之间的拓扑关系的话可以很方便地选取出有利于进行下一步运算的种子点。根据要拟合的不同二次曲面选取不同拓扑关系的种子点。利用点之间的拓扑关系选点的另一个好处就是在选取下一组种子点的时候可以方便地移动选取点的位置而不会改变已经定好的种子点的拓扑关系。
本步骤中,提取球面特征点云数据的步骤包括:
随机选取一点为中心点,以由该中心点向八个方向放射的星形结构上的预定数量的点为种子点。由于球的特有性质,无论从球面的哪个方向扫描,得到的点云数量及形状都基本相同,把球投影到各个方向也都是圆。根据球的这些特有性质及栅格点云的分布情况要把种子点选为对称的形状,以一点为中心向八个方向放射的星形结构能较好地拟合球面,减小拟合球面所导致的误差。
将所选取的种子点拟合成球面,并计算各选定的小块点云中点与该球面的距离;选取距离小于设定阈值的点为符合条件点,当所述符合条件点的数量达到预定值时,以这些符合条件点拟合成初始球面。在选择好种子点后,将它们拟合成所需要的二次曲面。然后计算分好的每小块点云中点与该二次曲面的距离,当距离小于某一阈值时,可以认为该点是二次曲面上的点。当这些符合条件的点达到一定数量,便可以认为该符合条件的点集合能够拟合成我们需要的二次曲面,再用这些符合条件的点拟合成精确的二次曲面。距离阈值和符合条件点的个数(以下称合格点)是需要确定的两个自适应参数,参数选得理想与否直接关系到球面提取的正确性和精度。合格点是首先需要确定的。根据选择的种子点可以确定所选种子点附近的点密度a,又已知在点云中的球半径R,则球的投影为面积πR2,球面上合格点通过公式πR2÷a的值来判定。
距离阈值的选择也必须适当。太大的阈值会导致误差点的选入,影响球面提取的精度,失去了该方法剔除误差点的优势。由于每种三维激光扫描仪都有一定的点位精度,距离阈值太小会导致球面上的三维点无法全部提取,无论怎样选择种子点都不能提取合格点,不能从点云中提取出球面。
移动小块点云,计算各小块点云中点与该拟合的精确球面的距离,选取距离小于设定球面距离阈值的点为球面特征点,不断迭代拟合精确球面,直到获得全部球面特征点云数据。
球面方程
其中,x0,y0,z0,R为球面参数,o=(x0,y0,z0)表示球面中心,R表示球面半径。球面方程的一般形式
用种子点拟合球面,由球面方程(3-1)通过参数变换得到球面方程(3-2)球面拟合可以采用线性最小二乘法实现。
由于方程(3-4)中包含常数乍xi 2+yi 2+zi 2,故可以采用奇异值分解法求解。球面拟合方程组Ax=b,其中
在求得最小二乘解x后,通过坐标转换公式(3-2)就可以得到球面参数:球心坐标(x0,y0,z0)和半径R。
根据公式
得到样本点到拟合球面的距离。如果Dis小于阈值则判定该点为球面上的点,反之则留在样本点集中等待其他拟合对象的判定。
本步骤中,提取平面特征点云数据的步骤包括:
以随机选取的一点为基准点,以由该基准点自下而上、自左而右选取预定数量的点为种子点,以所选取的种子点拟合成平面。
平面的特征和球面特征完全不同,种子点的选取也不能相同。由于扫描仪具有点位误差,即使是一个平面上的点也会有偏移这个平面的可能,所以种子点个数不能太少,且根据点密度确定,否则不能很好地控制平面参数。栅格点云具有ID从下到上、从左向右递增的特点,根据前述所选择的基准点进行向上和向右扩展。
用最初的种子点拟合平面P,拟合平面г采用最小二乘拟合。设要拟合的平面方程为a0+a1x+a2y=-z,由点(x,y,z)组成的矛盾方程组为
根据最小二乘法原理,要使给定点的偏差的平方和Q最小。
要使Q值最小,则当Q对a0,a1,a2的偏导数同时为零时,它将出现最小值。则:
用矩阵形式表示可得
令 则MT(MA-Z)=0,从而
A=(MTM)-1MTZ,代入点云的坐标x,y,z求得方程系数a0,a1,a2。
对种子点进行数量扩展,并计算各扩展种子点与所述拟合的平面之间的距离,选取距离小于设定阈值的扩展种子点为新的种子点。
其中A=a1,B=a2,C=-1,D=a0。判定每个扩展点的Dis与阈值的大小,Dis小于阈值的判定为平面上的点。
将此新的种子点加入前述种子点中并再次拟合成新的平面;重复上述步骤直至无再进行扩展的种子点,所得新的平面上的点的数据即为平面特征点云数据。直到加入种子点的个数为0时,第一个平面提取结束。重新选取第二个平面的种子点进行上述循环判定,最后提取出样本点内的所有平面。
由于现实世界中的平面不是绝对意义上的平面,而上述中拟合的平面都是绝对平面,这样就难免出现实际物体上同一平面的点云被划分为多个平面点集的情况。为避免这种误判断,本实施例采用平面法向一致性和边缘相邻的判断方法,即计算所得的多个平面的法向,以第一个平面的法向为基准,若第二平面的法向与该第一平面的法向夹角小于设定的阈值,且两个平面间两个方向上的距离小于给定阈值,则此第二平面与第一平面为同一平面;重复上述步骤,直至所有平面判断完毕;将判断为同一平面的各平面进行合并,从而得到各平面所对应的平面特征点云数据。
具体如下:
根据平面方程Ax+By+Cz+D=0,求得所有平面的法向(A,B,C)。以第一个平面为基准判断其它平面与第一个平面的法向夹角,如果小于预设阈值则判定为同一平面。剩下的平面也按此规则判定,最后把所有平面都进行合并,得到误差不超过预设阈值的平面点集,完成所有平面的提取。
以上提取平面的方法虽然有较高的精度和抗噪能力,但是该提取算法是串行算法,当样本点较多时该方法的效率会大大降低。考虑到以上算法的缺点,将法向量约束加入平面的提取算法中。
首先,要求得栅格点云中每个点的法向量,点的法向量是由该点和邻域点拟合平面的法向量确定的,并把该拟合平面的法向量当作该点的法向量。栅格点云不同于散乱点云,每个点之间都存在拓扑关系,计算法向量的时候不必再费较长时间计算邻域,直接根据点之间的拓扑关系就可以得到邻域点。
法向量一致的可以判定为在同一平面上的点,现实世界中没有绝对意义上的平面,所以在实际物体同一平面上的点就会有一定的偏差。将这个偏差设定一个阈值,如果两点之间的法向偏差小于阈值则判定两点在一个平面上。进一步的,要把法向一致但不是同一平面上的点分开聚类还需加入其他条件。如果两个平面点集之间的距离(平面之间的垂直距离)大于一定距离,则分别把它们划分成两个平面。
对于单视栅格点云模型数据,采用在QMBB树索引中的所有叶子节点数据分别进行提取的方式进行。通过遍历QMBB树所有叶子节点中存储的分割数据,将分割点云数据中满足特定条件的各个平面全部提取出来,最后利用所有提取出来的平面进行点云部分和平面部分的合并,合并算法与单块分割点云数据的多平面提取相似,在此不再赘述。
本步骤中,提取柱面特征点云数据的步骤包括:
以随机选取的一点为基准点,以由该基准点自下而上、自左而右选取预定数量的点为种子点,以所选取的种子点拟合成柱面。
对种子点进行数量扩展,并计算各扩展种子点与所述拟合的柱面之间的距离,选取距离小于设定阈值的扩展种子点为新的种子点;
将此新的种子点加入前述种子点中并迭代拟合成新的柱面;
重复上述步骤直至无再进行扩展的种子点,所得新的柱面上的点的数据即为柱面特征点云数据。
本实施例中,用种子点拟合圆柱面,因为圆柱面参数有个未知数,所以种子点的个数必须不少于7个。根据圆柱的特性,圆柱面上的点到某一直线的距离等于其半径Dis,
其中,(x0,y0,z0)为圆柱轴线上一点,(l,m,n)为圆柱轴线的方向向量。再根据非线性方程组的最小二乘解得到圆柱面的参数。
用种子点拟合柱面后,计算样本点与已拟合圆柱面的距离Dis,如果Dis小于预设阈值则判定为圆柱面上的点,否则将该点返回样本点等待再次判定。
平面、圆柱面的提取也会出现现实场景中一个圆柱面由于点位误差被分成多个圆柱的情况。此时需要把轴向夹角不超过阈值、边缘点相邻的柱面划分为一个柱面。
即计算所得的多个柱面的轴向,以第一个柱面的轴向为基准,若第二个柱面的轴向与该第一个柱面的轴向夹角小于设定的阈值,且柱面间轴向距离小于给定阈值,则此第二个柱面与第一个柱面为同一柱面;
重复上述步骤,直至所有柱面判断完毕;
将判断为同一柱面的各柱面进行合并,从而得到各柱面所对应的柱面特征点云数据。
上述样本点均来源于QMBB树空间索引的叶子节点中的三维空间点集,由于空间索引中节点划分的终止条件是叶子节点中包含的空间点数量达到某一阈值,而不是按对象划分,因此对于一个比较大的场景来说,一个物体可能被分到两个或多个叶子节点中。之前提取出的各种特征点云可能同属一个物体上,此时,我们需要将判定在同一物体上的同一种特征点并将其合并,重新拟合新的规则几何模型。
因此,本步骤二中,若两个或多个叶子节点中的平面的法向夹角处于预定的阈值范围内、以及所述平面的边界点集连通,则将此两个或多个叶子节点中的平面特征点云数据进行合并;
若两个或多个叶子节点中的柱面的法向夹角处于预定的阈值范围内、以及柱面的边界点集连通,则将此两个或多个叶子节点中的柱面特征点云数据进行合并;
若两个或多个叶子节点中的球面的球心坐标的差值及球体半径的差值语出预设的阈值范围内,则经此两个或多个叶子节点中的球面特征点云数据进行合并。
经过上述方法可以把小块栅格点云中的规则几何模型全部提取出来。有些规则几何模型可以根据其参数构成简单体素,如:球、圆柱,而立方体只能由两个或者多个平面的参数来组成简单体素。
步骤103,根据上述平面、球面、以及柱面的规则几何模型,分别构造对应的长方体、球体、以及圆柱体三维模型。
本步骤中,依据球面特征点云数据而确定球心坐标信息及球体半径信息,再依据球心坐标信息和球体半径信息构造球体三维模型。
长方体的构造要比球体的构造复杂的多,一个完整的长方体由六个面和八个顶点组成,而栅格点云数据对一个长方体的描述只能有最多三个面组成,所以从这有限的条件获取构造长方体所需的参数不像球体那么自动和直接,长方体构造的具体过程如下:
提取预设几个平面的点集,计算各自的最小外包矩形体属性。
确定各个点集对应的拟合平面处于相互垂直状态,选取相邻的二到三个平面点集作为构成长方体所属的点集。具体而言,若各个点集对应的拟合平面的法向夹角为90±5度的范围,则各个点集对应的拟合平面视为处于相互垂直状态。
计算上述确定的长方体点集的有向包围盒属性,将该三维有向包围盒对象作为长方体三维模型。
本步骤中,以柱面特征点云数据确定圆柱体的半径及中心轴线,以柱面特征点云数据在中心轴线上的投影点的最大的距离差为圆柱体的长度而构造圆柱体三维模型。
再经过选取柱面点云特征数据后,进行圆柱面的拟合。圆柱面可以理解为到某一条直线距离都等于固定值R的点的集合,R即为圆柱的半径,直线是圆柱的中心轴所在的直线,用公式表达圆柱为:
其中,(x0,y0,z0)为圆柱轴线上一点,(l,m,n)为圆柱中心轴线的方向向量。再根据非线性方程组的最小二乘解得到圆柱面的参数。
求出圆柱的中心轴向后构建一个直线方程:
求圆柱面上的点在中心轴线上的投影点,取最大的距离差值即为圆柱的长度。至此,为后面构建圆柱三角网所需的圆柱自身参数已经全部获取。
步骤104,将长方体、球体、以及圆柱体的规则几何模型转换为三维空间体素模型,再将所述三维空间体素模型三角化为三角网模型,之后利用该三角网模型结合多面布尔运算算法生成CSG模型。
构造实体几何(CSG)模型是一种通过各种简单体素进行布尔运算得到新的实体表达的方法。简单体素主要包括长方体、柱体、锥体、球、环或封闭的自由曲面等,其运算为几何变换或正则布尔运算,通过对简单体素的交、并、差等正则布尔运算计算新的实体。
CSG表示可以看成是一棵有序的二叉树,称为CSG树。CSG树的结构为:<CSG树>::=<体素>|
<CSG树><集合运算节点><CSG树>|
<CSG树><几何变换节点><几何变换参数>
CSG树的叶子节点是简单体素或者形体的变换参数,非叶子结点是正则的集合运算或几何变换操作。每棵子树表示其下两个节点组合及变换的正确结果,根节点表示了最终的形体。几何变换不一定为刚体变换,也可以是不同范围的剪切变换、比例变换和对称变换。CSG树无二义性的,但不具有唯一性,它的定义是有简单体素、几何变换和正则集合运算算子组成。如果体素是正则集,则还需要进行进一步的二分,只要CSG的叶子是正确的体素,正则集的性质能够保证任何CSG树都是正确的正则集。CSG表示的特点是:数据结构比较简单,数据量较小,修改比较容易,而且可以方便地转换成边界(Brep)表示;但是由于CSG表示受体素的种类和对体素操作的种类的限制,使得它表示形体的覆盖域有较大的局限性,而且对形体的局部操作(例如,倒角等等)不易实现,显示CSG表示的结果形体时需要的间也比较长。
由前述自动提取的规则几何模型生成CSG模型的一般过程如下:首先将规则几何模型向三位空间体素转换,由面模型构建体模型,再将生成的体素三角化为多面体表达,即将体模型用多个三角面片表示。然后在体素集中任意选定两个三角网表达的基本体素,选择组合两个基本体素的集合运算方式(包括并、交、差等算子)进行两两运算,生成一个同样是三角网表达的新物体,利用基本体素和每一步新创建的物体的算子组合,继续构造新物体,直至全部体素运算完成,最终构成一个以三角网模型表达的XSG模型。
前述谈及的几何模型就是简单的体素,如平面,圆球、圆柱及长方体。经过点的聚类、二次曲面及平面的拟合得到的还不是几何实体对象,利用上面得到的参数构造需要的三维几何模型。三维几何模型的构建用顶点和连接线的方式构建三角面片,最后组成几何实体。
1)球的三角化
我们从球面栅格点云中得到的参数是球心(x0,y0,z0)和球半径R,这两个参数足以构建球体模型。具体方法如下:
建立一个单位球的格网模型,球心坐标为(0,0,0),球半径为1,以经差α=10°、纬线差β=10°构建球的经线和纬线,经线和纬线的交点就是近似球面上的点(R×cosθ×cosα,R×cosθ×sinα,R×sinθ)。按照右手系将这些点按照顺序从上到下依次连接就构成了球体的规则三角网模型。
2)长方体的三角化
从栅格点云中通过平面特征提取可以获取到所有的属于平面的点集,这些点集可以拟合成标准的平面,通过相邻三个平面可以求出三个平面的交点即所要构建长方体的一个角点P,再根据这三个平面的点集计算出点集的最小外包盒,然而最小外包盒的中心也就是要构建长方体的中心,利用长方体的一个角点和中心便可以确定长方体的另外7个角点坐标,通过已知的八个角点按照右手系的原则连接成长方体的三角网模型。
3)圆柱体的三角化
从栅格点云中通过圆柱面特征提取得到属于该圆柱面的点集,将这些点集拟合成标准的圆柱面。通过拟合的圆柱面可以获取到圆柱的半径和长度,圆柱两底面的圆心也可以确定下来,以一定的经差将圆柱沿轴向进行剖分形成垂直经线,将圆柱以一定的间距进行横向剖分得到纬线,经线和纬线相交得到圆柱的经纬网格。以圆柱一端圆心(Point1)为起点按照右手系原则从上到下将经纬线的交点连接起来便构成圆柱体的三角网表达。
基本体素三角网表达是由体素的顶点集、颜色集及连接顶点的边集组成,顶点集由Vertex类型的顶点可变数组构成,颜色集由Color类型的颜色可变数组构成,边集由int类型标识动态数组类型表达,每个int类型标识顶点集中三维点的ID号,以ID号来确定构成三角形的顶点。在物理存储结构内,首先存储三角网体素中包含的所有三维点总数,然后按序号依次存储所有顶点的三维坐标值,物理存储结构的第二部分记录三角面片信息,首先记录生成的三角网总数,然后也按序号依次存储三角形的三个顶点ID,ID定义自三维点集中存储的各个ID值。
由已经建立好的球、圆柱和立方体的规则三角网模型进行布尔运算得到所要的实体模型。布尔运算的基本原理就是拓扑重构的过程。本发明中的多面体采用点-线-面的组织方式来存储数据。
在进行布尔运算之前要对多面体对象进行最小外包盒的计算,如果最小外包盒相交再计算多面体的相交,否则就不再进行后续计算,节省资源提高效率。
1、求多面体间的交点。输入两个用点-线-面表达的多面体A、B,用多面体B的每条边与A的每个面进行线面相交计算,运用前述的计算方法求出交点,并定义在三角形内的交点为有效交点,记录有效交点;同样用A的每条边与B的每个面进行线面相交计算,保存有效交点。
2、内、外点的判断。用多面体B的每个顶点与多面体A比较,判断点是否在多面体内,若在内部,依次记录顶点为内点,否则记为外点;再用多面体A的每个顶点与多面体B比较,判断点是否在多面体内,若在内部,依次记录顶点为内点,否则记为外点。分类结果置于相应的标识位中。
3、面面相交有效线的产生。A、B两实体有各自的面M1、M2,求M1的每个边界边与相应平面M2的交点,若交点既在M1的边界上,又在M2的边界内,则该交点为有效点,记录有效点产生的交线。
4、组合体的生成包括多面体的交、并、差运算。布尔运算的交运算:在多面体A的一个面上选取至少3个点,这三个点中应该包括有效交点和内点,以内点为出发点形成一个交面这个交面是按照右手系的原则把这些选出来的点连接起来构成的。对于A中每个平面重复以上步骤,分别求出其交面。同样地,对于多面体B也用上述方法求出其各个面的交面。布尔运算的并运算与交运算方法类似,不同之处在于并运算的出发点是两多面体外点。布尔运算的差运算与并运算类似区别在于形成交面的时候是从第一个多面体外点出发。
尽管本发明的实施方案已公开如上,但其并不仅仅限于说明书和实施方式中所列运用,它完全可以被适用于各种适合本发明的领域,对于熟悉本领域的人员而言,可容易地实现另外的修改,因此在不背离权利要求及等同范围所限定的一般概念下,本发明并不限于特定的细节和这里示出与描述的图例。