前言
如果你对这篇文章可感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。
文章目录
第八章 曲线曲面 - 2
8.1 Bezier曲线生成算法
8.1.1 根据定义直接生成Bezier曲线
- 递归求出 C n i C_n^i Cni, C n i = n ! i ! ( n − i ) ! = n − i + 1 i C n i − 1 , n ≥ i C_n^i =\frac{n!}{i!(n-i)!}=\frac{n-i+1}{i}C_n^{i-1},\ n\geq i Cni=i!(n−i)!n!=in−i+1Cni−1, n≥i。
- 将 p ( t ) p(t) p(t) 表示成分量坐标形式直接计算即可。
- 缺点 —— 计算量太大
8.1.2 Bezier曲线的递推算法
-
Bezier曲线上的任一个点 p ( t ) p(t) p(t),都是其它相邻线段的同等比例 t t t 点处的连线,再取同等比例 t t t 的点再连线,一直取到最后那条线段的同等比例 t t t 处,该点就是Bezier曲线上的点 p ( t ) p(t) p(t)。
-
-
由(n+1)个控制点 P i ( i = 0 , 1 , … , n ) P_i(i=0,1,…,n) Pi(i=0,1,…,n)定义的 n n n 次 Bezier 曲线 P 0 n P_0^n P0n 可被定义为分别由前、后 n n n 个控制点定义的两条 ( n − 1 ) (n-1) (n−1) 次Bezier曲线 P 0 n − 1 P_0^{n-1} P0n−1 与 P 1 n − 1 P_1^{n-1} P1n−1 的线性组合: P 0 n = ( 1 − t ) P 0 n − 1 + t P 1 n − 1 , t ∈ [ 0 , 1 ] P_0^n = (1-t)P_0^{n-1}+tP_1^{n-1}, \ t\in [0,1] P0n=(1−t)P0n−1+tP1n−1, t∈[0,1]。
-
-
de Casteljau算法稳定可靠,直观简便,可以编出十分简洁的程序,是计算Bezier曲线的基本算法和标准算法。
8.1.3 de Casteljau算法几何作图
8.2 Bezier曲线的拼接及升降阶
8.2.1 Bezier曲线的拼接
- 几何设计中,有时会采用分段设计,然后将各段曲线相互连接起来,并在接合处保持一定的连续条件。
- G 0 G^0 G0连续,即 P n = Q 0 P_n=Q_0 Pn=Q0
- G 1 G^1 G1连续,即 P n − 1 P_{n-1} Pn−1、 P n = Q 0 P_n=Q_0 Pn=Q0、 Q 1 Q_1 Q1三点共线。因为Bezier曲线起点和终点处的切线方向和特征多边形的第一条边及最后一条边的走向一致。
8.2.2 Bezier曲线的升阶与降阶
-
Bezier曲线的升阶
-
升阶是指保持Bezier曲线的形状与方向不变,增加定义它的控制顶点数,即提高该Bezier曲线的次数。
-
-
P i ∗ P^{*}_i Pi∗在 P i P_i Pi 和 P i − 1 P_{i-1} Pi−1 的连线上, P 0 ∗ = P 0 , P n + 1 ∗ = P n P^{*}_0=P_0, \ P^{*}_{n+1} = P_{n} P0∗=P0, Pn+1∗=Pn。
-
-
-
Bezier曲线的降阶
- 降阶是升阶的逆过程, a 0 + a 1 t + a 2 t 2 + a 3 t 3 = b 0 + b 1 t + b 2 t 2 a_0+a_1t+a_2t^2+a_3t^3=b_0+b_1t+b_2t^2 a0+a1t+a2t2+a3t3=b0+b1t+b2t2,如果 a 3 a_3 a3不等于0,想找一个二次多项式精确等于它是不可能的。如果一定要降下来,那只能近似逼近。
-
升阶与降阶的重要性
- 它是CAD系统之间数据传递与交换的必需
- 它是系统中分段 (片)线性逼近的需要。通过逐次降阶,把曲面化为直线平面,便于求交和曲面绘制。
- 它是外形信息压缩的需要。降阶处理以后可以减少存储的信息量。
8.3 Bezier曲面
#####8.3.1 Bezier曲面的定义
-
设 p i , j ( i = 0 , 1 , … , n ; j = 0 , 1 , … , m ) p_{i,j} (i=0,1,…,n;\ j=0,1,…,m) pi,j(i=0,1,…,n; j=0,1,…,m)为 ( n + 1 ) ∗ ( m + 1 ) (n+1)*(m+1) (n+1)∗(m+1) 个空间点,则 m ∗ n m*n m∗n Bezier曲面定义为: P ( u , v ) = ∑ i = 0 m ∑ j = 0 n P i j B i , m ( u ) B j , n ( v ) , u , v ∈ [ 0 , 1 ] P(u,v)=\sum\limits_{i=0}^{m}\sum\limits_{j=0}^{n}P_{ij}B_{i,m}(u)B_{j,n}(v),\ u,v\in [0,1] P(u,v)=i=0∑mj=0∑nPijBi,m(u)Bj,n(v), u,v∈[0,1]。
-
B i , m ( u ) = C m i u i ( 1 − u ) m − i , B j , n ( v ) = C n j v j ( 1 − v ) n − j B_{i,m}(u)=C_m^iu^i(1-u)^{m-i}, \ B_{j,n}(v)=C_n^jv^j(1-v)^{n-j} Bi,m(u)=Cmiui(1−u)m−i, Bj,n(v)=Cnjvj(1−v)n−j 。依次用线段连接点列中相邻两点所形成的空间网格,称之为特征网格。
-
-
-
四条边界线是Bezier曲线,固定一维不动即可求出四条边界线。
8.3.2 Bezier曲面性质
-
Bezier曲面特征网格的四个角点正好是Bezier曲面的四个角点。
-
Bezier曲面特征网格最外一圈顶点定义Bezier曲面的四条边界。
-
几何不变性
-
对称性
-
凸包性
-
Bezier曲面片的拼接
-
-
如果要求该公共边界达到 G 1 G^1 G1连续,则两曲面片在该边界上有公共的切平面,因此曲面的法向应当是跨界连续的,即: Q u ( 0 , v ) ∗ Q v ( 0 , v ) = a ( v ) P u ( 1 , v ) ∗ P v ( 1 , v ) Q_u(0,v)*Q_v(0,v)=a(v)P_u(1,v)*P_v(1,v) Qu(0,v)∗Qv(0,v)=a(v)Pu(1,v)∗Pv(1,v)。
-
8.3.3 递推算法 (曲面的求值)
-
-
再以 v v v 参数值对它执行曲线的de Casteljau算法, n n n 级递推以后,得到一个 P 00 m n P_{00}^{mn} P00mn,即所求曲面上的点。一条曲线可以表示成2条低一次的曲线的线性组合,曲面可以表示成低一次的4张曲面的线性组合。 -
8.4 B样条曲线产生背景及定义
8.4.1 Bezier曲线缺点
-
一旦确定了特征多边形的顶点数 (n+1),也就决定了曲线的阶次 (n次)。如果阶数过高,则曲线中会有大量极值点,造成曲线波动现象明显。
-
Bezier曲线或曲面的拼接比较复杂。
-
Bezier曲线或曲面不能作局部修改,牵一发而动全身。因为每个Bernstein多项式在整个区间 [ 0 , 1 ] [0,1] [0,1]上都有支撑,所以每个控制项点对0到1之间的t值处的曲线都有影响。
8.4.2 B样条方法
- 采用分段连续多项式的方法。整条曲线用一个完整的表达形式,但内在的量是一段一段的。既克服了波动现象,曲线也是低次的,有统一的表达和统一的算法。
- 分段方法
- n + 1 n+1 n+1 个点,每两点之间构造一条多项式, n + 1 n+1 n+1个点有 n n n 个小区间。
- 每个小区间构造一条三次多项式,变成了 n n n 段的三次多项式拼接在一起,段与段之间要达到 C 2 C^2 C2连续。
8.4.3 B样条的递推定义和性质
- B样条曲线的数学表达式
- P ( u ) = ∑ i = 0 n P i B i , k ( u ) , u ∈ [ u k − 1 , u n + 1 ] P(u)=\sum\limits_{i=0}^{n}P_iB_{i,k}(u),\ u\in [u_{k-1},u_{n+1}] P(u)=i=0∑nPiBi,k(u), u∈[uk−1,un+1]。 P i ( i = 0 , 1 , … , n ) P_i(i=0,1,…,n) Pi(i=0,1,…,n) 是控制多边形的顶点。
- B i , k ( u ) B_{i,k}(u) Bi,k(u) 称为 k k k 阶 ( k − 1 k-1 k−1 次) B B B 样条基函数, k k k 是刻画次数, k ∈ [ 2 , n + 1 ] k\in [2,n+1] k∈[2,n+1] 。对Bezier曲线来说,阶数 = = = 次数;对 B B B 样条来说,阶数是次数+1。
- B B B 样条基函数是一个称为节点矢量的非递减的参数 u u u 的序列所决定的 k k k 阶分段多项式,这个序列称为节点向量。
8.4.4 de Boor-Cox 递推定义
-
原理:对于 k k k 阶 ( k − 1 ) (k-1) (k−1) 次的 B B B 样条基函数,构造一种递推的公式,由 0 0 0 次构造 1 1 1 次, 1 1 1 次构造 2 2 2 次, 2 2 2 次构造 3 3 3 次 … 依次类推。
-
-
曲线方程中, n + 1 n+1 n+1 个控制顶点 P i ( i = 0 , 1 , … , n ) P_i \ (i=0,1,…,n) Pi (i=0,1,…,n),要用到 n + 1 n+1 n+1 个 k k k 阶 B B B 样条 $B_{i,k}(u) $。它们支撑区间的并集定义了这一组 B B B 样条基的节点矢量 U = [ u 0 , u 1 , … , u n + k ] U=[u_0,u_1,…,u_{n+k}] U=[u0,u1,…,un+k]。
-
8.4.5 B样条基函数定义区间及节点向量
-
K
K
K 阶
B
B
B 样条对应节点向量数
-
-
对于 B i , 1 B_{i,1} Bi,1 ( 1 1 1阶 0 0 0次基函数) 来说,涉及到 u i u_i ui 到 u i + 1 u_{i+1} ui+1 一个区间,即一阶的多项式涉及一个区间两个节点。 B i , 2 B_{i,2} Bi,2 是由 B i , 1 B_{i,1} Bi,1 和 B i + 1 , 1 B_{i+1,1} Bi+1,1 组成,因此 B i , 2 B_{i,2} Bi,2 涉及 2 个区间 3 个节点; B i , 3 B_{i,3} Bi,3 涉及3个区间4个节点…, B i , k B_{i,k} Bi,k 涉及 k k k 个区间 k + 1 k+1 k+1 个节点。
-
-
B
B
B 样条函数定义区间
-
-
-
“阶数+顶点”等于节点向量的个数。
-
-
B
B
B 样条曲线定义
8.5 B样条曲线性质及类型划分
8.5.1 B样条基函数的主要性质
- 局部支承性
-
-
反过来,对每个区间 ( u i , u i + k ) (u_i,u_{i+k}) (ui,ui+k),至多只有 k k k 个基函数在其上非零。
-
- 权性
- ∑ i = 0 n B i , k ( u ) = 1 , u ∈ [ u k − 1 , u n + 1 ] \sum\limits_{i=0}^{n}B_{i,k}(u)=1,u\in [u_{k-1},u_{n+1}] i=0∑nBi,k(u)=1,u∈[uk−1,un+1]
- 连续性
- B i , k ( u ) B_{i,k}(u) Bi,k(u) 在 r r r 重节点处的连续阶不低于 k − 1 − r k-1-r k−1−r
- 分段参数多项式
- B i , k ( u ) B_{i,k} (u) Bi,k(u) 在每个长度非零的区间 [ u i , u i + 1 ) [u_i,u_{i+1}) [ui,ui+1) 上都是次数不高于 k − 1 k-1 k−1 的多项式,它在整个参数轴上是分段多项式。
8.5.2 B样条函数的主要性质
- 局部性
- k阶B样条曲线上的一点至多与k个控制顶点有关,与其它控制顶点无关。
- 移动曲线的第i个控制顶点 P i P_i Pi,至多影响到定义在区间上那部分曲线的形状,对曲线其余部分不发生影响。
- 变差缩减性
- 与Bezier的变差缩减性一致
- 几何不变性
- B样条曲线的形状和位置与坐标系的选择无关
- 凸包性
- B样条曲线落在 P i P_i Pi 构成的凸包之中。其凸包区域小于或等于同一组控制顶点定义的Bezier曲线凸包区域。
- 该性质导致顺序k+1个顶点重合时,由这些顶点定义的k次B样条曲线段退化到这一个重合点。顺序k+1个顶点共线时,由这些顶点定义的k次B样条曲线为直线。
8.5.3 B样条曲线类型的划分
-
均匀B样条曲线
- 当节点沿参数轴均匀等距分布,即 u i + 1 − u i = u_{i+1}-u_{i}= ui+1−ui= 常数 > 0 时,表示均匀 B 样条函数。
- 均匀B样条的基函数呈周期性。即给定n和k,所有的基函数有相同形状。每个后续基函数仅仅是前面基函数在新位置上的重复。
- B i , k ( u ) = B i + 1 , k ( u + Δ u ) = B i + 2 , k ( u + 2 Δ u ) B_{i,k}(u)=B_{i+1,k}(u+\Delta u)=B_{i+2,k}(u+2\Delta u) Bi,k(u)=Bi+1,k(u+Δu)=Bi+2,k(u+2Δu)
- 举例
- 假定有四个控制点,取参数值 $ n=3, k=3$,则 n + k = 6 n+k=6 n+k=6, u = ( 0 , 1 , 2 , 3 , 4 , 5 , 6 ) u = (0,1,2,3,4,5,6) u=(0,1,2,3,4,5,6)。
-
准均匀B样条曲线
- 与均匀B样条曲线的差别在于两端节点具有重复度k,这样的节点矢量定义了准均匀的B样条基函数。均匀: u = ( 0 , 1 , 2 , 3 , 4 , 5 , 6 ) u=(0,1,2,3,4,5,6) u=(0,1,2,3,4,5,6);准均匀: u = ( 0 , 0 , 0 , 1 , 2 , 3 , 4 , 5 , 5 , 5 ) u=(0,0,0,1,2,3,4,5,5,5) u=(0,0,0,1,2,3,4,5,5,5)。
- 均匀B样条曲线没有保留Bezier曲线端点的几何性质,采用准均匀的B样条曲线可以解决这个问题。
-
分段Bezier曲线
-
节点矢量中两端节点具有重复度k,所有内节点重复度为k-1,这样的节点矢量定义了分段的Bernstein基函数。
-
-
B样条曲线用分段Bezier曲线表示后,各曲线段就具有了相对的独立性。缺点是增加了定义曲线的数据,控制顶点数及节点数。
-
-
非均匀B样条曲线
- 当节点沿参数轴的分布不等距,即 u i + 1 − u i u_{i+1}-u_i ui+1−ui 不等于常数时,表示非均匀B样条函数。