文章目录
1. 定义
NURBS(Non Uniform Rational B-spline)曲线通常称为非均匀有理B样条曲线,其数学定义如下:
其中,
N i , p ( u ) N_{i,p}(u) Ni,p(u)为 p p p次B样条基函数, P 0 , P 1 , . . . , P n P_0, P_1, ..., P_n P0,P1,...,Pn为控制点, U = { u 0 , u 1 , . . . , u m u_0, u_1, ..., u_m u0,u1,...,um }为节点向量, w 0 , w 1 , . . , w n w_0, w_1, .., w_n w0,w1,..,wn代表权重.
推导过程:
容易得到以下结论:
- 如果所有权重均等于1,NURBS 曲线退化成B样条曲线.
- NURBS 曲线是有理曲线.
2. 性质
2.1 NURBS基函数的性质
- R i , p ( u ) R_{i,p}(u) Ri,p(u)是关于 u u u的 p p p次有理函数.
- 如果 u ∉ [ u i , u i + p + 1 ) u∉[u_i,u_{i+p+1}) u∈/[ui,ui+p+1),则 R i , p ( u ) = 0 R_{i,p}(u)=0 Ri,p(u)=0
- 当 u ∈ [ u i , u i + 1 ) u∈[u_i,u_{i+1}) u∈[ui,ui+1)时,至多存在 p + 1 p+1 p+1个 p p p次基函数,即 R i − p , p ( u ) , R i − p + 1 , p ( u ) , . . . , R i , p ( u ) R_{i-p,p}(u), R_{i-p+1,p}(u), ..., R_{i,p}(u) Ri−p,p(u),Ri−p+1,p(u),...,Ri,p(u)非0.
- 当 u ∈ [ u i , u i + 1 ) u∈[u_i,u_{i+1}) u∈[ui,ui+1)时, ∑ j = i − p i R j , p ( u ) = 0 \sum\limits_{j=i-p}^{i}R_{j,p}(u)=0 j=i−p∑iRj,p(u)=0.
- 如果节点数量为 m + 1 m+1 m+1,B样条基函数的次数为 p p p,个数为 n + 1 n+1 n+1,则 m = n + 1 + p m=n+1+p m=n+1+p.
- 基函数 R i , p ( u ) R_{i,p}(u) Ri,p(u)在 k k k重节点 u u u处 C p − k C^{p-k} Cp−k连续.
- 如果对所有的 i i i,均有 w i = c w_i=c wi=c,其中 c c c是一个非0常量,则 R i , p ( u ) = N i , p ( u ) R_{i,p}(u) = N_{i,p}(u) Ri,p(u)=Ni,p(u).
2.2 NURBS曲线的性质
- NURBS曲线是次数为 p p p的分段有理曲线组合.
- m = n + p + 1 m = n + p + 1 m=n+p+1.
- Clamped NURBS曲线经过 p 0 p_0 p0, p n p_n pn两个控制点.
- 强凸包性:
当 u ∈ [ u i , u i + 1 ) u∈[u_i,u_{i+1}) u∈[ui,ui+1)时,曲线段 C ( u ) C(u) C(u) 在由控制点 P i − p , P i − p + 1 , . . . , P i P_{i-p}, P_{i-p+1}, ..., P_i Pi−p,Pi−p+1,...,Pi组成的凸包内. - 局部修改特性:
改变控制点 P i P_i Pi的位置,只会影响处在 [ u i , u i + p + 1 ) [u_i,u_{i+p+1}) [ui,ui+p+1)区间内的曲线段 C ( u ) C(u) C(u). - C ( u ) C(u) C(u)在 k k k重节点 u u u处 C p − k C^{p-k} Cp−k连续.
- 变差递减性.
- B样条曲线和贝塞尔曲线是NURBS曲线的特例.
- 投影不变性.
3. 修改权重
增加(或,减少)权重值会将曲线拉向(或,远离)控制点 P i P_i Pi。当 w i w_i wi值无穷大时,曲线通过控制点 P i P_i Pi,当 w i w_i wi为零时,控制点 P i P_i Pi对曲线无影响。
进一步推导:
可得以下结论:
如果 w k w_k wk为非负,则 C ( u ) C(u) C(u)始终位于 C 0 ( u ) C^0(u) C0(u)和 P k P_k Pk的线段上,其中 C 0 ( u ) C^0(u) C0(u)是 w k = 0 w_k=0 wk=0对应的点, u u u在 [ u k , u k + p + 1 ] [u_k,u_{k+p+1}] [uk,uk+p+1]中。并且,当 w k w_k wk从0变为无穷大时, C ( u ) C(u) C(u)从 C 0 ( u ) C^0(u) C0(u)移到 P k P_k Pk,如果 w k w_k wk是无穷大, C 0 ( u ) C^0(u) C0(u)变成 P k P_k Pk。
示意图:
4. 相关算法
4.1 节点插入:单点插入
假设有 N + 1 N + 1 N+1个控制点 P 0 , P 1 , … , P n P_0,P_1,…,P_n P0,P1,…,Pn,其相关权值分别为 W 0 , W 1 , … , W N W_0,W_1,…,W_N W0,W1,…,WN,节点向量为 U U U,次数 p p p.
令 P i = ( x i , y i , z i ) P_i=(x_i,y_i,z_i) Pi=(xi,yi,zi),则控制点 P i W = ( w i x i , w i y i , w i z i , w i ) P^W_i=(w_ix_i,w_iy_i,w_iz_i,w_i) PiW=(wixi,wiyi,wizi,wi), 0 < = i < = n 0<=i<=n 0<=i<=n,节点向量 U U U定义了一个 p p p次的四维B样条曲线。在这个四维B样条曲线中插入一个新的节点 t t t,得到一组新的控制点 Q i W = ( X i , Y i , Z i , W i ) Q^W_i=(X_i,Y_i,Z_i,W_i) QiW=(Xi,Yi,Zi,Wi), 0 < = i < = n 0<=i<=n 0<=i<=n。通过将 Q i W Q^W_i QiW的前三个分量除以第四个分量,将 Q i W Q^W_i QiW投影回三维空间,得到给定NURBS曲线的新的控制点集。
4.2 De Boor’s Algorithm
只需将每个控制点乘以其权重,将NURBS曲线转换为4D B样条曲线,在此4D B样条曲线上执行de Boor算法,然后通过将前三个分量除以第四个分量,并保留第四个分量作为其新权重,将生成的曲线投影回3D。
5. Rational Bézier Curves
有理贝塞尔曲线:
6. Rational Bézier Curves: Conic Sections
构建圆锥曲线:
示意图:
计算:
抛物线:
椭圆:
双曲线:
结论:
由三个非共线控制点 P 0 、 P 1 和 P 2 P_0、P_1和P_2 P0、P1和P2定义的有理Bézier曲线,当 w w w大于、等于或小于1时,分别为双曲线、抛物线或椭圆。
7. Circular Arcs and Circles
周期性的弧或圆:
示意图:
计算:
结果:
完整圆的构建: