CG教案7-2曲线曲面_第1页
CG教案7-2曲线曲面_第2页
CG教案7-2曲线曲面_第3页
CG教案7-2曲线曲面_第4页
CG教案7-2曲线曲面_第5页
已阅读5页,还剩134页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2023/2/21第七章曲线与曲面7.1曲线曲面基础7.2三次样条曲线曲面7.3Bézier曲线和曲面7.4B样条曲线和曲面7.5非均匀有理B样条曲线曲面7.6用OpenGL生成曲线和曲面2023/2/22曲线与曲面概述

曲线曲面的计算机辅助设计源于20世纪60年代的飞机和汽车工业。1963年美国波音公司的Ferguson提出用于飞机设计的参数三次方程;1962年法国雷诺汽车公司的Bézier提出以逼近为基础的曲线曲面设计系统UNISURF,此前deCasteljau大约于1959年在法国另一家汽车公司雪铁龙的CAD系统中有同样的设计,但因为保密的原因而没有公布;1964年Coons提出了一类布尔和形式的曲面;1972年,deBoor和Cox分别给出B样条的标准算法;1975年以后,Riesenfeld等人研究了非均匀B样条曲线曲面,美国锡拉丘兹大学的

Versprille研究了有理B样条曲线曲面,20世纪80年末、90年代初,Piegl和Tiller等人对有理B样条曲线曲面进行了深入的研究,并形成非均匀有理B样条(Non-UniformRationalB-Spline,简称NURBS);1991年国际标准组织(ISO)正式颁布了产品数据交换的国际标准STEP,NURBS是工业产品几何定义唯一的一种自由型曲线曲面。2023/2/23曲线曲面设计方法的要求

整个曲线曲面设计方法的发展史表明了曲线曲面设计方法的要求:避免高次多项式函数可能引起的过多拐点,曲线曲面设计宜采用低次多项式函数进行组合;组合曲线曲面在公共连接处满足一定的连续性;绘图过程具有明确的几何意义,且操作方便;具有几何不变性;具有局部修改性。2023/2/247.1曲线曲面基础7.1.1曲线、曲面的表示形式1.曲线的表示形式平面曲线的直角坐标表示形式为:

或其参数方程则为:平面上一点的位置可用自原点到该点的矢量表示:

上式称为曲线的矢量方程,其坐标分量表示式是曲线的参数方程。2023/2/25r(t2)r(t1)OYXZ图7-1空间曲线

三维空间曲线可理解为一个动点的轨迹,位置矢量r随时间t变化的关系就是一条空间曲线。

矢量方程为:三维空间曲线的参数方程为:2023/2/26用s表示曲线的弧长,以弧长为参数的曲线方程称为自然参数方程。以弧长为参数的曲线,其切矢为单位矢量,记为t(s)。切矢t(s)对弧长s求导,所得导矢dt(s)/ds与切矢相垂直,称为曲率矢量,如图7-2,其单位矢量称为曲线的单位主法矢,记为n(s),其模长称为曲线的曲率,记为k(s)。曲率的倒数称为曲线的曲率半径,记为ρ(s)。

与t和n相互垂直的单位矢量称为副法矢,记为b(s)。由t和n张成的平面称为密切平面;由n和b张成的平面称为法平面;由t和b张成的平面称为从切面。

法平面密切平面从切面tnρbP图7-2曲线特性分析

