本发明属于几何造型技术领域,尤其涉及一种基于b样条的插值曲线或曲面的构造方法及系统。
背景技术
目前,业内常用的现有技术是这样的:
样条曲线(splinecurves)是指给定一组控制点而得到一条曲线,曲线的大致形状由这些点予以控制,一般可分为插值样条和逼近样条两种,插值样条通常用于数字化绘图或动画的设计,逼近样条一般用来构造物体的表面。样条曲线是经过一系列给定点的光滑曲线。最初,样条曲线都是借助于物理样条得到的,放样员把富有弹性的细木条(或有机玻璃条),用压铁固定在曲线应该通过的给定型值点处,样条做自然弯曲所绘制出来的曲线就是样条曲线。样条曲线不仅通过各有序型值点,并且在各型值点处的一阶和二阶导数连续,也即该曲线具有连续的、曲率变化均匀的特点。然而,现有样条的插值曲线光滑效果差,与实际曲线偏离大;同时对于特征曲面仅用自由曲面的方法拟合,消耗大量的计算机资源。
插值样条曲线/曲面有不少构造方法,在几何造型中占有重要的地位。目前现有技术对有理三次样条以及它们在形状控制中的应用进行了研究以及对三角多项式的插值样条进行了研究,取得了一些有用的结果。
基于反例路径的抽象细化(counterexample-guidedabstractionrefinement,cegar)技术的过程如下:给定一个模型和性质,首先通过抽象的方法生成一个抽象模型。抽象模型包含的行为可能会多于原始模型,但是,抽象模型的结构和描述都比原始模型简单,所以可以缓解状态空间爆炸问题。然后调用模型检测器,检测公式是否在抽象模型中有效。如果有效,则程序终止;否则,会给出反例路径,然后进行重构(reconstruction)过程,即在原始模型中,如果成功找到一条路径对应于反例路径,则程序结束;否则,反例路径为虚假反例路径,下一个迭代过程开始,重新生成抽象模型,进行验证。重复此过程,直到返回有效或者无效,或者状态空间爆炸造成程序停止。动态符号执行技术是一种符号执行与具体执行相结合的测试手段。符号执行是指在不执行程序的前提下,用符号值表示程序变量的值,然后模拟程序执行来进行相关分析。首先,对待分析代码构建控制流图(controlflowgraph,cfg),它是编译器内部用有向图表示一个程序过程的抽象数据结构。在cfg上从入口节点开始模拟执行,在遇到分支节点时,使用约束求解器判定哪条分支可行,并根据预先设计的路径调度策略实现对该过程所有路径的遍历分析,最后输出每条可执行路径的分析结果。动态符号执行是以具体数值作为输入,同时启动代码模拟执行器,并从当前路径的分支语句的谓词中搜集所有符号约束。然后根据策略反转约束中的一个分支,构造一条新的可行的路径约束,并用约束求解器求解出一个可行的新的具体输入,接着符号执行引擎对新输入值进行新一轮的分析。通过使用这种输入迭代产生新输入的方法,理论上所有可行的路径都可以被计算并分析一遍。动态符号执行技术的主要瓶颈是路径爆炸问题,即随着程序中分支数的增多,路径呈指数级增加。插值是缓解路径爆炸问题的有效方法,主要是一种搜索剪枝的思想,通过利用不可行路径给行节点标记插值,插值是指一定不会到达被标记为错误行的条件约束。对于分支节点,若该节点的每个分支都被探索过,那么在该节点标记的插值为全插值,否则为半插值。在动态符号执行中,若从开始节点到当前节点的路径约束满足当前节点的全插值,则该路径可被归并,即不被探索,从而有效缓解了路径爆炸问题。
综上所述,现有技术存在的问题是:
现有样条的插值曲线光滑效果差,与实际曲线偏离大;同时对于特征曲面仅用自由曲面的方法拟合,消耗大量的计算机资源。
目前的样条曲线/曲面不插值控制顶点,或者说不具有插值功能,生成的是自由曲线/曲面。
对于大规模系统,抽象模型在进行验证时细化次数过多,且模型检测的瓶颈是状态爆炸。
技术实现要素:
针对现有技术存在的问题,本发明提供了一种基于b样条的插值曲线或曲面的构造方法及系统。
本发明是这样实现的,一种基于b样条的插值曲线或曲面的构造系统,包括:
函数调配模块,与伸缩平移模块连接,用于选取调配函数,作连结各样条小区间的两个端点的直线以及连结以及对应的两相邻deboor控制顶点的直线,作各样条小区间上的样条曲线上的点与连结各样条小区间的两个端点的直线上的点的差得到增量向量;
伸缩平移模块,与函数调配模块、曲线生成模块连接,用于将增量向量通过伸缩后平移到连结两相邻deboor控制顶点的直线上就得到了各样条小区间插值于deboor控制顶点的插值曲线;
曲线生成模块,与伸缩平移模块、中央处理模块连接,用于对于三次b样条曲线,得到调配函数用bézier形式的表示式,构造的插值于控制顶点的曲线是三次b样条插值曲线;对于四阶四次b样条曲线也可用增量伸缩平移方法,生成了相应的插值曲线,其调配函数中含有一个自由参数,是一个四阶四次b样条多项式;
插值曲线的构造方法包括:
在每个区间样条子区间[ti,ti+1](i=0,1,2,…,m-1)上,连接b样条曲线段d(t)的两个端点d(ti)和d(ti+1)的直线段记为li(t),方程为:
li(t)=(1-φi(t))d(ti)+φi(t)d(ti+1),ti≤t≤ti+1;
而连接两相邻deboor点di和di+1的直线段记为li(t),方程为:
li(t)=(1-φi(t))d(ti)+φi(t)d(ti+1),ti≤t≤ti+1;
li(t)=(1-φi(t))di+φi(t)di+1,ti≤t≤ti+1;
作曲线段d(t)与直线段li(t)在区间[ti,ti+1]上的差向量:
δi(t)=d(t)-li(t),ti≤t≤ti+1;
差向量伸缩,即得αδi(t),α>0,将其平移,使其起点落在直线段
di(t)=li(t)+αδi(t),ti≤t≤ti+1,i=0,1,2,…,m-1;
或写为:
di(t)=[(1-φi(t))di+φi(t)di+1]+α[d(t)-(1-φi(t))d(ti)-φi(t)d(ti+1)];
ti≤t≤ti+1,i=0,1,2,…,m-1;
函数φi(t)满足如下的条件:
φi(t)在区间[ti,ti+1]上具有直到n-2阶的连续导数;
得:
φi(t)在区间[ti,ti+1]为单调增函数,以避免直线段li(t)和li(t)出现重结点;
四阶四次b样条插值曲线的构造方法包括:
给定区间[a,b]的一个扩充分划:
t-6≤t-4≤t-2≤a=t0<t1<…<t2i<t2i+1<…<t2m-1<t2m=b≤t2(m+1)≤t2(m+2)≤t2(m+3);
及deboor控制顶点序列:
d-1,d0,d1,d2,…,dm,dm+1;
区间[a,b]上以:
{t-6,t-4,t-2,t0,t2,…,t2i,…,t2(m-1),t2m,t2(m+1),t2(m+2),t2(m+3)};
为样条结点的四阶四次b样条曲线记为:
其中b样条基函数ωj(t)的支集上的样条结点为:
t2(j-2),t2(j-1),t2j,t2(j+1),t2(j+2),j=-1,0,1,…,m+1;
在r(t)的基础上,构造一条四阶四次b样条插值曲线ri(t),使得它通过诸型值点列{dk},即满足插值条件:
ri(t2k)=dk,k=0,1,2,…,m;
连接曲线段r(t)两端点r(t2i)和r(t2i+2)的直线段记为:
连接两相邻deboor点di和di+1的直线段记为:
调配函数ψi(t)的表达式为:
其中ei0是自由参数,
中央处理模块,与曲线生成模块、曲线平滑模块、曲线拟合模块、数据存储模块、显示模块连接,用于调度各个模块正常工作;中央处理模块的控制方法包括:
步骤一,根据待验证的程序,生成控制流图cfg,给cfg中的结点添加3个属性:r插值,s插值和e插值,r插值是结点可达的约束条件,判断一个状态的可达性;s插值和e插值对路径进行规约,加快程序的验证;给cfg的边添加属性w;一条边的w值表示以该边指向的结点为根结点的子图中,还没有被遍历的分支的个数;
步骤二,根据生成的cfg,生成抽象可达图arg,如果沿着一条路径生成一个新状态s,如果s对应的r插值被满足,说明状态s可达,继续沿着状态s遍历该路径;否则,状态s不可达,则该路径终止,遍历其他路径;对于一个可达的状态s,如果状态s对应的e插值被该路径对应的路径公式蕴含,说明沿着该状态存在一条到达目标状态的路径,程序不安全;如果状态s对应的s插值被蕴含,说明以状态为起点的所有路径都是安全的,不需要沿着状态s探索程序;如果状态s是可达的,且e插值和s插值都不被蕴含,则继续沿着状态s遍历该路径;
步骤三,在生成arg的过程中,发现一条反例路径,到达目标状态,则需要进一步判断反例路径是否虚假;不是虚假反例,则说明程序是不安全的;否则,根据虚假反例,细化模型,分别计算并更新对应状态的r插值,s插值和e插值,执行重新生成arg,直到找到一条真反例路径或不存在反例路径;
曲线平滑模块,与中央处理模块连接,用于获取b样条曲线的平滑曲线;
曲线拟合模块,与中央处理模块连接,用于利用ransac算法结合plucker坐标优化拟合回转轴空间方程,依赖回转轴线方向将三维轮廓点云映射至二维平面,并依据平方距离最小化法作为度量拟合b样条母曲线;
数据存储模块,与中央处理模块连接,用于存储b样条曲线数据;
显示模块,与中央处理模块连接,用于显示b样条曲线。
进一步,所述步骤三中计算插值和w属性的具体步骤包括:
1)在生成arg的过程中,发现一条反例路径path:〈s0,e0,s1,…,en-1,sn〉;利用smt求解器判断path是不是虚假;如果path是真反例,则程序不安全,验证结束;如果path是虚假的,则执行2);
2)计算r插值,对于状态si,0<i<n,将path划分为两部分:pre和post;pre子序列为<s0,…,si>,post子序列为<si,…,sn>,利用craig插值公式计算新的r插值,craig(pre,post),更新si[0]的r插值,形式化地表示为:
r-intp(si[0])=r-intp(si[0])∪craig(pf(s0,..,si),pf(si,…,sn));
其中,pf(s0,…,si)表示从s0到si的路径对应的路径公式;
3)计算s插值,首先找到path的可达的有效序列π=<s0,...,sm>,0<m<n,且si状态可达,si+1状态不可达;对于π的每一个状态si,0<i≤m,判断s插值的的第一个元素是full还是half;si[0]的所有后继结点的s插值都是full,则si[0]的s插值为full,否则,si[0]的s插值为half;具体的形式如下:
对于s插值的第二个元素,记为is(si[0]),分两种情况,如果i=m,则is(si[0])是边ei+1的路径公式取反;如果0<i<m,is(si[0])利用craig插值计算,记为craig(a,b);其中,a表示从s0到si的路径公式,b是边ei对应的公式和状态si+1对应的s插值取反的合取式;具体的形式如下:
其中,a=pf(s0,…,si),b=pf(si,ei,si+1)∧!(is(si+1[0]);从sm状态开始倒序地计算每个状态的插值,直到初始状态或者某一状态的s插值为half;
4)计算e插值,找到path的最大有效后缀序列π=<si,…,sn>,0<i≤n;从si状态开始,利用craig插值,倒序地计算对应的e插值,记为craig(a,b);对于si,a是从si到sn的路径公式和sn的e插值的合取式,b是从s0到si的路径公式;对于状态sj,0<j<i,a是从sj到sj+1的路径公式和sj+1的e插值的合取式,b是从s0到sj的路径公式,具体的形式如下:
5)计算边的w值,根据反例路径和更新后的s插值,来计算对应边的w值,对于一条边e:(s,op,s'),如果s'的s插值是full,则e的w值为0;如果s'的s插值是half,且s'是最后一个可达状态,e的w值为s'[0]的出边的个数-1;如果s'的s插值是half,且s'不是最后一个可达状态,e的w值为两部分的和:1)s'[0]的出边中w值不为⊥的边的w值的和,2)s'[0]的出边中w值为⊥的边的个数;对于边e:(s,op,s'),s':(l',c',p')具体的形式如下:
6)跳转到步骤二,重新生成arg;
所述4)中计算最大有效后缀序列的具体步骤包括:
(1)对于反例路径path:〈s0,e0,s1,…,en-1,sn〉,边分为两类:分支边集合eb和非分支边ea;
(2)生成path对应的路径公式,其中,对于e∈eb,对应的公式用true代替;对于e∈ea,生成其对应的公式,生成新的路径公式pf;
(3)从边en-1开始反向搜索,如果
本发明另一目的在于提供一种基于b样条的插值曲线或曲面的构造方法包括以下步骤:
步骤一,通过函数调配模块选取调配函数,作连结各样条小区间的两个端点的直线以及连结以及对应的两相邻deboor控制顶点的直线,作各样条小区间上的样条曲线上的点与连结各样条小区间的两个端点的直线上的点的差得到增量向量;
步骤二,通过伸缩平移模块将增量向量通过伸缩后平移到连结两相邻deboor控制顶点的直线上就得到了各样条小区间插值于deboor控制顶点的插值曲线;通过曲线生成模块获取b样条的插值曲线;
步骤三,中央处理模块调度曲线平滑模块获取b样条曲线的平滑曲线;
步骤四,通过曲线拟合模块利用ransac算法结合plucker坐标优化拟合回转轴空间方程,依赖回转轴线方向将三维轮廓点云映射至二维平面,并依据平方距离最小化法作为度量拟合b样条母曲线;
步骤五,通过数据存储模块存储b样条曲线数据;通过显示模块显示b样条曲线。
进一步,所述曲线平滑模块平滑方法如下:
首先,对图像进行二值化,并通过细化,将图像中存在的每条曲线变成单像素曲线,得到曲线集合c={vi|i=1,2,…,n},vi={ptij|j=1,2,…,mi},其中n表示单像素曲线数量,vi表示第i条曲线,ptij表示第i条曲线的第j个点,mi表示第i条曲线像素点的数量;
然后,对于图像中的每条曲线vi从起点到终点进行间隔取样,间隔大小由预先设定,将不在取样点上的点从曲线vi中剔除,得到新的曲线vi;
最后,对上步得到的每条新的曲线vi,通过循环取点,每次选取相邻三个点作为控制一段二次b样条曲线的形状的点,三个控制点分别记为p1、p2和p3,得到简单曲线的平滑曲线。
进一步,所述曲线拟合模块拟合方法如下:
首先,利用ransac算法结合plucker坐标对回转轴进行估计;
然后,依赖回转轴线方向将三维轮廓点云映射至二维平面,并依据平方距离最小化法作为度量拟合b样条母曲线以确定回转曲面的母曲线。
进一步,所述利用ransac算法结合plucker坐标对回转轴进行估计包括:
建立一条直线的标准plucker坐标,其中,所述直线的方向向量为单位向量,且所述直线的方向向量和矩向量相互正交;
添加plucker坐标的约束条件,所述约束条件为回转轴的方向向量和回转轴的矩向量相互正交,采用拉格朗日乘子法求解,引入拉格朗日乘子,得到目标函数;
利用ransac估计算法以得到的目标函数来估计回转轴。
本发明的另一目的在于提供一种实现所述基于b样条的插值曲线或曲面的构造方法的计算机程序。
本发明的另一目的在于提供一种实现所述基于b样条的插值曲线或曲面的构造方法的信息数据处理终端。
本发明的另一目的在于提供一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行所述基于b样条的插值曲线或曲面的构造方法。
本发明的优点及积极效果为:
本发明通过曲线平滑模块对图像中的曲线进行平滑操作,它可以有效地把图像中的不光滑曲线段变得光滑,而且平滑操作之后的曲线相对于原始曲线基本上没有缺损,与实际曲线偏离不会很大,并且可以通过自己调整间隔大小来调控曲线平滑的程度大小;同时本发明通过曲线拟合模块利用ransac算法结合plucker坐标优化拟合回转轴空间方程,依赖回转轴线方向将三维轮廓点云映射至二维平面,并依据平方距离最小化法作为度量拟合b样条母曲线,从而能够实现回转类零件沿其回转轴线方向的映射重建,有助于简化数据处理过程,降低计算机资源的消耗。
利用增量伸缩平移和张量积的方法,构造了矩形域上的插值于控制顶点网格的双三次b样条插值曲面b和样条插值曲面和双四阶四次b样条插值曲面,插值曲线/曲面的构造方法简洁,几何意义明显,与burbs方法相容,对几何造型是有意义的。本发明提出了一个新的几何造型方法,这个方法解决了插值控制顶点的问题,对于逆向工程具有重要意义。
本发明更加充分地利用了模型检测中虚假反例路径提供的信息,通过计算s插值和e插值,提高了检测的效率,使得模型检测算法可以更好地应用于大规模的程序;s插值可以判断出一个状态后续所有可能的路径序列是否都是安全的,从而避免不必要的探索,大大地减少arg的状态数;e插值可以运用于快速地判断程序中是否存在真反例路径,加快了程序的验证,提高了效率。
本发明裁剪了cfg中无用的结点和边,进一步缩小了遍历的状态空间,在cfg的边上添加w属性,使得程序验证的效率得到进一步的提升。通过缩减抽象模型验证时的路径搜索空间从而缓解状态爆炸问题,加快验证效率。同时提供了两种优化操作,使得验证过程更加高效;主要应用于工业,军事,农业,科研等领域设计的软硬件系统正确性的形式化验证,以及各类通信协议安全性,可靠性的形式化验证。
附图说明
图1是本发明实施提供的基于b样条的插值曲线或曲面的构造系统结构框图。
图2是本发明实施提供的基于b样条的插值曲线或曲面的构造方法流程图。
图1中:1、函数调配模块;2、伸缩平移模块;3、曲线生成模块;4、中央处理模块;5、曲线平滑模块;6、曲线拟合模块;7、数据存储模块;8、显示模块。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,本发明提供的基于b样条的插值曲线或曲面的构造系统包括:函数调配模块1、伸缩平移模块2、曲线生成模块3、中央处理模块4、曲线平滑模块5、曲线拟合模块6、数据存储模块7、显示模块8。
函数调配模块1,与伸缩平移模块2连接,用于选取调配函数,作连结各样条小区间的两个端点的直线以及连结以及对应的两相邻deboor控制顶点的直线,作各样条小区间上的样条曲线上的点与连结各样条小区间的两个端点的直线上的点的差得到增量向量;
伸缩平移模块2,与函数调配模块1、曲线生成模块3连接,用于将增量向量通过伸缩后平移到连结两相邻deboor控制顶点的直线上就得到了各样条小区间插值于deboor控制顶点的插值曲线;
曲线生成模块3,与伸缩平移模块2、中央处理模块4连接,用于对于三次b样条曲线,得到调配函数用bézier形式的表示式,构造的插值于控制顶点的曲线是三次b样条插值曲线;对于四阶四次b样条曲线也可用增量伸缩平移方法,生成了相应的插值曲线,其调配函数中含有一个自由参数,是一个四阶四次b样条多项式;
中央处理模块4,与曲线生成模块3、曲线平滑模块5、曲线拟合模块6、数据存储模块7、显示模块8连接,用于调度各个模块正常工作;
曲线平滑模块5,与中央处理模块4连接,用于获取b样条曲线的平滑曲线;
曲线拟合模块6,与中央处理模块4连接,用于利用ransac算法结合plucker坐标优化拟合回转轴空间方程,依赖回转轴线方向将三维轮廓点云映射至二维平面,并依据平方距离最小化法作为度量拟合b样条母曲线;
数据存储模块7,与中央处理模块4连接,用于存储b样条曲线数据;
显示模块8,与中央处理模块4连接,用于显示b样条曲线。
本发明提供的曲线平滑模块5平滑方法如下:
首先,对图像进行二值化,并通过细化,将图像中存在的每条曲线变成单像素曲线,得到曲线集合c={vi|i=1,2,…,n},vi={ptij|j=1,2,…,mi},其中n表示单像素曲线数量,vi表示第i条曲线,ptij表示第i条曲线的第j个点,mi表示第i条曲线像素点的数量;
然后,对于图像中的每条曲线vi从起点到终点进行间隔取样,间隔大小由预先设定,将不在取样点上的点从曲线vi中剔除,得到新的曲线vi;
最后,对上步得到的每条新的曲线vi,通过循环取点,每次选取相邻三个点作为控制一段二次b样条曲线的形状的点,三个控制点分别记为p1、p2和p3,得到简单曲线的平滑曲线。
本发明提供的曲线拟合模块6拟合方法如下:
首先,利用ransac算法结合plucker坐标对回转轴进行估计;
然后,依赖回转轴线方向将三维轮廓点云映射至二维平面,并依据平方距离最小化法作为度量拟合b样条母曲线以确定回转曲面的母曲线。
本发明提供的利用ransac算法结合plucker坐标对回转轴进行估计包括:
建立一条直线的标准plucker坐标,其中,所述直线的方向向量为单位向量,且所述直线的方向向量和矩向量相互正交;
添加plucker坐标的约束条件,所述约束条件为回转轴的方向向量和回转轴的矩向量相互正交,采用拉格朗日乘子法求解,引入拉格朗日乘子,得到目标函数;
利用ransac估计算法以得到的目标函数来估计回转轴。
如图2所示,本发明提供的一种基于b样条的插值曲线或曲面的构造方法包括以下步骤:
s101,通过函数调配模块选取调配函数,作连结各样条小区间的两个端点的直线以及连结以及对应的两相邻deboor控制顶点的直线,作各样条小区间上的样条曲线上的点与连结各样条小区间的两个端点的直线上的点的差得到增量向量;
s102,通过伸缩平移模块将增量向量通过伸缩后平移到连结两相邻deboor控制顶点的直线上就得到了各样条小区间插值于deboor控制顶点的插值曲线;通过曲线生成模块获取b样条的插值曲线;
s103,中央处理模块调度曲线平滑模块获取b样条曲线的平滑曲线;
s104,通过曲线拟合模块利用ransac算法结合plucker坐标优化拟合回转轴空间方程,依赖回转轴线方向将三维轮廓点云映射至二维平面,并依据平方距离最小化法作为度量拟合b样条母曲线;
s105,通过数据存储模块存储b样条曲线数据;通过显示模块显示b样条曲线。
下面结合具体分析对本发明作进一步描述。
插值曲线的构造方法包括:
在每个区间样条子区间[ti,ti+1](i=0,1,2,…,m-1)上,连接b样条曲线段d(t)的两个端点d(ti)和d(ti+1)的直线段记为li(t),方程为:
li(t)=(1-φi(t))d(ti)+φi(t)d(ti+1),ti≤t≤ti+1;
而连接两相邻deboor点di和di+1的直线段记为li(t),方程为:
li(t)=(1-φi(t))d(ti)+φi(t)d(ti+1),ti≤t≤ti+1;
li(t)=(1-φi(t))di+φi(t)di+1,ti≤t≤ti+1;
作曲线段d(t)与直线段li(t)在区间[ti,ti+1]上的差向量:
δi(t)=d(t)-li(t),ti≤t≤ti+1;
差向量伸缩,即得αδi(t),α>0,将其平移,使其起点落在直线段
di(t)=li(t)+αδi(t),ti≤t≤ti+1,i=0,1,2,…,m-1;
或写为:
di(t)=[(1-φi(t))di+φi(t)di+1]+α[d(t)-(1-φi(t))d(ti)-φi(t)d(ti+1)];
ti≤t≤ti+1,i=0,1,2,…,m-1;
函数φi(t)满足如下的条件:
φi(t)在区间[ti,ti+1]上具有直到n-2阶的连续导数;
得:
φi(t)在区间[ti,ti+1]为单调增函数,以避免直线段li(t)和li(t)出现重结点;
四阶四次b样条插值曲线的构造方法包括:
给定区间[a,b]的一个扩充分划:
t-6≤t-4≤t-2≤a=t0<t1<…<t2i<t2i+1<…<t2m-1<t2m=b≤t2(m+1)≤t2(m+2)≤t2(m+3);
及deboor控制顶点序列:
d-1,d0,d1,d2,…,dm,dm+1;
区间[a,b]上以:
{t-6,t-4,t-2,t0,t2,…,t2i,…,t2(m-1),t2m,t2(m+1),t2(m+2),t2(m+3)};
为样条结点的四阶四次b样条曲线记为:
其中b样条基函数ωj(t)的支集上的样条结点为:
t2(j-2),t2(j-1),t2j,t2(j+1),t2(j+2),j=-1,0,1,…,m+1;
在r(t)的基础上,构造一条四阶四次b样条插值曲线ri(t),使得它通过诸型值点列{dk},即满足插值条件:
ri(t2k)=dk,k=0,1,2,…,m;
连接曲线段r(t)两端点r(t2i)和r(t2i+2)的直线段记为:
连接两相邻deboor点di和di+1的直线段记为:
调配函数ψi(t)的表达式为:
其中ei0是自由参数,
中央处理模块,与曲线生成模块、曲线平滑模块、曲线拟合模块、数据存储模块、显示模块连接,用于调度各个模块正常工作;中央处理模块的控制方法包括:
步骤一,根据待验证的程序,生成控制流图cfg,给cfg中的结点添加3个属性:r插值,s插值和e插值,r插值是结点可达的约束条件,判断一个状态的可达性;s插值和e插值对路径进行规约,加快程序的验证;给cfg的边添加属性w;一条边的w值表示以该边指向的结点为根结点的子图中,还没有被遍历的分支的个数;
步骤二,根据生成的cfg,生成抽象可达图arg,如果沿着一条路径生成一个新状态s,如果s对应的r插值被满足,说明状态s可达,继续沿着状态s遍历该路径;否则,状态s不可达,则该路径终止,遍历其他路径;对于一个可达的状态s,如果状态s对应的e插值被该路径对应的路径公式蕴含,说明沿着该状态存在一条到达目标状态的路径,程序不安全;如果状态s对应的s插值被蕴含,说明以状态为起点的所有路径都是安全的,不需要沿着状态s探索程序;如果状态s是可达的,且e插值和s插值都不被蕴含,则继续沿着状态s遍历该路径;
步骤三,在生成arg的过程中,发现一条反例路径,到达目标状态,则需要进一步判断反例路径是否虚假;不是虚假反例,则说明程序是不安全的;否则,根据虚假反例,细化模型,分别计算并更新对应状态的r插值,s插值和e插值,执行重新生成arg,直到找到一条真反例路径或不存在反例路径;
曲线平滑模块,与中央处理模块连接,用于获取b样条曲线的平滑曲线;
曲线拟合模块,与中央处理模块连接,用于利用ransac算法结合plucker坐标优化拟合回转轴空间方程,依赖回转轴线方向将三维轮廓点云映射至二维平面,并依据平方距离最小化法作为度量拟合b样条母曲线;
数据存储模块,与中央处理模块连接,用于存储b样条曲线数据;
显示模块,与中央处理模块连接,用于显示b样条曲线。
所述步骤三中计算插值和w属性的具体步骤包括:
1)在生成arg的过程中,发现一条反例路径path:〈s0,e0,s1,…,en-1,sn〉;利用smt求解器判断path是不是虚假;如果path是真反例,则程序不安全,验证结束;如果path是虚假的,则执行2);
2)计算r插值,对于状态si,0<i<n,将path划分为两部分:pre和post;pre子序列为<s0,…,si>,post子序列为<si,…,sn>,利用craig插值公式计算新的r插值,craig(pre,post),更新si[0]的r插值,形式化地表示为:
r-intp(si[0])=r-intp(si[0])∪craig(pf(s0,..,si),pf(si,…,sn));
其中,pf(s0,…,si)表示从s0到si的路径对应的路径公式;
3)计算s插值,首先找到path的可达的有效序列π=<s0,...,sm>,0<m<n,且si状态可达,si+1状态不可达;对于π的每一个状态si,0<i≤m,判断s插值的的第一个元素是full还是half;si[0]的所有后继结点的s插值都是full,则si[0]的s插值为full,否则,si[0]的s插值为half;具体的形式如下:
对于s插值的第二个元素,记为is(si[0]),分两种情况,如果i=m,则is(si[0])是边ei+1的路径公式取反;如果0<i<m,is(si[0])利用craig插值计算,记为craig(a,b);其中,a表示从s0到si的路径公式,b是边ei对应的公式和状态si+1对应的s插值取反的合取式;具体的形式如下:
其中,a=pf(s0,…,si),b=pf(si,ei,si+1)∧!(is(si+1[0]);从sm状态开始倒序地计算每个状态的插值,直到初始状态或者某一状态的s插值为half;
4)计算e插值,找到path的最大有效后缀序列π=<si,…,sn>,0<i≤n;从si状态开始,利用craig插值,倒序地计算对应的e插值,记为craig(a,b);对于si,a是从si到sn的路径公式和sn的e插值的合取式,b是从s0到si的路径公式;对于状态sj,0<j<i,a是从sj到sj+1的路径公式和sj+1的e插值的合取式,b是从s0到sj的路径公式,具体的形式如下:
5)计算边的w值,根据反例路径和更新后的s插值,来计算对应边的w值,对于一条边e:(s,op,s'),如果s'的s插值是full,则e的w值为0;如果s'的s插值是half,且s'是最后一个可达状态,e的w值为s'[0]的出边的个数-1;如果s'的s插值是half,且s'不是最后一个可达状态,e的w值为两部分的和:1)s'[0]的出边中w值不为⊥的边的w值的和,2)s'[0]的出边中w值为⊥的边的个数;对于边e:(s,op,s'),s':(l',c',p')具体的形式如下:
6)跳转到步骤二,重新生成arg;
所述4)中计算最大有效后缀序列的具体步骤包括:
(1)对于反例路径path:〈s0,e0,s1,…,en-1,sn〉,边分为两类:分支边集合eb和非分支边ea;
(2)生成path对应的路径公式,其中,对于e∈eb,对应的公式用true代替;对于e∈ea,生成其对应的公式,生成新的路径公式pf;
(3)从边en-1开始反向搜索,如果
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用全部或部分地以计算机程序产品的形式实现,所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输)。所述计算机可读取存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。