三维散乱数据自由曲面逼近技术研究与应用.docx
《三维散乱数据自由曲面逼近技术研究与应用.docx》由会员分享,可在线阅读,更多相关《三维散乱数据自由曲面逼近技术研究与应用.docx(26页珍藏版)》请在冰豆网上搜索。
三维散乱数据自由曲面逼近技术研究与应用
聊城大学东昌学院
本科生毕业论文(设计)
题目:
三维散乱数据自由曲面
逼近技术研究与应用
专业代码:
080251
作者姓名:
蒋永琪
学号:
20080020339
单位:
聊城大学东昌学院
指导教师:
崔传辉
2012年5月10日
目录
前言1
1.概论1
1.1自由曲线、曲面发展简介1
1.2逆向工程的流程2
1.3计算机图形学编程技术研究现状3
1.4本论文的主要工作3
2.基础理论4
2.1完备的空间概念4
2.1.1传统空间的缺陷4
2.1.2仿射空间4
2.2曲线、曲面的表达形式6
2.2.1四种曲线、曲面表示方法6
2.2.2朗格朗日插值及其路径图6
2.2.3有理曲线10
2.2.4曲面11
2.3工具平台简介11
2.4本章小节13
3.曲面逼近的Scilab实现13
3.1 B-样条曲面逼近流程13
3.2B-样条曲面逼近的程序实现——伪代码14
3.3应用实例16
3.4偏差检测20
3.4.1曲面逼近的偏差检测20
3.5本章小结22
结论23
参考文献24
致谢25
摘要
深入研究自由曲线、曲面的基础理论方法及其在产品逆向工程建模中的应用,拟提出坐标无关的三维散乱数据点B-样条曲面逼近算法,主要研究内容及成果如下:
(1)系统、深入地探讨自由曲线、曲面的理论体系,并应用插值路径图实现曲线、曲面构建过程;
(2)提出三维散乱数据的自由曲面逼近算法,实现三维散乱数据的自由曲面逼近算法。
(3)以Scilab为基础工具实现上述算法,并检验算法的合理性及其正确性。
关键词:
逆向工程;参数化;Scilab
Abstract
Thisthesisstudiedandresearchedthebasictheoryoffree-formcurve,Surfaceandthemethodinproductsreverseengineeringmodeling.CarryouttheB-splineapproximationof3Dscattereddatawhichisnotrelativetocoordinate.Themaincontentsandachievementsareasfollows:
(1)Thecurveandsurfacetheoreticalsystemaredeeplystudied.Realizedtheconstructionofcurveandsurfacebasedontheinterpolationmap.
(2)Putforwardanalgorithmof3DscattereddatabasedonaffinespaceandB-splinebasisfunctionandB-splinedifferentialexpression.
(3)RealizedandCheckedoutthecorrectnessandreasonableoftheaboveaalgorithmbasedonSCILAB
Keywords:
ReverseEngineering;Parameters;SCILAB
三维散乱数据自由曲面逼近技术研究与应用
前言
传统的产品开发,一般是首先由设计人员根据市场需求抽象出产品的功能描述,接着在CAD造型软件中进行产品的概念设计,再在此基础上进行详细设计,最后完成其物理实现——制造出产品。
为了实现快速产品开发,设计工程师常常需要以己知的样件(模型)为依据或参考原型,进行仿形、改型设计或工业造型设计。
比如,在摩托车、汽车车身和覆盖件/装饰件等的工业设计和详细设计中,形状独特而复杂的自由曲面件一般不能直接建立CAD模型,往往是以制件模型(如粘土模型等)或经手工进行修改后的样件为设计原型。
这时就要求根据这些模型的表面测量数据,基于新的设计概念和功能描述重构CAD模型,然后用快速原型或数控加工方法得到样件并进行反复优化评估,直至得到满意的设计结果。
这种对实物模型先后进行仿形测量、CAD模型重构、模型加工并进行优化评估的设计方法称为逆向工程Engineering).逆向工程是缩短产品开发周期、实现快速制造的途径之一,尤其在形状复杂的物体或由自由曲面组成的物体的开发研制中。
目前,逆向工程的思想、理论与方法广泛应用于航空航天、汽车、轮船、工艺品、玩具等行业,对于这些行业的产品设计与制造具有重大的理论与实际意义。
1.概论
1.1自由曲线、曲面发展简介
1963年美国波音(Boeing)飞机公司的弗格森(Ferguson)首先提出了将曲线曲面表示为参数的矢函数方法。
他最早引入参数三次曲线,构造了组合曲线和由四角点的位置矢量及两个方向的切矢定义的弗格森双三次曲面片。
从此曲线曲面的参数化形式成为形状数学描述的标准形式。
1964年美国麻省理工学院(MIT)的孔斯(Coons)发表了一个具有一般性的曲面描述方法,给定围成封闭曲线的四条边界就可定义一块曲面片。
1967年,孔斯进一步推广了他的这一思想。
但是上述两种方法对曲线、曲面的形状不易控制:
修改任意一个型值点都会影响整条曲线和整张曲面的形状,且形状变化难以预测,即不具备局部性。
因此这两种方法都属于构造插值曲线和插值曲面的方法,不适用于进行曲线或曲面的设计。
1.2逆向工程的流程
逆向工程流程有数据获取、数据处理、曲面重构三部分。
随着数控技术的日益提高和坐标测量仪的普及可以较容易、快速的从样件获取到高精度的测量数据。
数据处理包括多视拼合、噪声处理、数据精简及特征识别等,是由原始数据到重构曲面之间的关键环节,其处理质量直接影响后期重构曲面的质量。
曲面重构即将测量数据还原为原样件的表面形态。
它所依赖的测量数据按其组织方式的不同可分为以下四类(见图1.1):
扫描线数据:
测量数据由一组扫描线组成,扫描线上点在扫描平面内有序排列。
网格化数据:
测量数据中所有测量点都与参数域中一个均匀网格的顶点对应。
三角化点云:
测量数据点分别为几个三角形的顶点。
散乱数据:
测量点没有明显的集合分布特征,呈散乱无序状态。
上述四类数据类型中后三种均包含一定的几何分布特征,有助于曲面的重构。
散乱数据点云由于本身不包含任何几何分布特征,无论从数据处理,还是曲面重构上均较困难。
此外现在产品原型日益复杂,数据多为在CMM随机测量方式下或激光测量机多次测量下所得,数据量大且呈散乱无序状态。
目前解决三维散乱数据曲面重构的技术主要分为三大部分:
自由曲面逼近技术和基于界面特征的蒙皮技术,主要解决散乱数据的逼近问题;非均匀基B样条小波技术,解决曲面的光顺性问题;局部协调设计技术,解决复杂曲面间的局部几何特性问题。
三维散乱数据的逼近技术不仅应用于对散乱数据的整体逼近上,在数据处理中所运用的参数,直接依赖于对小区域散乱数据的逼近。
因此三维散乱数据自由曲面逼近技术在逆向工程中具有十分重要的地位,对其进行研究具有一定的现实意义。
1.3计算机图形学编程技术研究现状
计算机图形学编程技术包括:
散乱数据的参数化,建立相应的参数方程求解控制顶点。
参数化即在特定的参数面上对已知的散乱数据进行逐点的U、V向赋值。
参数化是自由曲面逼近重构中的关键,合理与否直接影响着后期重构曲面的质量。
曲线、曲面逼近的参数化问题自计算机在设计工程中出现,就一直是一个难题。
没有任何一种参数化方法是完美的、通用,甚至一些数据至今仍不能恰当地处理。
目前三维散乱数据的参数化方法主要采用基面投影法和三角网格剖分法。
1.4本论文的主要工作
针对计算机图形学编程技术现存的问题,本文主要研究内容及方案如下:
(1)深入探讨、研究自由曲线、曲面基础理论,建立全新的、完备知识体系去解释、构建自由曲线、曲面及其基函数等;
(2)研究三维散乱数据的参数化、及其反算,针对课题需要,提出实用的参数化方法,及其具体算法。
拟采用B-样条实现对区域三维散乱数据的逼近。
(3)给出基于线性插值路径图的B-样条曲面曲率计算方法,实现对数据点的曲率估算。
(4)以合适的基础工具实现曲面逼近及曲率估算的具体算法,并给予检测。
2.基础理论
2.1完备的空间概念
2.1.1传统空间的缺陷
在曲线、曲面的表达式中常用已知的控制顶点的组合表达曲线、曲面上的点集,但在传统空间概念中点的任意组合没有意义——不能表示一个固定的点。
在如下直角坐标系中有两个点P(1,1)、Q(2,2),P+Q可表示为:
(1,1)+(2,2)=(3,3),如图2.1所示:
图2.1传统空间的缺陷
将坐标轴Y轴向X轴的负方向平移一个单位,原P、Q的坐标值相应的变为P(2,1)、Q(3,2),相应的P+Q表示为:
(2,1)+(3,2)=(5,3)。
而经坐标变换后原来的P+Q点在新的坐标中的位置为(4,3),相同的两个点的加法组合在不同的坐标中得到不同的点,点的任意组合没有意义。
研究表达式(P+Q)/2:
在第一个坐标系中=(1.5,1.5),在第二坐标系中(P+Q)/2=(2.5,1.5),在空间内表示位置一致。
P+Q虽然是不确定的,但(P+Q)/2总是确定的且与坐标无关,它是链接P和Q点的中点。
类似的对于多个点组合,在时,表示为一个固定点,与P所选的坐标无关。
2.1.2仿射空间
在传统的空间内点和向量、点和点之间的关系并未被明确的定义,但在具体应用中国内学者仍在不完善的理论基础上对点和向量、点和点进行的各种组合,处理各种曲线、曲面及点云数据等。
向量具有大小和方向、没有位置的概念,可在向量空间内任意移动。
向量空间是封闭的,对任意向量进行加减及数乘操作,仍得到一个向量。
定义点和向量之间的运算法则:
1.定义点P减去点Q为一由点Q指向点P的向量。
2.定义点P加上一个向量v,为在点P的基础上、v的方向上平移v的长度后得到的点Q。
此外对于单个点的数乘定义:
1*P=P;(2.1)
0*P=0;(2.2)
0*P=undefined(未定义),c≠0,1.(2.3)
分析上一节中(P+Q)/2的形式,变形如下:
(P+Q)/2=P/2+Q/2
=P/2+P/2-P/2+Q/2
=(P/2+P/2)+(Q/2-P/2)
=P+1/2(Q-P)(2.4)
式2.1经转换表示为:
一个点加上一个向量的形式。
同理:
对于在的情况下,经恒等变形,也可以化为形如上式一个点加上一组向量的形式。
当时,称为仿射组合。
每一个Pk-P0是一个向量,因此仿射组合是点P0和向量的和;即一组点的仿射组合构成一个新的点。
对于仿射组合的点除了具有抽象的数学意义,还具有实质性的物理意义。
除了点的仿射组合外,当时,也是一个有意义的表达式,它表示为一个向量。
2.2曲线、曲面的表达形式
2.2.1四种曲线、曲面表示方法
一般在计算机图形学和几何设计中与有四种表示曲线、曲面的方法:
显式、隐式、参数式及过程式。
显式形如:
y=f(x),它将一个变量用其它变量直接表示出来。
显式形式简单、易于理解,但显式不能简单的表示自相交的曲线。
隐式形如:
f(x,y)=0,它给出两个向量的相对约束关系,而不直接解出一个变量。
隐式的表示要比显式方程简单的多、一般的多。
隐式可以表达自相交的曲线,但x与y的对应关系不定,求解具体图形困难。
参数式形如:
x=x(t),y=y(t),z=z(t)或x=x(s,t),y=y(s,t),z=z(s,t)等参数式比隐式更为一般,表示方法简单、容易作图、易扩展到高维且表示方式不唯一易于优化处理。
曲线、曲面的过程式定义:
在几何设计中,等距曲线、曲面的过渡及曲线、曲面束一般都是通过一个过程来确定的而不是公式。
在实体造型中,几何图形一般由譬如并、交、差等布尔运算来构造等等,都是过程式的结果。
过程式应用在反求曲线、曲面的后期阶段。
对比过程式除外的三种表示方法:
显式和隐式并没有摆脱坐标系的约束,形式表现为坐标方程;参数式引入参数t在形式摆脱了坐标值的出现,且将它和多项式结合以后,十分适合计算机的求解且用如下形式可构造出坐标无关的表示方法:
(2.5)
(2.6)
这种曲线、曲面的表达方法是坐标无关的、易于理解且十分便于计算机的处理。
2.2.2朗格朗日插值及其路径图
(1)线性插值及其路径图:
一条经过两个点P0、P1的直线,可以用式2.2表示:
(2.7)
曲线P(t)在t=0时过点P0、在t=1时过点P1。
随着t的变化,点P(t)在P0P1的方向上延伸,构成过点P0、P1的直线。
重新排列上式:
(2.8)
式2.8称为线性插值。
式(2.8)中P(t)在t=0时过点P0、在t=1时过点P1。
但原要求只是一条过P0、P1两点的直线,对于参数t在P0、P1处取什么值并未作要求。
可以假设P(t)在t0处过点P0,在t1处过点P1。
这样式2-15改写为:
,
,
(2.9)
由式2.9满足的条件,求f(t)的表达式:
(2.10)
所以式2.7,可以写成:
(2.11)
式2.11是构建自由曲线、曲面的基本公式,具有及其重要的地位。
它的含义可由计算路径图2.3表示:
在仿射空间内点相乘的系数之和为1,规范化路径图中相邻路径路标分子相加可以得到分母,简化图2.3得通常情况下用的非规范化路径图2.4:
(2)朗格朗日插值:
线性插插值解决了空间两点的插值问题,但没有解决空间中三个控制点P0、P1、P2在节点t0、t1、t2出进行插值问题。
为了得到光滑的插值曲线,不能对空间三点用两段直线P0P1、P1P2去插值。
为保证所得的曲线是光滑的,对P0P1(t)、P1P2(t)进行再插值得内瓦尔算法:
(2.12)
通过代换很容易证实在t取值为t0、t1、t2时,分别对P0、P1、P2进行插值;通过对P012(t)的求导,也很容易判断它的一阶导数连续。
式2.12中P012(t)满足插值要求。
插值曲线如图2.5:
插值路径图为:
利用此方法一次递推可得出插值的通式表达:
(2.13)
同理可对四个空间点在四个节点处的插值路径图2.7:
如上插值方法可以推广到任意多个点的插值。
为了方便表达可以将由递推的来的多项式插值公式写成式2.14的形式:
(2.14)
此处:
是
在
点出关于t0,…,tn的参数式。
它等于
到
所有路径路标(规范的)乘积的总和。
2.2.3有理曲线
非有理的自由曲线很难准确的用参数多项式表示简单的曲线(如:
抛物线、圆等),如半圆如用非有理多项式要用六次多项式插值半圆上的七个点,才能近似逼近,次数过高,处理不方便,且并非完全吻合。
而引入有理表达方式,只需三个点,即可用二次多项式完全一致的表达此半圆。
有理曲线的具体应用:
首先,将仿射空间的仿射点赋予相应的质量扩展成格拉斯曼空间,中的质点;其次,在格拉斯曼空间中对已知质点进行差值逼近,得格拉斯曼空间中曲线上的点;最后,将格拉斯曼空间中的质点还原为仿射空间中的点。
实例:
对(-1,0),(0,1),(1,0)三点进行半圆插值,取节点(-1,0,1),质量的计算:
带入t=-1,0,1得:
m0=2,m1=1,m2=2。
得格拉斯曼空间内多项式曲线:
映射(还原)到仿射空间:
计算后、绘图如下:
图2.8半圆的有理插值
2.2.4曲面
此处介绍曲面的基本形式——张量积曲面。
张量积曲面是对控制控制点的双向插值或逼近,如图2.9:
张量积公式表达:
因此一旦控制点和相应的节点确定,通过参数s,t的变化可得到曲面上的任一点。
2.3工具平台简介
本课题为实验、验证、开发性课题,现在所做的皆为以后课题的顺利完成做铺垫。
为实现自由曲线、曲面的计算机表达,借助于一定的工具是必要的。
为了今后的学习,希望选择的工具有一定的通用性,支持汇编语言,且具有一定的图形显示功能。
经综合考虑,工具选择为:
Scilab4.1.1。
Scilab是以法国国立信息与自动化研究院为主的科学家为主共同开发的“开放源代码”式的科学计算软件,双平台运行,可以免费下载、安装和自由使用。
Scilab4.1.1及其以前的版本与Matlab在使用上具有一定的通用性,功能上具有一定的相似性,不做具体介绍。
Scilab为免费软件,且源代码开放,以此为基础实验、开发平台,既能简单的,以接近汇编语言的形式实现各种运算功能,又能利用自带的图形界面将计算数据代表的图形绘制出来。
同时通过对Scilab的运用,可以加深对图形界面的理解。
Scilab的主界面:
图2-24Scilab主界面
图2.10Scilab的主界面
图2.11Scilab图形界面
2.4本章小节
本章致力于自由曲线、曲面的基础知识体系的研究,提出了基于路径图的自由曲线、曲面基函数及其微分的构建方法,主要成果如下:
(1)对仿射空间及格拉斯曼空间做了深入探讨,建立了坐标无关的概念,揭示了自由曲线、曲面的内涵;
(2)引入“线性插值”路径图,深入揭示了自由曲线、曲面的构建过程;
(3)基于“线性插值”路径图,构建出了自由曲线、曲面基函数及其微分函数。
3.曲面逼近的Scilab实现
3.1 B-样条曲面逼近流程
Scilab中的实现过程基本遵循上述算法的思路,同时考虑Scilab的具体功能特性,及算法的高效性、以维护等,主程序流程图如下:
3.2B-样条曲面逼近的程序实现——伪代码
//p为(n*3)的点云数据矩阵,U、V为曲面两方向的逼近样条次数,U_num、V_num为曲面两个方向样条段数。
P为控制点,H为平均曲率,K为高斯曲率
定义函数App_face(p,U_p,V_p,U_num,V_num)返回值为[P,k_1,k_2]
获取点云数据点数量num;
//建立最小二乘平面
加载"plane.sce",定义函数plane(p);
C调用函数plane(p),获取最小二乘平面参数信息C;
//数据点在平面上的投影
加载"projection.sce",定义函数projection(p,C);
调用函数projection(p,C),获取投影点坐标P_p;
//平面坐标中的二维坐标
加载"plane_coordinate.sce",定义函数plane_coordinate(P_p,C);
调用函数plane_coordinate(P_p,C),获取投影点在平面内的二维坐标P_2;
//在平面内建最小包围矩形,返回【p(00);p(x0);p(0y)】,其中X轴向边长不小于Y轴边长
加载"min_rectangle.sce",定义函数min_rectangle(P_2);
调用函数min_rectangle(P_2),获取最小包围矩形的信息P_0xy;
//参数化,返回各点在最小二乘平面上的U向和V向参数
加载"min_plane_parameter.sce",定义函数min_plane_parameter(P_2,P_0xy);
调用函数min_plane_parameter(P_2,P_0xy),获取格数据点的参数param
//指定U、V节点向量
//均匀参数化,样条段数。
加载"UV_param_j.sce",定义函数UV_param(U/V_p,U/V_num);
调用函数U=UV_param(U_p,U_num),获取U向节点矢量U;
调用函数V=UV_param(V_p,V_num),获取V向节点矢量V;
//反求控制顶点
加载"B_spline_Basis_j.sce",定义函数B_spline_basis(U/V,u_u/v(i),U/V_p);
//设控制点为P,则以有N*P=p,求最小二乘解。
调用函数B_spline_basis(U/V,u_u/v(i),U/V_p),获取数据点云的基函数矩阵D;
构建方程:
;
求解控制点阵P;
//绘制面片图
加载"B_spline_f_grap.sce",定义函数B_spline_f_grap(P,U,V,U_p,V_p);
调用函数B_spline_f_grap(P,U,V,U_p,V_p),绘制曲面;
//求曲面上点的主曲率
加载"H_K.sce",定义函数H_K(P,U,V,U_p,V_p,u,v);
调用函数H_K(P,U,V,U_p,V_p,u,v),获取平均曲率和高斯曲率H,K;
求解主曲率k_1,k_2;
定义结束
注:
参数含义表
P
数据点云
U_p
U向样条次数
V_p
V向样条次数
U_num
U向样条段数
V_num
V向样条段数
C
基平面法矢
P_p
基平面投影点
P_2
投影点的二维坐标
P_0xy
最小包围矩形的三点坐标
param
数据点云的参数
U
样条U向节点矢量
V
样条V向节点矢量
N
样条基
P
控制点
H
平均曲率
K
高斯曲率
k_1
最大曲率
k_2
最小曲率
3.3应用实例
(1)打开Scilab:
图3.2Scilab界面
(2)切换目录:
cd“脚本文件目录地址”(如:
cdD:
\scilab.jiaoben),将工作目录转换到本程序脚本目录下。
如下:
-->cdD:
\scilab.jiaoben
ans=
D:
\scilab.jiaoben
(3)加载函数:
“exec(“App_face.sce”)”加载函数App_face(p,U_p,V_p,U_num,V_num)。
如下:
-->exec("App_face.sce")
-->//p为(n*3)的点云数据,U、V为曲面两方向的逼近样条次数。
-->functionP=App_face(p,U_p,V_p,U_num,V_num)
-->num=size(p,1);
加载过程中如出现:
[More(yorn)?
],输入y,直到出现-->endfunction。
(4)获取点云数据。
如下:
-->p=[110;120;130;210;220.3;230;310;320;330]
p=
1.1.0.
1.2.0.
1.3.0.
……
p=[220.3
120
130
210
110
230
310
320
330]
这样将使得很容易从.asc文件中得到我们想要的点云数据。
文件建立好执行相应脚本文件读入点数据。
命令如下:
-->exec("points.sce")
(5)反求控制顶点及主曲率:
[Pk_1k_2]=App_face(p,2,2,1,1)。
执行过程中如出现:
[More(yorn)?
],输入y,直到出现-->endfunction。
执行完毕后将得到控制点数据:
-->
k_2=
9.60