曲率,其几何意义是曲线的单位切矢量t(s)对弧长的转动率。挠率的绝对值等于副法线方向b(s)(或密切平面)对于弧长的转动率.曲率和挠率)(ssTD+)(sTTDO

曲率和挠率(a)(b)1N1B1T0N0B0T0B1BqDqD2023/2/282.曲面的表示形式一般曲面可表示为:

其参数表达式为:

曲面的矢量方程为:

参数u、v的变化区间常取为单位正方形,即u,v∈[0,1]。x,y,z都是u和v二元可微函数。当(u,v)在区间[0,1]之间变化时,与其对应的点(x,y,z)就在空间形成一张曲面。

u映射空间域参数域v2023/2/29r对

u和v的一阶偏导数为:

一阶偏导数ru(u,v)和rv(u,v)继续对u,v求偏导数,得到四个二阶偏导数ruu、ruv、rvu、rvv:ruv和rvu称为二阶混合偏导数,在二阶连续时,两者相同。2023/2/210rvnruZvv3v2v1v0OuYXr(u,v)图7-3空间曲面

如图7-3,曲面上一点的切矢ru和rv所张成平面称为曲面在该点的切平面。曲面上所有过该点的曲线在此点的切矢都位于切平面内。切平面的法矢就是曲面在该点的法矢。2023/2/211

直纹面

旋转面对于固定的u,它是一条直线,当u变化时,就成了面,即“线动成面”。

双线性插值曲面

3.几种典型的面2023/2/212Coons曲面是已知曲面片的四条边界曲线,由两张直纹曲面的和减去一张双线性插值曲面得到的:

这种布尔和形式的曲面是Coons于1967年研究的,拼合时整张曲面C0连续,即位置连续。要达到C1连续,必须考虑跨界切矢的插值。

Coons曲面(麻省理工学院)2023/2/213

双线性插值曲面,采用了“先定义线,然后线动成面”的思想。张量积曲面也是采用“线动成面”的思想,是CAGD中应用最广泛的一类曲面生成方法。映射空间域参数域vu

张量积曲面2023/2/214

定义在uv平面的矩形区域上的这张曲面称为张量积曲面。张量积曲面的特点是将曲面问题化解为简单的曲线问题来处理,适用于拓扑上呈矩形的曲面形状。样条的历史很早的绘图员利用压铁“ducks”和有柔性的木条(样条)来绘制曲线木质的样条具有二阶连续并且通过所有的控制点ADuck(weight)Duckstraceoutcurve7.1.2曲线曲面的光滑连接2023/2/2161.插值、拟合与逼近插值:给定一组有序的数据点Pi,i=0,1,…,n,构造一条曲线顺序通过这些数据点,称为对这些数据点进行插值,所构造的曲线称为插值曲线。拟合:构造一条曲线使之在某种意义下最接近给定的数据点(但未必通过这些点),所构造的曲线为拟合曲线。逼近:在计算数学中,逼近通常指用一些性质较好的函数近似表示一些性质不好的函数。在计算机图形学中,逼近继承了这方面的含义,因此插值和拟合都可以视为逼近。

原始数据点精确原始数据点不精确给定一组有序的数据点Pi,i=0,1,…,n,构造一条曲线顺序通过这些数据点,称为对这些数据点进行插值,所构造的曲线称为插值曲线。线性插值:假设给定函数f(x)在两个不同点x1和x2的值,用一个线形函数:y=ax+b,近似代替,称为的线性插值函数。抛物线插值:已知在三个互异点的函数值为,要求构造一个函数使抛物线在结点处与在处的值相等。插值xyo1y2y)(xfy=)(xyj=1x2xxyo1y2y)(xfy=)(xyj=1x2x3x3y(a)(b)

线性插值和抛物插值逼近:构造一条曲线使之在某种意义下最接近给定的数据点(但未必通过这些点),所构造的曲线称为逼近曲线。在计算数学中,逼近通常指用一些性质较好的函数近似表示一些性质不好的函数。

曲线的逼近逼近求给定型值点之间曲线上的点称为曲线的插值。将连接有一定次序控制点的直线序列称为控制多边形或特征多边形。

曲线的逼近凸壳(凸包)凸壳Convexhull的定义:

包含一组控制点的凸多边形边界。凸壳的作用提供了曲线或曲面与包围控制点的区域之间的偏差的测量以凸壳为界的样条保证了多项式沿控制点的平滑前进凸壳光顺(Firing)指曲线的拐点不能太多。对平面曲线而言,相对光顺的条件是:a.具有二阶几何连续性(G2);b.不存在多余拐点和奇异点;c.曲率变化较小。光顺2023/2/224XYX’Y’由一组基函数及相联系的系数矢量来表示:采用不同的基函数,曲线的数学表示方法就不同。基函数一旦确定,系数矢量就完全定义了曲线。2.计算机辅助几何设计(CAGD)中的曲线的一般表示形式规范基表示具有几何不变性。即同样的点在不同坐标系中生成的曲线相同。抛物线方程不具有几何不变性。2023/2/2253.曲线曲面的光滑连接给定一段曲线,如果在整个参数定义域内处处k次可微,则称该曲线为Ck参数连续。给定两段内部Ck连续的参数曲线r1(u1),u1∈[0,1]和r2(u2),u2∈[0,1],则两段曲线在公共连接点处不同阶次的连续性对应不同的要求。2023/2/2261)位置连续 曲线段r1(u1)的末端和曲线段r2(u2)的首端达到位置连续的条件为:r1(1)=r2(0)

位置连续是C0连续。2023/2/2272)

斜率连续曲线段r1(u1)的末端和曲线段r2(u2)的首端达到斜率连续的条件为:r'1(1)=kr'2(0)若k=1,说明曲线段r1(u1)的末端切矢与曲线段r2(u2)的首端切方向相同、模长相等,称为C1连续。若k≠1,则说明两段曲线在公共连接点处的切矢方向相同,但模长不相等。这种情况是几何连续的,称为G1连续。也称视觉连续。切矢方向与模:方向相同,模不同,G1连续;方向相同,模相同,C1连续;2023/2/2283)曲率连续两曲线段曲率连续应满足:(1)位置连续;(2)斜率连续;(3)曲率相等且主法矢方向一致。曲率连续的条件为:C2连续满足条件:

