1、1,第5章 自由曲线与曲面,5.1 基础知识,5.2 自由曲线的数学描述,5.3 自由曲面的数学描述,2,5.1 基础知识 一、曲线和曲面的表示形式,(1)表示形式 显式:y=f(x), z=f(x,y)如 y=mx+b 表示直线(一个x对应一个y)一般,显式很难表示封闭、多值曲线。,3,隐式:f(x ,y)=0,F(x ,y ,z) = 0例如,ax2+2bxy+cy2+2dx+2ey+f=0 圆锥曲线(x/a)2+(y/b)2+(z/c)2=1 椭球面,参数式: x=x(t), y=y(t) x=x(u,v), y=y(u,v), z=z(u,v) 例如,x=r cos , y=r sin
2、 表示圆,表示椭球面,4,矢量形式:,5,非参数方程的表示有以下缺点: 1) 与坐标轴相关;2) 会出现斜率为无穷大的情况;3) 非平面曲线曲面难以用常系数非参数化函数表示;4) 不便于计算和编程。,(2) 表示形式的比较,6,参数方程的优点:1) 有更大的自由度来控制曲线曲面的形状;2) 与坐标轴无关;3) 便于处理斜率无穷大的问题,不会因此而中断计算;4) 用参数表示曲线时,因为参数变量是规范化的,t的变化限制在0,1范围内,所以曲线总是有界的。,7,关于C0,C1, C2和G0,G1, G2 的连续C0和G0连续:连接点处位置相等。G1连续:连接点处位置相等,切矢方向相同,大小不等。C1
3、连续:连接点处位置相等,切矢方向/大小均相同。G2连续:连接点处G0、G1连续,且二阶导数方向相同,大小不等。C2连续:连接点处C0、C1连续,且二阶导数大小和方向相等。,二、曲线段间的连续性,8,9,三、曲线曲面的拟合(插值和逼近),在工程实践中,如飞机、汽车、船舶的外形设计时,常遇到由离散点来构造曲线和曲面的问题。解决这个问题的通常方法是“拟合”。拟合包含插值和逼近两类方法:,插值法(interpolation): 采用完全通过原始给定的型值点构造曲线、曲面并达到某些设计要求的方法。,给定的一组有序数据点,可以从某个形状测量得到,也可以是设计员计算给出; 顺序通过这些点,构造曲线/曲面。,
4、10,逼近法(approximation ):采用相对贴近原始给定的型值点构造曲线、曲面并达到.设计要求的方法。,如果测量所得或设计员给出的数据点本身就很粗糙,要求构造一条曲线严格通过给定的一组数据点就没什么意义。这时,要求所构造的曲线在某种意义下最为贴近给定的数据点。,插值法:三次样条(参数)曲线、双三次coons曲面。 逼近法:Bezier曲线/曲面、B样条曲线/曲面、 NURBS曲线/曲面等。,11,5.2 自由曲线的数学描述 一、三次样条曲线,给定(n+1)个点Pi(i=0,1,n),要找出一条过这些型值点的曲线C(u),有两种极端情况: 1) 每对点Pi,PI+1之间的线性插值。问题
5、是只能保证各个曲线段连续,整条曲线在型值点处出现拐折现象。,为什么用“三次”?,12,2) 使用n次拉格朗日多项式插值。当Pi的点数n越多,插值多项式的次数越高,曲线会引起激烈波动、振荡,甚至扭曲,且计算量很大。,另外,单一的低次多项式曲线又难以用来描述复杂形状的曲线。,唯一的选择:采用分段的低次多项式插值生成低次曲线段,并在满足一定的连接条件下逐段拼接起来。,大多数应用发现,三次是一个好的折衷。,13,三次样条函数就是一种分段三次多项式插值,它不但能保证曲线上斜率连续(一阶导数连续)变化,而且也能保证曲率连续(二阶连续)变化。这对飞机、汽车、船舶的外形来说,已能满足要求了。,14,1.三次样
6、条函数力学背景,数学上的三次样条来自生产实践中放样员的样条。 所谓的样条是一根富有弹性的均匀的细木条或塑料条。放样员先将型值点准确地点在图板上,用压铁强迫模线通过这些型值点,再适当调整这些压铁,让样条的形态发生变化,直至取得满意的形状,才沿着样条画出所需的曲线。,15,如果把样条看成弹性细梁,压铁看成作用在这梁的某些点上的集中载荷,可把上述画模线的过程在力学上抽象为:求弹性细梁在外加集中载荷作用下产生的弯曲变形。切出两相邻压铁间的一段梁看,只在梁的两端有集中力作用,故弯矩在这段梁内是线性函数。,与材料和形状有关的常数,16,M(x)是线性函数,函数Y(x)是x的三次多项式,在整个梁上Y(x)是
7、分段三次函数,但它处处二阶可导。 这一力学背景,导致了数学上三次样条函数概念的建立。,样条特点: (1)样条本身是连续的整体,相当于函数是连续的; (2)样条左右两段在压铁处的斜率相同,相当于函数是一阶连续的。 (3)样条左右两段在压铁处的曲率相同,相当于函数是二阶连续的。,17,2. 三次样条函数定义,定义: 在区间x0,xn上给定一个分割:x0x1xn-1xn 插值条件为:,若有函数y(x)适合:1)y(xi)=yi(i=0,1,n);2)y(x)在全区间x0,xn上二次连续可导;3)在每个子区间xi-1,xi(i=1,n)上是x的三次多项式。 则称y(x)是关于已知插值条件的三次样条函数
8、。 由样条函数构成的曲线称为样条曲线。,18,1)三次样条曲线段,以自变量u表示的三次曲线方程为:y(u)=a0+a1u+a2u2+a3u3 曲线的始末端点通过一对已知位置矢量y0和y1,已知切矢(对参数u求导)y0 和y1, 则有方程:,19,解出a0,a1,a2,a3,带入,整理后得到:,20,(6-1),其中:,(6-2),21,矩阵形式:,其中:,F0、F1、G0、G1 称为Hermite基函数。 作用:控制曲线段两端点的位置矢量和一价导矢对曲线形状的影响。,(6-3),22,2)三次样条曲线之一,现在解决区间xi-1,xi上带一阶导数的插值问题。 设对应于区间两端的函数值与一阶导数(
9、对x)值如图。从 u0, 1 x xi-1, xi :u=(x-xi-1)/hi , ( hi=xi-xi-1) 故, yu=yx hi,对应于x xi-1, xi ,仿式(6-3),第i段曲线的表达式为:,(6-4),( i= 1, 2, . , n),(用型值点处一阶导数表示),m是对x的导数,23,(6-4)式确定的函数y(x),本身及其一阶导数y(x)在x0,xn上的连续性,是由各段的插值条件保证的,不论m0,m1,mn 取什么值,y(x)、y(x)总是连续的。但任意地选取m0,m1, mn 就不能保证y”(x)在x0,xn上连续。为保证各内节点处的y”(x)也连续,mi 必须满足一定
10、条件。,24,将式(6-4)对x求导两次,得 y”i(x)为u的函数。,则让: 第i段 xi-1,xi 曲线段的末点(在xi 处, 此点u=1), 与第i+1段xi,xi+1 曲线段的始点(在xi 处, 此点u=0),25,的二阶导数连续: y”i(xi) = y”i+1(xi)整理后得 m 关系式:,imi-1+2mi+ imi+1=ci ( i= 1,2, ., n-1 ) (6-5),26,式(6-4)、(6-5)包含m0,m1,,mn共n+1个未知量,对应整条曲线的x0、x1,xn的n+1型值点,式(6-5)包含n-1个方程个数,还不足以完全确定这些mi ,须添加两个条件。,这两个条件
11、通常根据对边界节点x0与xn处的附加要求来提供,故称为端点条件。常见有以下几种:,(1) 已知曲线两端点处的m0与mn。(6-5)式成为关于n-1个未知量m1mn-1的n-1个线性方程。第一个方程为: 2m1+1m2=c1- 1m0 第n-1个方程为: n-1mn-2+2mn-1=cn-1- n-1mn,27,(2) 给定两端点的二阶导数M0、Mn。,得: 2m0+m1=C0mn-1+2mn=Cn,i0代入,in代入,28,在求得所有mi后,分段三次曲线即可由(6-4)确定。 整条三次样条曲线的表达式为:y(x) = yi(x) ( i=1, 2, . ,n),(3) 特别当M0=0或Mn=0
12、时,称为自由端点条件。此时端点为切点,曲率半径无限大。例如,在曲线端点出现拐点或与一直线相切时。,29,与 2) 方法类似,先解决 u 0, 1 带二阶导数的插值问题,推广到整个x0 , xn 区间。 曲线段两端点四个已知条件:y0,y1,y0,y”1。 构作三次曲线段方程为:,y(u)= y0F0(u) +y1F1(u)+y”0G0(u)+y”1G1(u),(6-6),F0(u)=1-u G0(u)=-u(u-1)(u-2)/6 F1(u)=u G1(u)=u(u-1)(u+1)/6,(6-7),3) 三次样条曲线之二,(用型值点处二阶导数表示),30,在区间xi-1,xi上带二阶导数的插值
13、。 设对应于x xi-1, xi 区间两端点的函数值与二阶导数(对x)值分别为yi-1,yi,Mi-1,Mi。则该曲线段的表达式为:,(6-8),它适合指定的带二阶导数的插值条件,保证了函数及其二阶导数在x0,xn上的连续性。 但为了使各内节点处的一阶导数也连续,则 Mi 必须适合 M 关系式。,( i=1, 2, . ,n ),31,根据: yi(xi) |u=1= yi+1(xi) |u=0 , 得M 关系式:,iMi-1+2Mi + iMi+1=di (6-9),它是一个有n-1个方程的线性方程组,含n+1个未知数M0,M1,Mn,为了完全确定它们,必须加上两个端点条件。常用的端点条件有
14、:,32,1)两端点二阶导数值M0、Mn。当M1=Mn=0时,为自由端点条件。2)两端点二阶导数值m0、mn已知。,求得Mi 后,分段三次曲线可由式(6-8)确定,整条三次样条曲线可由 y(x)=yi(x) ( i=1,2,n) 表示。,33,3. 三次样条曲线的局限性,1) 大斜率曲线不能处理,受样条函数力学背景假设(dy/dx 1)限制, 不适合大挠度情况。与坐标系的选取有关。,2) 多值曲线不能处理,受样条函数定义限制,x与y 须单值对应。 与坐标系的选取有关。,3) 无局部性,从 m -关系式、M - 关系式可知。,34,二、Bezier曲线 1. Bezier曲线的定义,一条Bezi
15、er曲线由两个端点和若干个不在曲线上但能够决定曲线形状的点确定。下图表示一条三次Bezier曲线由两个端点V0、V3和另两个不在曲线上的点V1、V2确定。,V0、V1、V2、V3构成了来定义曲线的特征多边形。,35,一般,n次Bezier曲线由 n+1 个顶点构成的特征多边形确定。,Bezier曲线的表达式:由特征多边形顶点的位置矢量与伯恩斯坦基函数线性组合。,(6-10),i=0,1,2,.,n,36,一次Bezier曲线:n=1,两个控制顶点, 是一条直线。r(u)=(1-u)V0+ u V1 ,,u,u,37,三次Bezier曲线,n=3, 有四个控制顶点。B3,0(t)=1-3u+3u
16、2 -u3B3,1(t)= 3u-6u2+3u3B3,2(t) =3u2-3u3B3,3(t)=u3,1 0 0 0 -3 3 0 0 3 -6 3 0 -1 3 -3 1,u,(6-11),(6-12),MBE ,r(u)= 1 u u2 u3 ,38,2. Bezier曲线的几何性质,1)端点性质 位置矢量: u=0时, r(0)=V0 ,u=1时, r(1)=Vn 切矢量: r(0)=n(V1-V0), r(1)=n(Vn-Vn-1) 二阶导矢: r(0)=n(n-1)(V2-2V1+V0),r(1)=n (n-1)(Vn-2Vn-1+Vn-2),Bezier曲线的起点和终点分别是特征多
17、边形的始、末顶点; 曲线在起点和终点处分别与特征多边形的第一和最后一条边相切,切矢量的模长为第一和最后边长的 n 倍。 曲线在两端点处的 k 阶导矢只与它最近的(k+1)个顶点有关。,39,2) 对称性特征多边形的顶点位置不变, 仅仅序号相反, Bezier曲线的形状不变, 仅方向相反。,40,3) 凸包性,4) 几何不变性Bezier曲线的形状和位置, 仅与特征多边形的顶点位置有关, 与坐标系的选择无关。,41,5) 变差减小性若特征多边形是一个平面图形, 那么平面内的任意直线, 与 r(u) 的交点个数,不多于与特征多边形的交点个数。,42,3. Bezier曲线的几何作图法及其分割,43
18、,V01,V11,V21,V02,V12,V03,分割过程:,V0 V1 V2 V3,V00 V10 V20 V30,V01 V11 V21,V02 V12,V03,分割递推算法:,44,void bez_to_points(degree, npoints,coeff, points) int degree, npoints; float coeff,points; float t,delt;int i;float decas();delt=1.0/(float)npoints;/*step length*/t=0.0;for(i=0;i=npoints; i+)pointsi=decas(d
19、egree,coeff,t);t=t+delt; ,45,float decas(degree, coeff,t) float coeff; float t; int degree; int r,i;float t1;float coeffa10;t1=1.0-t;for(i=0; i=degree; i+)coeffai=coeffi;for(r=1;r=degree;r+)for(i=0;i=degree-r;i+),46,coeffai=t1*coeffai+t*coeffai+1; return(coeffa0); ,47,4. Bezier曲线的拼接,以三次Bezier曲线为例。对于
20、形状比较复杂的曲线,只用一段三次Bezier曲线描述就不够了。工程上往往用分段Bezier样条曲线描述。将分段的Bezier曲线连接起来构成三次Bezier样条曲线,其关键问题是如何保证连接处具有G1及G2连续性。,48,1) 位置连续,r (2)(u2=0) = r (1)(u1=1) V0(2) = V3(1),2) 斜率连续,r (2)(0) = r (1) (1) V1(2) = (V3(1) -V2(1) ) + V0(2),即,要求三顶点(V2(1) 、 V3(1)= V0(2) 、 V1(2) )共线。,49,3) 曲率连续,r (2)(0)=2 r (1) (1) + r (1
21、) (1),V2(2) -V3(1) = (2 + 2+ /2)(V3(1) - V2(1) ) - 2 (V2(1) - V1(1) ),表明 V1(1)、V2(1) 、V3(1) = V0(2) 、V1(2) 、V2(2)五点共面。,50,5. 反算Bezier曲线特征点,给定 n+1 个型值点 Pi ( i=0, 1, . , n) , 要求构造一条Bezier曲线通过这些点。,先求过 Pi 的的特征多边形顶点 Vi (i= 0, 1, . , n )。取参数 u=i/n 代入(6-10)式,与点 Pi 对应,反求 Vi 。,51,三、均匀B样条曲线,保留Bezier方法顶点和基函数线性
22、组合带来的直观、方便、易修改的优点,仍然采用控制顶点定义曲线。 B样条与Bezier曲线比较,区别在于:Bezier曲线的次数等于控制顶点数 1,但曲线与特征多边形仍逼近不够;B样条曲线的次数与控制顶点的数量无关,曲线与特征多边形相当接近。Bezier曲线缺乏局部性质,修改一个顶点将影响整条曲线; B样条曲线具有局部性质。,52,B样条曲线的定义: 给定n+1个顶点V0, V1, ,Vn, 确定的B样条曲线其中,Ni ,M 是B样条基函数。,r(u) =,53,1. 三次B样条曲线,1) 三次B样条基函数, N0,4 (u) N1,4(u) N2,4(u) N3,4(u) = 1 u u2 u
23、3 MB,(6-13),u,先给出工程上常用的三次B样条基函数的矩阵表达式:,54,2) 三次B样条曲线段,u,(6-14),端点性质:,ri(0) = Vi+1+ (Vi+Vi+2) Vi+1ri(1) =Vi+2+ (Vi+1+Vi+3) Vi+2,55,ri(0) = Vi+1+ (Vi+Vi+2) Vi+1,56,ri(0) = ( Vi+2 Vi )ri(1) = ( Vi+3 Vi+1 )ri”(0) = (Vi+2 Vi+1) +(Vi Vi+1) ri”(1) = (Vi+3 Vi+2) +(Vi+1 Vi+2),(6-15),57,58,3) 三次B样条曲线,当特征多边形的顶
24、点超过四个时, 每增加一个顶点,相应地增加一段样条曲线。 因为特征多边形中每四个相邻的顶点按(6-14)式定义一段曲线。,u,,,( i=0, 1, . , n-2 ),(6-15),59,ri(u),ri+1(u),u,60,2. B样条基函数定义,三次B样条基函数的Clark方法,已知 n+2 个顺序排列的位置矢量:V0、V1、. 、Vn+1 设 Nj,4(u) ( j=0, 1, 2, 3) 为u 的三次多项式:Nj,4(u) = Aju3 + Bju2 + Cju + Dj , j=0, 1, 2, 3 (有16个系数),ri(u)= N0,4(u)Vi+ N1,4(u)Vi+1+ N
25、2,4(u)Vi+2+ N3,4(u)Vi+3,(6-16),( i =0, 1, . ,n-2; u 0, 1 ),(根据曲线位置、斜率、曲率连续推导),61,要求曲线段在连接处位置、斜率、曲率连续 , 即,ri(1) = ri+1(0) ri(1) = ri+1(0) ri”(1) = ri+1”(0),根据位置矢量 Vi+j ( j =0,1,2,3,4)的系数相等条件, 每式有五个方程, 共有 15 个方程,还差一个方程。,当Vi=Vi+1=Vi+2=Vi+3时, ri(u)=Vi (曲线退化为一点):,N0,4(u) + N1,4(u) + N2,4(u) + N3,4(u) 1,6
26、2,解方程组得到四个三次多项式Nj,4(u) ( j=0, 1, 2, 3):,63,2)递推定义,定义:在参数轴 x 区间a,b上取分割a=x0x1xn=b为节点,构造B样条基函数。M阶B样条基函数用Ni,M(x)表示,其递推关系为:,表明: 任意M阶B样条基函数可由两个相邻的(M-1) 阶B样条基线性组合。,(6-17),i,1,64,式中,i为节点序号(i=0,1,.n+M); M是B样条基函数的阶数(M1、整数),M阶B样条基函数是一个只在M个子区间xi,xi+M非零的分段(M1m)次多项式,具有直到M2阶的连续导数。,1阶(0次) B样条基:,i,1,65,2阶(1次) B样条基:,
27、代入(6-17):,令 xi , xi+1内, u=x-xi :,Ni, 2(u) = u,Ni, 2(u)=1-u,i,1,66,3阶(2次) B样条基:,Ni, 3(x)=,0,xi x xi+1,xi+1 x xi+2,xi xi , xi+3 ,xi+2 x xi+3,67,在(xi x xi+1)区间, 令u=x-xi,在(xi+1 x xi+2)区间, 令u=x-xi+1,在(xi+2 x xi+3)区间, 令u=x-xi+2,68,Ni, 4(x)=,4阶(3次) B样条基:,0,xi x xi+1,xi+1 x xi+2,xi+2 x xi+3,xi+3 x ,xi+4,xi
28、xi , xi+4 ,69,在(xi x xi+1)区间, 令u=x-xi,在(xi+1 x xi+2)区间, 令u=x-xi+1,在(xi+2 x xi+3)区间, 令u=x-xi+2,在( xi+3 x ,xi+4 )区间, 令u=x-xi+3,70,3. B样条曲线几何性质,1) 端点性质,(以三次B样条曲线为例),2) 直观性,形状决定于B特征多边形,逼近度更好。,3) 局部性,改变特征多边形的一顶点,只对相邻的四条曲线段产生影响。,4) 凸包性 5) 对称性,6)几何不变性 7)变差减小性,71,4. 基于顶点的三次B样条曲线退化情况,1)三顶点共线,起点:拐点,切点,2)四顶点共线
29、,起点,末点,72,3)两顶点重合,端点,4)三顶点重合,V(3),V(2),73,设计时,要求:构造一段直线 , 则曲线与特征多边形相切,则曲线上形成尖点, 则,四顶点共线,三顶点共线或两顶点重合,三顶点重合,74,始点,末点,直线段,直线段,5. 用重顶点端点条件控制曲线首末端点,75,能否使 B样条曲线的端点与首末顶点重合?,利用重节点端点技术,实质是利用重节点条件改变B样条基函数。当节点重复ki次,曲线在该节点处的可微性下降为,重节点对B样条曲线的影响: 1)在B样条曲线定义域内的重节点,重复度每增加1,曲线段数减少1,样条曲线在该重节点处的可微性降低1; 2)当端节点重复度为k时,k
30、次B样条曲线的端点将与相应的控制多边形的端点相重,并在端点处与控制多边形相切; 3)当在曲线定义域内有重复度为k的节点时,k次B样条曲线插值于相应的控制顶点;,76,这时的节点矢量( x0,x1,xn+M )中两端节点具有重复度(k+1= M),所有内节点为均匀分布,所构造的B样条曲线称为准均匀B样条曲线。,4)当端节点重复度为k1时,k次B样条曲线就具有和k次贝齐尔曲线相同的端点几何性质; 5)k次B样条曲线若在定义域内相邻的两节点都具有重复度k。可以生成在该节点区间上那段B样条曲线的贝齐尔点; 6)若端节点重复度为k1的k次B样条曲线的定义域仅有一个非零节点区间,则所定义的该k次B样条曲线
31、就是k次贝齐尔曲线。,77,6. 三次参数曲线段的三种等价表示,78,Ferguson曲线:,r(u) = 1 u u2 u3 MC,r(0) r(1) r(0) r(1),79,r(u) = 1 u u2 u3 MBE,B0 B1 B2 B3,Bezier曲线:,80,B样条曲线:,81,均匀B-Spline曲线的特点:节点等距分布,计算 效率高,一般情况下可获满意效果。存在问题:1. 不能贴切反映控制顶点的分布特点;2. 当型值点分布不均匀时,难以获得理想的插值曲线。非均匀B样条曲线可解决这一问题。,四、非均匀B-Spline曲线,82,B样条的递推定义具有普遍意义,即使是计算非均匀B样条
32、基函数,仍可由递推定义式来计算各幂次的B样基函数。,1. 非均匀基B样条基函数,给定控制顶点Vi,i0,1,n,欲定义一条k次非均匀B样条曲线,还必须确定它的节点矢量Uu0,u1,un+k+1中具体的节点值。对于开曲线一般两端点取重复度k1,以便具有贝齐尔曲线的端点几何性质,且通常将曲线的定义域取成规范参数域,,83,2. 节点矢量的确定,已知:控制顶点Vi ,( i =0, 1, , n)节点矢量 U= u0, u1, . , un+k+1,确定节点矢量方法采用Riesenfeld方法: 节点的分布与各B样条曲线段的长度直接相关。把特征多边形看作为样条曲线的外接多边形,使曲线的分段连接点与特
33、征多边形的顶点或边对应起来,然后把它展直作为参数轴(并规范化),得到节点矢量(参数序列)。,84,1)偶次B样条曲线的节点矢量,二次B样条曲线,二次B样条曲线的节点矢量为:,n-k个节点,两边除去k/2条边,后另外的边的中点。,85,节点矢量为:,四次B样条曲线,86,2)奇次B样条曲线节点矢量,三次B样条曲线的节点矢量为:,五次B样条曲线的节点矢量为:,n-k个节点,两边除去(k1)/2条边,后另外的nk个控制顶点。,87,两种曲线相比较,非均匀B样条曲线更贴近特征多边形,即更容易控制曲线形状。,非均匀B样条曲线,均匀B样条曲线,若多边形边长变化不显著,两者很接近。,88,结论: 1. 当特
34、征多边形边长变化不大(邻边长比值3)时,两者接近。 2. 当特征多边形边长变化较大时,非均匀B样条曲线更能反映多边形特点。,3. 在非均匀B样条曲线情况下,顶点位置确定了节点矢量,进而决定了基函数,故修改一个顶点的位置将影响整条曲线的形状。但各段影响程度不一。,4. 对于三次非均匀B样条曲线,四顶点共线时,曲线内也能嵌入直线段,但其起止点不易直观确定。 5. 非均匀B样条曲线的计算量较大。,89,3、非均匀B样条曲线及其插值,1)非均匀B样条曲线,德布尔算法:,90,在某个非零节点区间,上的一组k次B样条基中仅有k1个非零的基函数:,这些B样条基由下面节点序列完全确定,91,德布尔算法,给定控
35、制顶点di,i0,1,2n, k阶及确定节点矢量Ut0,t1,tn+k后,就定义了一条k阶曲线。求曲线定义域内以参数,计算该B样条曲线上对应一点C(u):,92,93,bsp1_to_point(degree,l,coeff,knot,dense,points,point_num) float coeff,knot,points; int degree,l,dense,*point_num; int i,ii,kk;float deboor();*point_num=0;for(i=degree-1;iknoti)for(ii=0;iidense;ii+),94,u=knoti+ii*(kno
36、ti+1-knoti)/dense;points*point_num=deboor(degree,coeff,knot,u,i);*point_num=(*point_num)+1; float deboor(degree,coeff,knot,u,i)float coeff,knot;float u;int degree,i; int k,j,95,float t1,t2;float coeffa30;for(j=i-degree+1;j=i-degree+k+1;j-)t1=(knotj+degree-k-u)/(knotj+degree-k-knotj-1);t2=1.0-t1;coef
37、faj=t1*coeffaj-1+t2*coeffaj;return(coeffai+1); ,96,2)三次非均匀B样条曲线的插值 (反算),方法:,2、根据节点矢量上相关的节点集,分别计算基函数;,3、求得反算多边形顶点方程组;,4、加端点条件,解方程组 控制顶点(这与三次均匀 B样条曲线反算相似)。,1、根据给定的型值点,构造节点矢量;,97,插值特点:,1、当型值点间距变化较均匀时(1:2:4:5:6),用均匀和非均匀B样条曲线插值计算,所得的特征多边形和插值曲线两者均极为相似,差异不大,,均匀B样条曲线,非均匀B样条曲线,98,2、当型值点分布很不均匀时,两者差异明显。,均匀B样条曲
38、线,产生拐点,非均匀B样条曲线,保凸,型值点间距比 1: 1: 6: 1: 1,99,型值点间距比 1: 7: 1: 7: 1,非均匀B样条曲线,保凸,均匀B样条曲线,产生拐点,100,五、有理B样条曲线,在自由曲线设计中,经常遇到传统的圆锥曲线,但无论是均匀的还是非均匀的B样条曲线都不能对其作精确表示,只有用有理B样条曲线才能作精确表示。,有理B样条方法可以对解析曲线/面和自由曲线/曲面作统一地表达。,101,其中, i为权因子,亦称齐次坐标,有理B样条曲线的表示:,102,1)构造具有权因子的顶点,2)在oxyw坐标系下得到一条非有理B样条曲线,3)把,103,3)权因子对曲线形状的影响,
39、权因子作用:调节曲线形状和控制顶点之间的关系。正权因子将曲线引向顶点;负权因子对曲线起排斥作用。 在二次均匀B样条曲线中,每个顶点影响三段曲线。 在有理B样条曲线中,改变一个顶点的权因子只影响两段曲线。,104,修改权因子k-1 / k后的曲线,105,六、NURBS曲线,如果要用统一的形式表示一条由直线、圆锥曲线和自由曲线构造的复合曲线时,则必须用非均匀有理B样条曲线表达方法。,106,1. 定义与性质,1) 定义,NURBS曲线为一分段的矢值有理多项式函数,表达式为:,Bi,k(u)为k次B样条基函数,等同于Ni,M (u)表示的(6-17)式,其中 M=k+1。,107,递推式定义:,u
40、i (i=0, 1, , m)为节点,由其形成节点矢量U=u0, u1,um,当节点数为(m+1),幂次为k,控制顶点数为(n+1)时, m=n+k+1。,108,U= 0, 0, ., 0, uk+1, . , um-k-1, 1, 1, ., 1 ,k+1:u0uk,k+1:ukum,即,节点矢量两端各有k+1个相同的节点,使曲线通过控制多边形首、末端点并与首、末两边相切。,对于非周期的B样条,节点矢量为,109,2)性质由有理基函数性质推得:,NURBS曲线 (曲面) 覆盖了多项式B样条(即当全部权因子=1时),也覆盖了有理的B样条曲线 (曲面)。当节点矢量仅由两端的(k+1)重节点构成
41、时,NURBS曲线 (曲面) 退化为有理Bezier 曲线 (曲面)。,110,2. NURBS曲线 (曲面) 具有多项式B样条方法所具有的一切特征:, 线性变换的不变性; 若无内重节点,则K 次B样条是k-1阶可微的; 对控制顶点 (网格) 多边形的逼近具有局部性; B样条曲线 (曲面) 包含在控制顶点所形成的凸包内; 具有变差减小性质。,111,3)特点及其应用, 用统一的表达式同时精确表示标准的解析形体 (如圆锥曲线、旋转面等) 和自由曲线 / 曲面。 修改曲线 / 曲面形状时,既可借助调整控制顶点,又可利用权因子,所以有较大灵活性。 与多项式B样条一样,NURBS方法的计算也是稳定的。
42、4. NURBS曲线 / 曲面在线性变换 ( 缩小、旋转、平移、剪切、平行与透视投影等) 下是几何不变的。,优点:,112,缺点:, 定义解析曲线 / 曲面时,需额外的存储空间。,例如:定义一整圆。常规方法:仅7个数(圆心x0,y0,z0),圆所在平面法矢(nx,ny,nz )和半径R;NURBS方法:以外切三角形的7个控制顶点定义时,则需要38个数 (即节点矢量的10节点+顶点坐标(x,y,z,w)共28个数。,113,权因子的应用虽提供设计灵活性,也对设计人员和用户提出了更高的要求。 NURBS曲面求交计算困难。,114,2. NURBS曲线的基本算法,1)NURBS曲线的求值直接由定义表
43、达式求取与参数 u 对应的点,算法稳定可靠。,115,2)NURBS曲线求导,其关键是对基函数求导: B i, 0(u) = 0,r (u)=, iVi Bi,k(u),i=0,n, i Bi,k(u),i=0,n,116,可见,基函数的导数也是由递推方式定义。,117,3.NURBS曲线的应用,1) 用二次NURBS曲线表示圆弧,三个控制顶点的NURBS曲线,若U0,0,0,1,1,1,则二次NURBS曲线变成:,可以证明上式是圆锥曲线的方程,其中,CSF1双曲线,表示圆的条件:V0V1和V1V2是等腰三角形的两个腰,w0w21,V0,V1,V2,f,e,w1e/f,w21,w01,W1是c
44、os(V1V0V2),118,对于圆心角大于180度的,分段采用上述方法,利用从节点将几段圆弧连接起来。内部重节点用二重节点。1/i,i-1/i(i为小圆弧的段数),V0,V1,V2,V3,V4,i2节点:0,0,0,1/2,1/2,1,1,1,V5,V6,V7,V8,i4节点:0,0,0,1/4,1/4,2/4,2/4,3/4,3/4,1,1,1,119,2) 复杂曲线的NURBS表示,对同时存在直线段、圆弧段、三次自由曲线段的曲 线,用三次NURBS曲线统一表示的步骤:,用一次、二次NURBS曲线分别准确表示各直线段、圆弧段,后将其升阶为三次NURBS曲线;,计算整条曲线的节点矢量;,计算
45、三次曲线段的边界条件;,用三次NURBS曲线插值各自由曲线段;,120, 对求出的控制顶点及其权因子按对应型值点间的相互关系排序;, 由计算得到的控制顶点、权因子、节点矢量定义一条三 次NURBS曲线。,在与直线段、圆弧段对应的各节点处,取为三重节点;,121,直线,圆弧,自由曲线,组合曲线,122,多边形顶点为NURBS曲线的控制顶点,统一的三次NURBS曲线,123,5.3 自由曲面的数学描述 一.孔斯曲面与双三次曲面,Coons于1964年提出了由四条边界曲线定义曲面片,用曲面片光滑拼接一张曲面(只要在曲面片间相邻接的边界上,使位置、斜率、曲率、,甚至于所期望的高阶偏导矢相匹配),就能保
46、证整张曲面具有足够的光滑性。,124,曲面用矢量方程表示:r(u,w)=x(u , w), y(u , w), z(u , w)u , w 0,1,参数u,w的变化区域是uw平面上的单位正方形域。,一旦参数u与w在uw平面的单位正方形域0, 10,1 中变化,则对应到空间,即形成一张曲面片。,125,参数域点向曲面片点的映射,126,1.曲面基本参数,1) 四条边界线,r(u,0),r(u,1)r(0,w),r(1,w),r(u,1),r(u,0),r(0,w),r(1,w),u,w,2) 四个角点的位置矢量r(0,0),r(0,1),r(1,0),r(1,1),r(0,0),r(1,0),r
47、(0,1),r(1,1),127,3) 四个角点的切矢和扭矢,r(u,1),r(u,0),r(0,w),r(1,w),u,w,r(0,0),r(1,0),r(0,1),r(1,1),对r(u,w),将w看作常数u变化时,对u求偏导,就是u线上的切矢ru(u,w),ru(u,w)=,u,r(u,w),同理,w 线上的切矢:rw(u,w)=, w,r(u,w),r(u,w),rw(u, w),ru(u, w),128,ru(u,1)、rw(0,w)、rw(1,w)均为边界曲线上的切矢。,rw(u,1)、ru(0,w)、ru(1,w)均为边界曲线的跨界斜率。,129,r(u,1),r(u,0),r(0,w),r(1,w),u,w,r(0,0),r(1,0),r(0,1),r(1,1),r(u,w),rw(u, 0),ru(1, w),130,u,r(u,w),u=0 w=0,w,r(u,w),u=0 w=0,