null第6章 曲 线 曲 面
(B样条曲线)第6章 曲 线 曲 面
(B样条曲线)null 二、B样条曲线
1.从 Bezier 曲线到B样条曲线
(1) Bezier 曲线在应用中的不足:
缺乏灵活性 一旦确定了特征多
边形的顶点数(m个),也就决定了曲
线的阶次(m-1次),无法更改;
控制性差当顶点数较多时,曲
线的阶次将较高,此时,特征多边形
对曲线形状的控制将明显减弱;null
不易修改 由曲线的混合函数可
看出,其值在开区间 ( 0 , 1 ) 内均不为
零。因此,所定义之曲线在 ( 0 < t < 1)
的区间内的任何一点均要受到全部顶
点的影响,这使得对曲线进行局部修
改成为不可能。
(而在外形
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
中,
局部修改是随时要进行的)null
01tB0,3B1,3B2,3B3,3Bi,n(t) 伯恩斯坦基函数null 为了克服 Bezier 曲线存在的问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
,
Gordon 等人拓展了 Bezier曲线,就
外形设计的需求出发,希望新的曲线
要:易于进行局部修改;
更逼近特征多边形;
是低阶次曲线。
于是,用 n次B样条基函数替换了伯
恩斯坦基函数,构造了称之为B样条
曲线的新型曲线。null 2.B样条曲线的数学表达式
B样条曲线的数学表达式为:
在上式中0≤t≤1 , i= 0, 1, 2, …, m
所以可以看出:B样条曲线是分段定
义的。如果给定 m+n+1 个顶点 Pi ( i=
0, 1, 2,…, m+n),则可定义 m+1 段 n
次的参数曲线。 null式中: 0≤t ≤ 1
k = 0, 1, 2, …, n 在以上表达式中:
Fk,n( t )为n次B样条基函数,也称B
样条分段混合函数。其表达式为:null 连接全部曲线段所组成的整条曲线称
为 n 次B样条曲线。依次用线段连接
点 Pi+k (k=0,1,…,n)所组成的多边折
线称为B样条曲线在第i段的B特征多
边形。
null3.二次B样条曲线
在二次B样条曲线中,n=2,k=0,1,2
故其基函数形式为:
null 有了基函数,因此可写出二次B样条
曲线的分段表达式为:
( i= 0,1,2,…,m ) m+1段null 写成一般的矩阵形式为:
式中,Bk为分段曲线的B特征多边形
的顶点:B0,B1,B2。对于第i段曲线的
Bk 即为:Pi,Pi+1,Pi+2 连续的三个顶
点。 (见下图)
nulln=2,二次B样条曲线
m+n+1个顶点,三
点一段,共m+1段。i=0
P0,2(t)i=1
P1,2(t)null 二次B样条曲线的性质
先对 P(t)求导得:
然后分别将 t=0,t=0.5,t=1 代入 P(t)
和 P’(t),可得:
P(0)=1/2(B0+B1), P(1)=1/2(B1+B2);
P’(0)=B1-B0, P’(1)=B2-B1;
P(1/2)=1/2{1/2[P(0)+P(1)]+B1}
P’(1/2)=1/2(B2-B0)=P(1)- P(0)null 与以上这些式子所表达的性质相符的
曲线是何种形状:(见下图)
是什么曲线?
与Bezier曲线有
何差别?null 结论:分段二次B样条曲线是一条抛
物线;有n个顶点定义的二次B样条曲
线,其实质上是n-2段抛物线(相邻三
点定义)的连接,并在接点处达到一
阶连续。(见下图)
F282.c 二次 B-样条曲线 null 4.三次B样条曲线
分段三次B样条曲线由相邻四个顶点
定义,其表达式为:
P(t)=F0,3(t)•B0+F1,3(t)•B1+F2,3(t)•B2
+F3,3(t)•B3 (0≤t≤1)
可见,由 n 个顶点定义的完整的三次
B样条曲线是由 n-3 段分段曲线连接
而成的。很容易证明,三次B样条曲
线在连接处达到二阶连续。 ***F281.c 三次 B-样条曲线 null B样条曲线是一种非常灵活的曲线,曲线
的局部形状受相应顶点的控制很 直观。这
些顶点控制技术如果运用得 好,可以使整
个B样条曲线在某些部位满足一些特殊的技
术要求。如:可以在曲线中构造一段直线;
使曲线与特征多边形相切;
使曲线通过指定点;
指定曲线的端点;
指定曲线端点的约束条件。null 对于特征多边形的逼近性
二次B样条曲线优于三次B样条曲线
三次Bezier曲线优于二次Bezier曲线
相邻曲线段之间的连续性
二次B样条曲线只达到一阶导数连续
三次B样条曲线则达到二阶导数连续
角点的修改对曲线形状的影响
Bezier曲线:修改一个角点将影响整条曲线的形状。
B样条曲线:修改一个角点只影响该角点所在位置前后
三段曲线的形状。B样条曲线的适用范围null角点重叠和角点共线(*)
二重角点
若要使B样条曲线与特征多边形相切,可运用二重角
点的方法。Q0Q1Q3Q2Q4P1P2Q(0-1)P0null 三重角点
若要使B样条曲线产生一个尖点,可运用三重角
点的方法。Q1Q4Q3Q2Q5P1P2Q0P0Q6P3P4null 三角点共线
若要使B样条曲线产生反向弧切接的效果,可运用三
角点共线的方法。Q1Q4Q3Q2P0P2Q0P1。null 四角点共线
若要使B样条曲线段之间切接入一段直线,可运用四
角点共线的方法。Q1Q4Q3Q2P0P2Q0P1。。Q5P36.5 Bézier曲面和B样条曲面6.5 Bézier曲面和B样条曲面6.5.1 Bézier曲面null 曲面的形状、位置由边界上的四个角点决定。中间角点只反映曲面的凹凸程度。
Bézier曲面及控制网格演示动画
null Bezier曲面 Bezier曲面是Bezier曲线的扩展, Bezier曲面的边界线就是由四条Bezier曲线构成的。三次Bezier曲线段由四个控制点确定,三次Bezier曲面片则由4× 4控制点确定。16个控制点组成一个矩阵:B=Q00 Q 10 Q20 Q30 Q01 Q 11 Q21 Q31 Q02 Q12 Q22 Q32Q03 Q13 Q23 Q33Q00Q10Q20Q30Q01Q31Q32Q02Q03Q33Q13Q23Q11Q21Q12Q22wu 由曲线拓展为Bézier曲面给定空间16个位置点bij,可以确定一张三次Bezier曲面片。
由曲线拓展为Bézier曲面首先生成四条v向的三次Bezier曲线:nullBézier曲面的定义
在空间中给定(n+1)×(m+1)个点,称以下张量积形式的参数多项式曲面为n×m次的Bézier曲面:贝塞尔曲面表达式如下: n , m P(u,v)=∑ ∑bi,jBi,n(u)Bj,m(v) 0≤u,v≤1 i=0 ,j=0
贝塞尔曲面中应用最广泛的是双3次贝塞尔曲面,它由给出的4*4个网格点唯一决定. nullP(u,0)
P(0,v)
图9.15 Bézier曲面的控制网格
一般称 为 的控制顶点,把由
和 组成的网格称为 的控制网格,记为 ,如图9.15所示。 nullBézier曲面的矩阵表示是:
null
控制网格的四个角点 是曲面 的四个端点。决定了曲线的形状,位置。P03
P02
P30
P20
P10
P01
P11
P21
P31
P41
P14
P(u,0)
P(0,v)
Bézier曲面的端点和边界线
(1) 端点位置Bézier曲面具有以下性质:null(2) 边界线的位置 的4条边界线 , , , 是Bézier曲线,它们分别以 , ,
, 为控制多边形。 P03
P02
P30
P20
P10
P01
P11
P21
P31
P41
P14
Bézier曲面的端点和边界线
null双一次Bezier曲面:取m=n=1。这是一张双曲抛物面(马鞍面) ;
双二次Bezier曲面:取m=n=2。该曲面的四条边界是抛物线。 ;
双三次Bezier曲面:取m=n=3;
注:矩阵表示见课本null端点 的u向切矢和v向切矢分别为 和
,所以三角形 所在的平面在P00点和曲面相切。同理,三角形 , ,
所在的平面分别在点 , , 处与曲面相切。(3) 端点的切平面Bezier曲面的端点切平面null由端点的切平面知, 是 在点 处的法向;其余各端点 , , 处法向的情况也类似。
(4) 端点的法向(5) 凸包性
曲面 位于其控制顶点 的凸包内。null
(6) 仿射不变性
曲面 的形状仅与点 的位置有关,而与坐标系的选择无关。
(7) 拟局部性
修改一个控制顶点时,曲面上距离它较近的点受影响较大。要改变曲面某部分的形状,只要交互调节相应的控制顶点即可。 null 双三次均匀B样条曲面P(u,v)的矩阵表示 双三次均匀B样条曲面P(u,v)的矩阵表示null6.5.2 B样条曲面的定义和性质null由两组多边形 ( )和
( )组成的网格(如图2)称为 的控制网格,简记为 。P00
P01
P10
P04
P20
P40
图2 B样条曲面及其控制网格
均匀B样条曲面 均匀B样条曲面给定16个顶点dij(i=1,2,3,4 j=1,2,3,4)构成的特征网格,可以定义一张曲面片。
用di1、di2、di3、di4(i=1,2,3,4 )构建四条V向曲线C1、C2、C3和C4(图中虚线);参数v在[0,1] 之间取值vk ,对应于vk曲线C1、C2、C3和C4上可得到v1k、v2k、v3k和v4k四个点,该四点构成u向的一个特征多边形,定义一条新的曲线P(u,vk);当参数vk在[0,1] 之间取不同值时,P(u,vk)沿箭头方向扫描,即得到由给定特征网格dij(i=1,2,3,4 j=1,2,3,4)定义的双三次均匀B样条曲面片P(u,v)。null与Bézier曲面一样, 是对曲面 的大致形状的勾画, 是对 的逼近。B样条曲面也具有局部调整性、凸包性、几何不变性等,它的控制网格也是人机交互的手段,也可以通过某些算法对其进行计算,这些都与B样条曲线的情况类似。
null双三次B样条曲面片b样条曲面null6.6实验曲线的绘制方法1、最小二乘法 在科学研究中,通过实验或测量,可以获得大量的实验数据。一般在获得数据之后,对这些数据进行某种处理,然后绘成图形。 但由于实验本身会受到各种具体因素的影响,使得通过实验测得的数据或多或少地带有误差。也就是说,这些实验数据本身并不准确。因此如果仅仅是简单地将这些数据点连成曲线,那么这种看起来似乎很精确的方法恰恰是不符合实际情况的,也是不可取的。 正确的方法应该是用一条平滑的曲线以适当的方式来尽可能地靠近这些数据点,以弥补由于误差造成的数据点的跳动。null 那么对于一系列的数据点(xi,yi)(i=1,2…n),所要绘制的曲线y=f(x),用什么样的标准来评价这条曲线是否处于较为合理的状态呢? 通常把数据点的坐标值与曲线上对应的坐标值之差ε作为评判的标准:null 用最小二乘法来绘制实验曲线,其实质也就是要找出一个经验方程y=f(x)用来描述这些点。所以,工作的第一步首先要根据已知数据点的分布情况进行一下预测,经验方程可能属于什么类型,比如说是线形函数,还是其它阶次的多项式函数。2、用最小二乘法拟合直线 设有测得的一组数据点(xi,yi)(i=1,2…n)。根据这些数据点的分布情况,预测到它们之间呈线形关系:那末,可按最小二乘法的原理建立起下面的式子:null(xi,yi)为测得的已知数据点的值,故这个方程是关于a1和a2的函数,即: 当a1和a2为何值时,该函数f(a1,a2)能取得极小值。这是一个二元函数的求极值问题,其条件为:null展开整理后得:写成矩阵形式为: 求解该方程组可解出未知数a1和a2的值,从而使线形函数表达式:成为已知,并可根据该表达式绘出图形。null1. 双二次Bezier曲面的4条边界都是抛物线,其特征网格有( )个顶点。
A)8
B)9
C)10
D)16贝塞尔曲面贝塞尔曲面表达式如下: m n P(u,v)=∑∑Pi,jBi,m(v)Bj,n(u) 0≤u,v≤1 i=0 j=0
贝塞尔曲面中应用最广泛的是双3次贝塞尔曲面,它由给出的4*4个网格点唯一决定, P(u,v)=(u3 u2 u 1) 两个贝塞尔曲面块的连接交于一条公共边,为了保证在这条边上的光滑性,必须满足下面条件:(1)定义公共边的四点相等(2)公共边上四点与其在二块曲面上相邻的两个点共线贝塞尔曲面贝塞尔曲面10-1 3 -3 1 3 -6 3 0 -3 3 0 0 1 0 0 0P00P01P02P03 P10P11P12P13 P20P21P22P23 P30P31P32P33v3 v2 v 1-1 3 -3 1 3 -6 3 0 -3 3 0 0 1 0 0 0null 曲面的形状、位置由边界上的四个角点决定。中间四个角点只反映曲面的凹凸程度。v(u,w)= U • N • B• NT • WT (0≤ u≤1 , 0≤ w≤1 ) Bezier曲面得表达式:式中U=u3 u2 u1 1 WT=w3 w2 w1 1 T 3 -6 3 0 -3 3 0 0 1 0 0 0-1 3 -3 1N==NT(与Bezier曲线相同) Bezier曲面null写成X,Y,Z三个方向分量得形式:X(u,w)= U • N • Bx• NT • WT
Y(u,w)= U • N • By• NT • WT (0≤ u≤1 , 0≤ w≤1 )
Z(u,w)= U • N • Bz• NT • WT Bezier曲面nullB样条曲面 B样条曲面也是B样条曲线的推广,与三次Bezier曲面一样,三次B样条曲面片也是由4 × 4控制点确定的。 同样,16个控制点写成如下矩阵形式:B=Q00 Q 10 Q20 Q30 Q01 Q 11 Q21 Q31 Q02 Q12 Q22 Q32Q03 Q13 Q23 Q33 与三次B样条曲线一样,三次B样条曲面也很好地解决了曲面片之间的连接问题。Q00Q10Q20Q30Q01Q31Q32Q02Q03Q33Q13Q23Q11Q21Q12Q22wunullB样条曲面的表达式为:v(u,w)= U • N • B• NT • WT (0≤ u≤1 , 0≤ w≤1 )U、W、B矩阵与Bezier曲面是一样的。 3 -6 3 0 -3 0 3 0 1 4 1 0-1 3 -3 11/6N= (与B样条曲线相同)写成X,Y,Z三个方向的分量形式:
x(u,w)=U • N • Bx • NT • WT
y(u,w)= U • N • By • NT • WT (0≤ u≤1 , 0≤ w≤1 )
z(u,w)= U • N • Bz • NT • WTnullVoid B_face( float *Bx, *By, *Bz, *projection_matrix44; float Fx, Fy) //绘制B样条曲面的程序,16个控制点的x,y,z坐标分别 //在4x4的矩阵Bx,By,Bz中,projection_matrix44为投影变换矩阵, //Fx,Fy为投影后平移量 { float N[4][4], Nt[4][4], U[1][4], Wt[4][1], temp_product14[1][4]; float product44x[4][4], product14x[1][4]; ……; float x, y, z, x1, y1,; construct_matrix44(N, -1, 3, -3, 1, 3, -6, 0, 4, -3, 3, 3, 1, 1, 0, 0, 0); construct_matrix44(Nt,……); //先求出product44x = N * Bx * Nt matrix44_matrix44(temp_product44, N, Bx); matrix44_matrix44(product44x, temp_prodct44, Nt); 同样算出product44y,product44z;nullfor ( float u = 0; u < 1; u +=0.1) { construct_matrix14( U, u*u*u, u*u, u, 1); //product14x = U * product44x = U * N * Bx * Nt; matrix14_matrix44( product14x, U, product44x); matrix14_matrix44( product14y, U, product44x); matrix14_matrix44( product14z, U, product44x); null for ( float w = 0; w < 1; w +=0.1) { construct_matrix41( Wt, w*w*w, w*w, w, 1); matrix14_matrix41( x, prouduct14x, Wt); matrix14_matrix41( y, prouduct14y, Wt); matrix14_matrix41( z, prouduct14z, Wt); //再做投影变换,Fx,Fy为在投影面上的平移量 projection_transform( x, y, z, x1, y1, projection_matrix44, Fx, Fy); if (w == 0) moveto( x1, y1); lineto( x1, y1); } // for ( float w = 0; w < 1; w +=0.1) } // for ( float u = 0; u < 1; u +=0.1) }