几何意义是:曲线段r2(u)首端的二阶导矢应处在由曲线段r1(v)末端的二阶导矢和一阶导矢所张成的平面内。

对于曲面片,若两个曲面片在公共连接线上处处满足上述各类连续性条件,则两个曲面片之间有同样的结论。

2023/2/230n次多项式的全体构成n次多项式空间,在其中任选一组线性无关的多项式都可以作为基。

幂基

ui,i=0,1,…,n,是最简单的多项式基,相应的参数多项式曲线方程为:

对于给定的n+1个数据点Pi,i=0,1,2,…,n,欲构造其插值曲线或逼近曲线,必先得到对应于各数据点Pi的参数值ui,ui是一个严格递增的序列△U:u0<u1<…<un。4.参数多项式曲线2023/2/231采用不同的参数化,得到的曲线也不同。常用的参数化方法有:均匀参数化(等距参数化)积累弦长参数化向心参数化修正弦长参数化对给定的数据点实行参数化,将参数值ui代入前面所述方程,使之满足插值条件:得一线性方程组:2023/2/232解线性方程组,可得系数矢量的唯一解。然而,幂基多项式曲线方程中的系数矢量几何意义不明确,构造曲线时,需解线性方程组,n较大时,不可取。其它多项式插值曲线如Lagrange、Newton、Hermite等较之幂基多项式曲线在计算性能等方面有较大改进,但总体上多项式曲线存在两个问题:l

次数增高时,出现多余的拐点;l

整体计算,一个数据点的微小改动,可能引起曲线整体大的波动。2023/2/233由于高次多项式曲线存在缺陷,单一低次多项式曲线又难以描述复杂形状的曲线。所以采用低次多项式按分段的方式在一定连续条件下拼接复杂的组合曲线是唯一的选择。

低次多项式组合曲线以三次多项式为例:2023/2/234y1(x)=a1+b1x+c1x2+d1x3y2(x)=a2+b2x+c2x2+d2x3y3(x)=a3+b3x+c3x2+d3x3“线动成面”

如何选择基函数使系数具有几何意义,且操作方便、易于修改是曲线曲面设计方法的发展方向。7.5.1样条描述n次样条参数多项式曲线的矩阵:7.5Himerte样条

基函数(blengingfunction),或称混合函数。7.5.2三次样条给定n+1个点,可得到通过每个点的分段三次多项式曲线:7.5.3自然三次样条定义:给定n+1个型值点,现通过这些点列构造一条自然三次参数样条曲线,要求在所有曲线段的公共连接处均具有位置、一阶和二阶导数的连续性,即自然三次样条具有C2连续性。还需要两个附加条件才能解出方程组.

特点:1.只适用于型值点分布比较均匀的场合2.不能“局部控制”

7.5.4三次Hermite样条定义:假定型值点Pk和Pk+1之间的曲线段为p(t),t∈[0,1],给定矢量Pk、Pk+1、Rk和Rk+1,则满足下列条件的三次参数曲线为三次Hermite样条曲线:

推导:几何形式对三次参数曲线,若用其端点位矢P(0)、P(1)和切矢P¢(0)、P¢(1)描述。将P(0)、P(1)、P¢(0)和P¢(1)简记为P0、P1、P¢0和P¢1,代入得

Mh是Hermite矩阵。Gh是Hermite几何矢量。三次Hermite样条曲线的方程为:

通常将T•Mk称为Hermite基函数(或混合函数,调和函数):

H(t)t10.20.40.60.80.20.40.60.81`-0.2H0(t)H1(t)H2(t)H3(t)Hermite基函数特点分析:1.可以局部调整,因为每个曲线段仅依赖于端点约束。2.Hermite曲线具有几何不变性2023/2/248Bézier曲线是法国雷诺汽车公司的工程师Bézier于1962年提出。1972年在UNISURF系统中正式投入使用。Bézier曲线采用一组特殊的基函数,使得基函数的系数具有明确的几何意义。其曲线方程:

其中从a0到an首尾相连的折线称为Bézier控制多边形。7.3Bézier曲线和曲面(注:Bézier本人也不能解释该公式的来源)a0a1a2a3ai为相对位置矢量7.3.1Bézier曲线2023/2/249当n=3时:f0(t)f1(t)f2(t)f3(t)1102023/2/250英国的Forest于1972年将上述Bézier曲线中的控制多边形顶点改为绝对位置矢量的Bernstein基表示形式:当n=3时:

P0P1P2P3Pi为绝对位置矢量B0,3(t)B1,3(t)B3,3(t)B2,3(t)三次基函数的图像2023/2/251三次Bezier曲线的矩阵表示取为几何矩阵GBEZ取为基矩阵MBEZ2023/2/252注意:有的教材中三次Bézier曲线的矩阵表示形式为:三次Bézier曲线:2023/2/253曲线的生成:参数离散计算型值点连接型值点折线2023/2/254#defineX0#defineY1#defineZ2typedeffloatVector[3];voidDisplayCubicBezierCurve(VectorP[4],intcount){floatC[3][4],t,deltat;VectorV,newV;inti,j;for(j=0;j<3;j++) /*C=GBEN*MBEN*/{ C[j][0]=P[0][j]; C[j][1]=-3*P[0][j]+3*P[1][j]; C[j][2]=3*P[0][j]-6*P[1][j]+3*P[2][j]; C[j][3]=-P[0][j]+3*P[1][j]-3*P[2][j]+P[3][j];}V[X]=P[0][X];V[Y]=P[0][Y];V[Z]=P[0][Z];/*将曲线的起点赋给矢量V*/detat=1.0/count;t=0.0;for(i=1;i<=count;i++){ t+=deltat; newV[X]=C[X][0]+t*(C[X][1]+t*(C[X][2]+t*C[X][3])); newV[Y]=C[Y][0]+t*(C[Y][1]+t*(C[Y][2]+t*C[Y][3])); newV[Z]=C[Z][0]+t*(C[Z][1]+t*(C[Z][2]+t*C[Z][3])); Line(V,newV); V[X]=newV[X];V[Y]=newV[Y];V[Z]=newV[Z];}}程序:生成三次Bezier曲线2023/2/255Bezier曲线的性质端点位置2023/2/256端点切矢量

Bezier曲线在起点与终点处分别与控制多边形的第一条边与最后一条边相切,它们在两端点处的切矢量分别为:2023/2/257对称性如果保持全部控制顶点位置不变,但次序颠倒,即Pi

变作Pn-i,则Bezier曲线形状不变,但参数变化方向相反,即2023/2/258仿射不变性仿射不变性指的是某些几何性质不随坐标变换而变化,这些几何性质包括曲线的形状、曲率、挠率等。仿射不变性还表现在,对于任意的仿射变换A,曲线的表示形式不变,即对曲线做变换只要对控制顶点做变换即可。2023/2/259凸包性点集 的凸包指的是包含这些点的最小凸集。Bezier曲线位于其控制顶点的凸包之内。控制顶点的凸包为连接P0P3所形成的多边形区域:(a)P0P1P2P3(b)P0P1P3P22023/2/260直线再生性 若控制顶点P0,P1,…,Pn

落于一条直线上,由凸包性可知,该Bezier曲线必为一条直线段。2023/2/261变差缩减性: 平面内任一条直线与Bezier曲线的交点个数不多于该直线与其控制多边形的交点个数。这一性质说明了Bezier曲线比其控制多边形的波动小,更光滑。平面曲线的保型性假设 位于一张平面之内,则Bezier曲线是平面曲线,它具有下面两条性质:保凸性:

如果控制多边形是凸的, 则Bezier曲线也是凸的。2023/2/262拟局部性局部性:其含义是指移动一个控制点,它只影响曲线的某个局部。Bezier曲线不具备局部性的性质,但它具有拟局部性。拟局部性:指的是移动一个控制点Pi

时,对应参数t=i/n的曲线上的点变动最大,远离i/n的曲线上的点变动越来越小。2023/2/263形状的易控性控制多边形大致上勾画了Bezier曲线的形状,要改变曲线只要改变顶点的位置即可。因此Bezier曲线的人机交互与形状控制比较容易。2023/2/264单一Bézier曲线不能满足描述复杂形状的要求,必须采用组合Bézier曲线。P0P1P2P3组合Bézier曲线示意图Bézier曲线的特点参数连续是对曲线光顺性的过分要求,在组合曲线的连接点处,参数连续不仅要求切矢具有共同的切矢方向,而且要求切矢模长相等。几何连续只要求在连接点处切矢方向相同,切矢模长可以不相等,由此产生了不同控制手段的多种曲线,如Gamma()样条曲线、Beta()样条曲线等,给曲线设计提供了极大的灵活性。2023/2/265若要组合Bézier曲线在连接点处具有一定的连续性,构成曲线的位置点矢量之间存在约束条件,可用Bézier曲线方程的一阶、二阶导数推导。Bézier曲线的优点是具有明确的几何意义,给定数据点的控制多边形确定曲线的形状,在设计过程中具有很强的可操作性。对于局部参数的Bézier曲线,当弦长差异较大时,弦长较长的那段曲线过分平坦,弦长较短的那段曲线则鼓得厉害。P0P1P2P3组合Bézier曲线示意图7.6.5Bezier曲线的递推(deCasteljau)算法

计算Bezier曲线上的点,可用Bezier曲线方程,但使用deCasteljau提出的递推算法则要简单的多。如下图所示,设、、是一条抛物线上顺序三个不同的点。过和点的两切线交于点,在点的切线交和于和,则如下比例成立:

这是所谓抛物线的三切线定理。(示意图见下页)

0P1P2P11P10P20PBezier曲线上的点

抛物线三切线定理当P0,P2固定,引入参数t,令上述比值为t:(1-t),有:

t从0变到1,第一、二式就分别表示控制二边形的第一、二条边,它们是两条一次Bezier曲线。将一、二式代入第三式得:当t从0变到1时,它表示了由三顶点P0、P1、P2三点定义的一条二次Bezier曲线。并且表明:这二次Bezier曲线P20可以定义为分别由前两个顶点(P0,P1)和后两个顶点(P1,P2)决定的一次Bezier曲线的线性组合。依次类推,由四个控制点定P(t)=p0+(p1-p0)t义的三次Bezier曲线P30可被定义为分别由(P0,P1,P2)和(P1,P2,P3)确定的二条二次Bezier曲线的线性组合,由(n+1)个控制点Pi(i=0,1,...,n)定义的n次Bezier曲线Pn0可被定义为分别由前、后n个控制点定义的两条(n-1)次Bezier曲线P0n-1与P1n-1的线性组合:由此得到Bezier曲线的递推计算公式:这便是著名的deCasteljau算法。用这一递推公式,在给定参数下,求Bezier曲线上一点P(t)非常有效。上式中:是定义Bezier曲线的控制点,即为曲线上具有参数t的点。deCasteljau算法稳定可靠,直观简便,可以编出十分简捷的程序,是计算Bezier曲线的基本算法和标准算法。当n=3时,decasteljau算法递推出的Pki呈直角三角形,对应结果如下图所示。从左向右递推,最右边点P30即为曲线上的点。

0P1P2P3P10P11P12P20P21P30Pn=3时niP的递推关系这一算法可用简单的几何作图来实现。给定参数,就把定义域分成长度为的两段。依次对原始控制多边形每一边执行同样的定比分割,所得分点就是由第一级递推生成的中间顶点,对这些中间顶点构成的控制多边形再执行同样的定比分割,得第二级中间顶点。重复进行下去,直到n级递推得到一个中间顶点即为所求曲线上的点,如下图所示。

)3/1(30PP=011/3

几何作图法求Bezier曲线

上一点(n=3,t=1/3)0P1P2P3P10P11P12P20P21P7.6.6Bezier曲线的升阶与降阶1.Bezier曲线的升阶所谓升阶是指保持Bezier曲线的形状与定向不变,增加定义它的控制顶点数,也即是提高该Bezier曲线的次数。增加了控制顶点数,不仅能增加了对曲线进行形状控制的灵活性,还在构造曲面方面有着重要的应用。对于一些由曲线生成曲面的算法,要求那些曲线必须是同次的。应用升阶的方法,我们可以把低于最高次数的的曲线提升到最高次数,而获得同一的次数。曲线升阶后,原控制顶点会发生变化。下面,我们来计算曲线提升一阶后的新的控制顶点。设给定原始控制顶点,定义了一条n次Bezier曲线:

增加一个顶点后,仍定义同一条曲线的新控制顶点为,则有:

对上式左边乘以,得到:

比较等式两边项的系数,得到:

化简即得:

其中。此式说明:新的控制顶点是以参数值按分段线性插值从原始特征多边形得出的。升阶后的新的特征多边形在原始特征多边形的凸包内特征多边形更靠近曲线。三次Bezier曲线的升阶实例如下图所示。*00PP=1P2P*43PP=*1P*2P*3P

Bezier曲线升阶2.Bezier曲线的降阶降阶是升阶的逆过程。给定一条由原始控制顶点定义的n次Bezier曲线,要求找到一条由新控制顶点定义的n-1次Bezier曲线来逼近原始曲线。假定是由升阶得到,则由升阶公式有:从这个方程可以导出两个递推公式:

给定空间16个位置点rij,可以确定一张三次Bezier曲面片。首先生成四条v向的三次Bezier曲线:

根据“线动成面”的思想,按设定间隔取v*∈[0,1],在四条v线上取点,沿u向生成三次Bezier曲线:

7.3.2Bézier曲面片rijuvuvV*uv将u,v向曲线方程合并得:

2023/2/280Bézier曲面片的矩阵表达式rijuv2023/2/281用Bézier曲面片组合曲面时,曲面拼合处应位置连续,即要求:r1(1,v)=r2(0,v)(上标表示曲面片1或曲面片2)[1111]AM1AT=[1000]AM2AT

C0连续的Bézier组合曲面(位置连续)2023/2/282C0连续的Bézier曲面片的拼接曲面片1曲面片22023/2/283若要得到跨界一阶导矢的连续性,对于0≤v≤1,曲面片1在u=1的切平面和曲面片2在u=0处的切平面重合,曲面的法矢在跨界处连续,即:

其中λ(ν)是考虑法矢模长的不连续。

因为令C1连续的Bézier组合曲面(导矢连续)可以得到组合曲面所有等v线的梯度连续的矩阵表示。

2023/2/2842023/2/285取λ(ν)=λ,得到表明跨界的四对棱边必须共线。

2023/2/286曲面片1曲面片22023/2/287B样条曲线是Schocenberg于1946年提出的,1972年deBoor和Cox分别给出B样条的标准算法。作为CAGD的一种形状描述的数学方法是Gordon和Riesenfeld于1974年在研究Bézier曲线的基础上给出的。B样条曲线方程为:其中Pi,i=0,1,….,n为控制顶点

K次规范B样条基函数Ni,K(t)(i=0,1,…,n)定义如下:ti(i=0,1,…,n)是对应于给定数据点的节点参数。7.4B样条曲线和曲面2023/2/2880次(1阶)B-样条曲线K=0时的B-样条基函数2023/2/2890次B-样条曲线示例2023/2/2901次(2阶)B-样条基函数K=1时的基函数2023/2/291K=1时定义的曲线示例2023/2/2922次(3阶)B-样条基函数K=2时的基函数2023/2/293续前页:2023/2/294续前页:2023/2/295续前页:2023/2/296续前页:2023/2/2973阶B-样条基函数图形2023/2/298[t0,t1][t1,t2][t2,t3][t3,t4][t4,t5]区间1阶基函数2阶基函数3阶基函数4阶基函数5阶基函数节点矢量:由于每个基函数Ni,k需要的支撑区间是[ti,ti+k+1],考虑基函数的下标从0开始到n,所以节点矢量为[t0,tn+k+1]。递推计算2023/2/299B-样条曲线的定义共n-k+2段有效区间:[ti,ti+1]区间上定义k个非零基函数(Ni-k+1,k~Ni,k)

因此,有效区间的下标应满足i>=k-1;与控制点对应,有效基函数下标应满足:i<=n。故:总有效区间为[tk-1,tn+1]。2023/2/21003阶B样条曲线示例T=[t0,t1,…,tn+1,tn+2,tn+3]2023/2/2101B-样条基函数的性质局部性权性连续性2023/2/2102B-样条基函数的局部性在每一个区间上至多只有k个基函数非零,它们是:2023/2/2103B-样条基函数的权性上式右端根据递推公式展开并化简得到:2023/2/2104B-样条基函数的连续性2023/2/2105B-样条曲线的分类根据节点矢量的不同形式分类均匀B样条曲线准均匀B样条曲线分段Bezier曲线非均匀B样条曲线采用均匀节点矢量,即所有节点区间长度为大于0的常数,这样的节点矢量定义了均匀B-样条基,从而定义出均匀B-样条曲线。当节点矢量在首末端点处有K重重复度,而在内部为均匀分布时,可定义准均匀B-样条曲线。节点矢量在首末端点处有K重重复度,而在内部为非均匀分布。2023/2/2106均匀B-样条曲线均匀节点矢量均匀B-样条基均匀B-样条曲线2023/2/2107例:三次均匀B样条曲线(1)2023/2/2108三次均匀B样条曲线(2)2023/2/2109基函数的平移性三次均匀B样条曲线(3)1阶基函数2阶基函数2023/2/2110三次均匀B样条曲线(4)2023/2/2111三次均匀B样条曲线(5)由前面推导过程得到:2023/2/2112三次均匀B样条曲线(6)2023/2/2113三次均匀B样条曲线(7)2023/2/2114三次均匀B样条曲线(8)2023/2/2115三次均匀B样条曲线(9)上式即为区间[tj,tj+1]上3次均匀B样条曲线的矩阵表达式。2023/2/2116P(3)P(4)P(5)2023/2/2117当K=3,且采用均匀参数化时,得到三次均匀B样条曲线:7.4.1均匀B样条曲线2023/2/2118在分段连接点处B样条曲线的值和导矢量为:

上式描述的三次均匀B样条曲线段的几何特性如图所示:曲线段首点位于以didi+1和di+1di+2为邻边的平行四边形的1/6处;其切失与didi+2平行,模为长度的1/2;首点二阶导矢是以di+1di和di+1di+2为邻边的平行四边形的对角线。曲线末端也有类似的结论。图7-13三次均匀B样条曲线段的几何特性2023/2/2119图7-13三次均匀B样条曲线段的几何特性由图7-13可以看出:当di、di+1和di+2三点共线时,曲线段起点Si(0)处二阶导数S"i(0)为0,Si(0)可能为拐点(如图7-14);当di、di+1、

di+2和di+3四点共线时,其所定义的曲线段退化为直线段;当di+1和di+2两顶点重合时,曲线段起点Si(0)和末点Si(1)分别与didi+1和与di+1di+2

相切,且端点曲率为0(如图7-15);2023/2/2120当di+1、di+2和di+3三顶点重合时,则曲线段在重点处出现尖点,重点与前点和后点在尖点前后各形成一段直线段(如图7-16)。曲线的上述退化情形在实际设计中很有用,如图7-17是应用曲线退化情形设计的尖点和直线段。2023/2/2121

对于三次均匀B样条曲线,计算对应于参数[ui,ui+1]这段曲线上的一点,要用到Ni-3,3(u)、Ni-2,3(u)、Ni-1,3(u)、Ni,3(u)四个基函数,涉及ui-3到ui+4共8个节点的参数值。

B样条曲线的基函数是局部支撑的,修改一个数据点,在修改处影响最大,对其两侧的影响快速衰减,其影响范围只有前后各K段曲线,对曲线的其它部分没有影响。这是计算机辅助几何设计所需要的局部修改性。2023/2/2122

B样条曲线的基函数是局部支撑的,均匀B样条曲线未考虑曲线数据点的分布对参数化的影响,当曲线弦长差异较大时,弦长较长的曲线段比较平坦,而弦长较短的曲线段则臌涨,甚至于因过“冲”而产生“纽结”。2023/2/21237.4.2均匀B样条曲面

给定16个顶点dij(i=1,2,3,4;j=1,2,3,4)构成的特征网格,可以定义一张曲面片。d24uvd42d43d44d11d12d13d14d21d23d31d32d33d34C4C3C1C2d41d22首先用di1、di2、di3、di4(i=1,2,3,4)构建四条V向曲线C1、C2、C3和C4(图中虚线);2023/2/2124均匀B样条曲面(续)参数v在[0,1]之间取值vk,对应于vk,曲线C1、C2、C3和C4上可得到V1k、V2k、V3k和V4k四个点,该四点构成u向的一个特征多边形,定义一条新的曲线P(u,vk);uvC4C3C1C2V1kV3kV4kV2k当参数vk在[0,1]之间取不同值时,P(u,vk)沿如图所示的黄色箭头方向扫描,即得到由给定特征网格dij(i=1,2,3,4;j=1,2,3,4)定义的双三次均匀B样条曲面片P(u,v)。2023/2/2125

双三次均匀B样条曲面P(u,v)的矩阵表示d24uvV1kd42d43d44d11d12d13d14d21d23d31d32d33d34C4C3C1C2V2kV3kV4kd41P(u,vK)d222023/2/2126考虑曲线弦长的影响,则曲线的基函数不再具有同样的格式,必须根据给定数据点进行弦长参数化,然后根据基函数的定义用如下的曲线方程计算各段曲线上的点:

非均匀B样条曲线考虑了弦长的影响,曲线不会因为节点分布不均匀而产生过冲和纽结。非均匀B样条曲线比均匀B样条曲线具有更好的光顺性,更符合数据点的分布。7.5非均匀有理B样条曲线曲面7.5.1非均匀B样条曲线曲面非均匀B样条均匀B样条2023/2/2127根据非均匀B样条曲线方程,计算曲线上的点需要对应参数区间上的基函数的值和控制多边形的顶点。基函数的值根据给定数据点的参数化进行计算。控制多边形的顶点依据曲线是否通过给定数据点确定。若生成的曲线不通过给定数据点,则给定数据点就是控制多边形顶点。若生成的曲线通过给定数据点,则首先必须根据给定数据点反求控制多边形的顶点,然后再代入曲线。

非均匀B样条曲线的实现2023/2/2128

给定数据点di(i=0,1,…,n-1)就是控制多边形的顶点。不过点三次非均匀B样条开口和闭口曲线需要分别处理。对于开口曲线,n个数据点只画n-3段曲线,需n-2个节点参数。而计算[Ui,Ui+1]上的一点,要用到除它们之外的前3个和后3个节点参数,所以在首尾各添加3个节点参数,一共需要n+4个节点参数值。为使曲线过给定数据的首末点,令U0=U1=U2=0;Un+1=Un+2=Un+3=1;全部节点参数为:U0=U1=U2=0;UK,UK+1,…,Un;Un+1=Un+2=Un+3=1;(1)不过点三次非均匀B样条曲线2023/2/2129用Hartley-Judd方法,即所画曲线段对应的控制多边形的长度与总控制多边形的长度之比确定节点参数。计算出节点参数后,就可以用前述的递归函数计算基函数Ni,K(u)的值,得到基函数的值,就可以代入曲线方程计算各段曲线上的点。图7-22不过点非均匀B样条曲线2023/2/2130对于闭合曲线,n个数据点画n段曲线,需n+1个节点参数曲线;首尾各添加3个节点参数,共n+7个节点参数。由于不过点闭合曲线,不通过控制多边形的首末点,全部节点参数为:

U0=0<U1<U2<UK<UK+1<…<Un+3<Un+4<Un+5<Un+6=1各节点的参数值采用Hartley-Judd方法。计算出节点参数后,就可以计算基函数Ni,K(u)的值,然后用曲线方程计算各段曲线上的点。2023/2/2131对于过点曲线,给定的数据点Pi(i=0,1,…,n-1)是曲线上的点。由曲线方程知,必须先计算出节点参数,再计算基函数Ni,K(u)的值,代入曲线方程,才能反算出控制多边形的顶点:

n个数据点,反求出n+2个控制顶点,画n-1段曲线,需n个节点参数;首尾各添加3个节点参数,一共需要n+6个节点参数值;在曲线首端重3段曲线首段的长度,在曲线的末端重3段曲线末段的长度。所有节点参数为:

U0=0<U1<U2<UK<UK+1<…<Un+2<Un+3<Un+4<Un+5=1i=1,2,……,n+5,L为包含附加段在内的总长。(2)过点三次非均匀B样条曲线2023/2/2132根据节点矢量计算基函数Ni,K(u)的值,代入曲线方程可以计算n个已知的曲线上的点,得如下方程:

写成矩阵形式如下:

对于开口曲线,d0=P0,dn+1=Pn-1,上述方程组是“追赶法”能够求解的三对角方程。求出d0,d1,……,dn,dn+1共n+2个控制顶点,即可以画出n-1曲线。(闭合曲线省略)2023/2/2133wi,i=0,1,…,n称为权因子;Ni,K(u)是B样条的基函数

有理B样条曲线非均匀B样条考虑节点分布不匀称的影响,但与所有已介绍的计算曲线一样,非均匀B样条不能精确表达二次曲线曲面,采用有理B样条,可以统一表达自由曲线曲面和二次曲线曲面。

有理B样条曲线的表达式为:

当Ni,K(u)是均匀基函数时,p(u)为均匀有理B样条曲线;当Ni,K(u)是非均匀基函数时,p(u)为非均匀有理B样条

(Non-UniformRationalB-Spline,简称NURBS)曲线;通过合理的定义权系数,NURBS曲线能够精确地描述二次圆锥曲线。目前已纳入到产品形状定义的工业标准之中。2023/2/2134曲线设计方法的关键在于基函数的选择,选择合适的基函数能够使系数矢量具有更明确的几何意义,绘图操作简单直观。基函数和参数化方法的选择对曲线的精度、光顺性、局部修改性具有决定性的影响。整个曲线设计方法的改进方向是在提高精度、保证光顺性的同时追求灵活的操作、明确的几何意义和良好的局部修改性。

曲线设计结论:2023/2/21357.6用OpenGL生成曲线和曲面

OpenGL中绘制Bezier曲线曲面是通过定值器完成的。(参考/OpenGL/credbook/evaluator.html

)1.定义定值器

指定定值器类型,每个方向的起止范围、次数(控制点数),每个方向步进一个单位对应的浮点值个数,控制点清单。如glMap1f(GL_MAP1_VERTEX_3,0.0,1.0,3,4,&ctrlpoints[0][0]);2.打开定值器voidglEnable(定值器类型);3.引用定值器

glEvalCoord(Ui,Vi);

当前生成的点的值域注意与1.中取得一致,如果总的值域为[0,1],则100个点组成的曲线上第i点的值域为(1-0)*i/100。2023/2/2136用OpenGL生成NURBS曲线和曲面

在OpenGL中,GLU函数库提供了一个NURBS接口。用户需要提供的数据包括控制点、节点等数据,控制点描述曲线的大致形状,节点控制B样条函数的形状。绘制一条NURBS曲线的步骤:(1)提供控制点序列和节点序列;(2)创建一个NURBS对象,设置NURBS对象属性;(3)绘制曲线;参考/ArticleShow.asp?id=4539&categoryid=8创建一个NURBS对象,用如下两条语句:

GLUnurbsObj*theNurbs;

theNurbs=gluNewNurbsRender();2023/2/2137用OpenGL生成一条NURBS曲线(续)创建对象后,用如下函数设置NURBS对象属性:voidgluNurbsProperty(GLUnurbsObj*nobj,GLenumproperty,Glfloatvalue);曲线的绘制是在gluBeginCurve()/gluEndCurve()函数对中完成。绘制曲线的函数为:voidgluNurbsCu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论