摘要: 本章围绕 NURBS 曲线曲面的核心概念与算法展开,共 19 道习题。内容涵盖:NURBS 的定义与四个关键特性(统一性、局部性、仿射不变性、凸包性);Cox-de Boor 递推公式与 B 样条基函数求值;de Boor 求值算法及其与 de Casteljau 算法的关系;节点重复度与曲线连续性(Cp−kC^{p-k}Cp−k)的关系;权值对曲线形状的影响及 NURBS 精确表示圆锥曲线的数学原理;张量积曲面的分离求值效率;NURBS 曲线求导(商法则)与 Boehm 节点插入算法;弦长参数化、完整圆所需控制点数、NURBS 作为工业标准的原因,以及曲率连续在 A 级曲面设计中的重要性。
第4章 NURBS曲线曲面 — 习题与答案
练习
习题 4.1
NURBS 的全称是什么?解释“非均匀”(Non-Uniform)、“有理”(Rational)和“B 样条”三个词分别代表什么含义?
答案:
NURBS 全称是 Non-Uniform Rational B-Spline(非均匀有理 B 样条)。
- 非均匀(Non-Uniform): 节点向量中的节点间距可以不等距,允许在曲线不同区域有不同的“张力”或精细度。均匀节点向量产生均匀 B 样条,非均匀节点向量允许在不改变控制点数量的情况下细化局部形状。
- 有理(Rational): 基函数是多项式分式(有理函数)而非单纯的多项式。这使得 NURBS 可以精确表示圆锥曲线(圆、椭圆、抛物线、双曲线),而纯多项式 B 样条只能近似。
- B 样条(B-Spline): 使用 B 样条基函数,具有局部支撑、单位分解等优良性质,提供了比 Bezier 曲线更好的局部控制能力。
习题 4.2
请说出 NURBS 的四个关键特性,并简要解释每个特性的含义。
答案:
习题 4.3
写出 Cox-de Boor 递推公式的完整表达式,包括 p=0 时的基础情况和 p>0 时的递推关系。
答案:
p=0p=0p=0 时:
Ni,0(u)=1N_{i,0}(u) = 1Ni,0(u)=1,如果 ui≤u<ui+1u_{i} ≤ u < u_{i+1}ui≤u<ui+1;否则 Ni,0(u)=0N_{i,0}(u) = 0Ni,0(u)=0
p>0p>0p>0 时:
Ni,p(u)=(u−ui)/(ui+p−ui)Ni,p−1(u)+(ui+p+1−u)/(ui+p+1−ui+1)Ni+1,p−1(u)
N_{i,p}(u) = (u – u_{i})/(u_{i+p} – u_{i}) N_{i,p-1}(u) + (u_{i+p+1} – u)/(u_{i+p+1} – u_{i+1}) N_{i+1,p-1}(u)
Ni,p(u)=(u−ui)/(ui+p−ui)Ni,p−1(u)+(ui+p+1−u)/(ui+p+1−ui+1)Ni+1,p−1(u)
其中当分母为 0 时,约定该项为 0(即 0/0 视为 0)。
习题 4.4
给定节点向量 U={0,0,0,1,2,3,3,3}U = \\{0, 0, 0, 1, 2, 3, 3, 3\\}U={0,0,0,1,2,3,3,3},p=2p=2p=2(二次 B 样条),计算 N1,2(1.5)N_{1,2}(1.5)N1,2(1.5) 的值。
答案:
U={0,0,0,1,2,3,3,3}U = \\{0,0,0,1,2,3,3,3\\}U={0,0,0,1,2,3,3,3},共 8 个元素,m=7m=7m=7,n=m−p−1=7−2−1=4n=m-p-1=7-2-1=4n=m−p−1=7−2−1=4,i=0..4i=0..4i=0..4。
先计算 0 次基函数在 u=1.5u=1.5u=1.5 处的值:
N0,0(1.5)=0,N1,0(1.5)=0,N2,0(1.5)=0 (1.5∉[0,1)),N3,0(1.5)=1 (1.5∈[1,2)),N4,0(1.5)=0,N5,0(1.5)=0,N6,0(1.5)=0
N_{0,0}(1.5)=0,\\quad N_{1,0}(1.5)=0,\\quad N_{2,0}(1.5)=0\\ (1.5\\notin[0,1)),\\quad N_{3,0}(1.5)=1\\ (1.5\\in[1,2)),\\quad N_{4,0}(1.5)=0,\\quad N_{5,0}(1.5)=0,\\quad N_{6,0}(1.5)=0
N0,0(1.5)=0,N1,0(1.5)=0,N2,0(1.5)=0 (1.5∈/[0,1)),N3,0(1.5)=1 (1.5∈[1,2)),N4,0(1.5)=0,N5,0(1.5)=0,N6,0(1.5)=0
1 次基函数:
N2,1(1.5)=(1.5−0)/(1−0)N2,0(1.5)+(2−1.5)/(2−1)N3,0(1.5)=0+0.5×1=0.5
N_{2,1}(1.5) = (1.5-0)/(1-0) N_{2,0}(1.5) + (2-1.5)/(2-1) N_{3,0}(1.5) = 0 + 0.5×1 = 0.5
N2,1(1.5)=(1.5−0)/(1−0)N2,0(1.5)+(2−1.5)/(2−1)N3,0(1.5)=0+0.5×1=0.5N3,1(1.5)=(1.5−1)/(2−1)N3,0(1.5)+(3−1.5)/(3−2)N4,0(1.5)=0.5×1+0=0.5
N_{3,1}(1.5) = (1.5-1)/(2-1) N_{3,0}(1.5) + (3-1.5)/(3-2) N_{4,0}(1.5) = 0.5×1 + 0 = 0.5
N3,1(1.5)=(1.5−1)/(2−1)N3,0(1.5)+(3−1.5)/(3−2)N4,0(1.5)=0.5×1+0=0.5
2次基函数:
N1,2(1.5)=(1.5−0)/(1−0)N1,1(1.5)+(3−1.5)/(3−1)N2,1(1.5)
N_{1,2}(1.5) = (1.5-0)/(1-0) N_{1,1}(1.5) + (3-1.5)/(3-1) N_{2,1}(1.5)
N1,2(1.5)=(1.5−0)/(1−0)N1,1(1.5)+(3−1.5)/(3−1)N2,1(1.5)N1,1(1.5)=(1.5−0)/(1−0)N1,0(1.5)+(2−1.5)/(2−1)N2,0(1.5)=0+0.5×0=0
N_{1,1}(1.5) = (1.5-0)/(1-0) N_{1,0}(1.5) + (2-1.5)/(2-1) N_{2,0}(1.5) = 0 + 0.5×0 = 0
N1,1(1.5)=(1.5−0)/(1−0)N1,0(1.5)+(2−1.5)/(2−1)N2,0(1.5)=0+0.5×0=0
所以$ N_{1,2}(1.5) = 0 + (1.5)/(2)×0.5 = 0.75×0.5 = 0.375$
习题 4.5
对于 3 次 B-Spline 基函数,当节点重复度分别为1、2、3、4时,曲线在该节点处的连续性各是多少?
答案:
对于 p=3,连续性为 Cp−kC^{p-k}Cp−k,其中 k 为节点重复度。
- 重复度 1(简单节点):C2C^{2}C2 连续(曲率连续)——A 级曲面设计的最低要求
- 重复度 2:C1C^{1}C1 连续(切线连续,但二阶导数不连续)
- 重复度 3:C0C^{0}C0 连续(位置连续,切线方向可能突变,形成尖角)
- 重复度4:不连续(曲线在该点断开)
习题 4.6
什么是 de Boor 算法?它与 de Casteljau 算法有什么联系?
答案:
de Boor 算法是 B 样条曲线求值的标准算法,通过递归线性插值直接在控制点上操作,计算复杂度为 O(p2)O(p^{2})O(p2),与 n 无关。de Boor 算法是 de Casteljau 算法的推广。de Casteljau 算法只适用于 Bezier 曲线(即节点向量为 {p+1 个重复起点, p+1 个重复终点} 的特殊 B 样条)。当 B 样条曲线的节点向量形式为 {0,…,0,1,…,1}\\{0,…,0,1,…,1\\}{0,…,0,1,…,1}(两端各 p+1 个重复节点)时,de Boor 算法退化为 de Casteljau 算法。
练习
习题 4.7
使用 de Boor 算法,计算二次 B 样条曲线在 u=1.5 处的值。节点向量 U={0,0,0,1,2,3,3,3}U =\\{0,0,0,1,2,3,3,3\\}U={0,0,0,1,2,3,3,3},控制点 P0=(0,0),P1=(1,0),P2=(2,1),P3=(3,0),P4=(4,0)P_{0}=(0,0), P_{1}=(1,0), P_{2}=(2,1), P_{3}=(3,0), P_{4}=(4,0)P0=(0,0),P1=(1,0),P2=(2,1),P3=(3,0),P4=(4,0)。
答案:
U={0,0,0,1,2,3,3,3}U = \\{0,0,0,1,2,3,3,3\\}U={0,0,0,1,2,3,3,3},m=7m=7m=7,p=2p=2p=2,n=m−p−1=4n=m-p-1=4n=m−p−1=4,控制点 P0∼P4P_{0}\\sim P_{4}P0∼P4。
u=1.5∈[1,2)u=1.5 \\in [1,2)u=1.5∈[1,2),所以 k=3k=3k=3(u3=1,u4=2u_{3}=1, u_{4}=2u3=1,u4=2)。
需要 Pk−p=P1P_{k-p}=P_{1}Pk−p=P1 到 Pk=P3P_{k}=P_{3}Pk=P3。
r=1:i=k−p+r=3−2+1=2,…,k=3r=1: i=k-p+r=3-2+1=2,\\ldots,k=3r=1:i=k−p+r=3−2+1=2,…,k=3
α2,1=(1.5−u2)/(u4−u2)=(1.5−0)/(2−0)=0.75α_{2,1} = (1.5 – u_{2})/(u_{4} – u_{2}) = (1.5-0)/(2-0) = 0.75α2,1=(1.5−u2)/(u4−u2)=(1.5−0)/(2−0)=0.75
α3,1=(1.5−u3)/(u5−u3)=(1.5−1)/(3−1)=0.25α_{3,1} = (1.5 – u_{3})/(u_{5} – u_{3}) = (1.5-1)/(3-1) = 0.25α3,1=(1.5−u3)/(u5−u3)=(1.5−1)/(3−1)=0.25
P2(1)=(1−0.75)P1+0.75P2=0.25×(1,0)+0.75×(2,1)=(1.75,0.75)P_{2}^{(1)} = (1-0.75)P_{1} + 0.75P_{2} = 0.25×(1,0) + 0.75×(2,1) = (1.75, 0.75)P2(1)=(1−0.75)P1+0.75P2=0.25×(1,0)+0.75×(2,1)=(1.75,0.75)
P3(1)=(1−0.25)P2+0.25P3=0.75×(2,1)+0.25×(3,0)=(2.25,0.75)P_{3}^{(1)} = (1-0.25)P_{2} + 0.25P_{3} = 0.75×(2,1) + 0.25×(3,0) = (2.25, 0.75)P3(1)=(1−0.25)P2+0.25P3=0.75×(2,1)+0.25×(3,0)=(2.25,0.75)
r=2:i=k−p+r=3−2+2=3,…,k=3r=2: i=k-p+r=3-2+2=3,…,k=3r=2:i=k−p+r=3−2+2=3,…,k=3,只有i=3i=3i=3
α3,2=(1.5−u3)/(u4−u3)=(1.5−1)/(2−1)=0.5α_{3,2} = (1.5 – u_{3})/(u_{4} – u_{3}) = (1.5-1)/(2-1) = 0.5α3,2=(1.5−u3)/(u4−u3)=(1.5−1)/(2−1)=0.5
P3(2)=(1−0.5)P2(1)+0.5P3(1)=0.5×(1.75,0.75)+0.5×(2.25,0.75)=(2.0,0.75)P_{3}^{(2)} = (1-0.5)P_{2}^{(1)} + 0.5P_{3}^{(1)} = 0.5×(1.75,0.75) + 0.5×(2.25,0.75) = (2.0, 0.75)P3(2)=(1−0.5)P2(1)+0.5P3(1)=0.5×(1.75,0.75)+0.5×(2.25,0.75)=(2.0,0.75)
所以 C(1.5)=(2.0,0.75)C(1.5) = (2.0, 0.75)C(1.5)=(2.0,0.75)
习题 4.8
解释 de Boor 算法相对于直接计算基函数然后求和的优势是什么?
答案:
直接计算基函数需要先递推计算所有 p 次基函数,每个基函数又需要递归计算低次基函数,计算复杂度为 O(n×p)O(n×p)O(n×p)。de Boor 算法通过递归线性插值直接在控制点上操作,计算复杂度为 O(p2)O(p^{2})O(p2),与 n 无关。在实际应用中,p 通常为 3(固定很小),而 n 可能很大(数百个控制点),de Boor 算法的常数时间和数值稳定性优势非常明显。此外,de Boor 算法不需要显式计算基函数,避免了大量浮点除法和条件判断。
习题 4.9
假设一个 NURBS 曲线有 4 个控制点且所有权值均为 1,它是什么曲线?如果将其中一个权值从 1 变为 10,曲线形状如何变化?
答案:
所有权值为 1 时,NURBS 退化为普通的 B 样条曲线。将其中一个权值从 1 变为 10,该控制点对曲线的吸引力增强,曲线被拉向该控制点。在极限情况下,如果权值趋于无穷大,曲线将通过该控制点。这种“拉力”效应是局部的——只有该控制点影响的曲线段(即节点区间 [ui,ui+p+1)[u_{i}, u_{i+p+1})[ui,ui+p+1) 内的部分)会发生变化,其他部分保持不变。
习题 4.10
为什么 NURBS 可以精确表示圆而 B 样条不能?从数学角度解释权值在精确表示圆锥曲线中的作用。
答案:
圆的参数方程是超越函数(三角函数),无法用多项式精确表示。B 样条曲线的基函数是多项式,因此 B 样条曲线本质上是分段多项式曲线,只能近似圆。NURBS 引入有理分式后,可以用两个多项式之比来表示圆。具体来说,令 w=cos(θ/2)w=cos(θ/2)w=cos(θ/2) 作为中间控制点的权值,通过有理基函数可以构造出形如 (1−t2)/(1+t2),2t/(1+t2)(1-t²)/(1+t²), 2t/(1+t²)(1−t2)/(1+t2),2t/(1+t2) 的参数化,这正是单位圆的有理参数化(Weierstrass 代换)。因此,NURBS 通过有理分式结构克服了多项式表示的局限性,实现了圆锥曲线的精确表示。
习题 4.11
给定一个 NURBS 曲面,u方向次数p=3,v方向次数q=2,控制点网格为6×5,求u方向节点数和v方向节点数各为多少?
答案:
u方向:n=5(控制点数为6,索引0…5),p=3,节点数 = n+p+1 = 5+3+1 = 9。
v方向:m=4(控制点数为5,索引0…4),q=2,节点数 = m+q+1 = 4+2+1 = 7。
所以u方向有9个节点向量元素,v方向有7个节点向量元素。
习题 4.12
解释张量积曲面的分离求值原理,并说明其计算效率优势。
答案:
分离求值原理:S(u,v)=∑iRi,p(u)(∑jRj,q(v)Pi,j)S(u,v) = ∑_{i} R_{i,p}(u) (∑_{j} R_{j,q}(v) P_{i,j})S(u,v)=∑iRi,p(u)(∑jRj,q(v)Pi,j)。先对每个 i 计算 $∑jRj,q(v)Pi,j∑_{j} R_{j,q}(v) P_{i,j}∑jRj,q(v)Pi,j 得到中间点 Qi(v)Q_{i}(v)Qi(v),再计算 ∑iRi,p(u)Qi(v)∑_{i} R_{i,p}(u) Q_{i}(v)∑iRi,p(u)Qi(v)。
计算效率优势:直接二维求值的复杂度为 O(n×m)O(n×m)O(n×m),而分离求值法将二维问题转化为两个一维问题,复杂度降低到 O(n+m)O(n+m)O(n+m)。对于 n=m=100 的曲面,直接求值需要 10000 次基函数计算,而分离求值只需要 200 次,效率提升 50 倍。
练习
习题 4.13
推导 NURBS 曲线的一阶导数公式,说明为什么需要用到商法则。给定 NURBS 曲线,其权值函数 w(u) = u + 1,加权曲线 A(u) = (u², u),求 C(u) 在 u=0 处的一阶导数。
答案:
NURBS 曲线 C(u)=A(u)/w(u)C(u) = A(u)/w(u)C(u)=A(u)/w(u) 是两个函数之比,因此求导需要使用商法则:
C′(u)=(A′(u)w(u)−w′(u)A(u))/w(u)2=(A′(u)−w′(u)C(u))/w(u)
C'(u) = (A'(u)w(u) – w'(u)A(u)) / w(u)² = (A'(u) – w'(u)C(u)) / w(u)
C′(u)=(A′(u)w(u)−w′(u)A(u))/w(u)2=(A′(u)−w′(u)C(u))/w(u)
其中 A′(u)=∑Ni,p′(u)wiPiA'(u) = ∑ N'_{i,p}(u) w_{i} P_{i}A′(u)=∑Ni,p′(u)wiPi,w′(u)=∑Ni,p′(u)wiw'(u) = ∑ N'_{i,p}(u) w_{i}w′(u)=∑Ni,p′(u)wi。
具体计算: C(u)=A(u)/w(u)=(u2/(u+1),u/(u+1))C(u) = A(u)/w(u) = (u²/(u+1), u/(u+1))C(u)=A(u)/w(u)=(u2/(u+1),u/(u+1))
A′(u)=(2u,1),w′(u)=1A'(u) = (2u, 1),w'(u) = 1A′(u)=(2u,1),w′(u)=1
在 u=0 处:C(0)=(0,0)C(0) = (0, 0)C(0)=(0,0),A′(0)=(0,1)A'(0) = (0, 1)A′(0)=(0,1),w′(0)=1w'(0) = 1w′(0)=1,w(0)=1w(0) = 1w(0)=1
所以 C′(0)=(A′(0)−w′(0)C(0))/w(0)=((0,1)−1×(0,0))/1=(0,1)C'(0) = (A'(0) – w'(0)C(0))/w(0) = ((0,1) – 1×(0,0))/1 = (0, 1)C′(0)=(A′(0)−w′(0)C(0))/w(0)=((0,1)−1×(0,0))/1=(0,1)
习题 4.14
给定一个 3 次 B-Spline 曲线,节点向量 U={0,0,0,0,1,2,3,3,3,3}U = \\{0,0,0,0,1,2,3,3,3,3\\}U={0,0,0,0,1,2,3,3,3,3},控制点 P0=(0,0),P1=(1,1),P2=(2,0),P3=(3,1),P4=(4,0),P5=(5,1)P_{0}=(0,0), P_{1}=(1,1), P_{2}=(2,0), P_{3}=(3,1), P_{4}=(4,0), P_{5}=(5,1)P0=(0,0),P1=(1,1),P2=(2,0),P3=(3,1),P4=(4,0),P5=(5,1)。在 u=1.5 处插入一个节点,使用 Boehm 算法计算新控制点。
答案:
p=3,U={0,0,0,0,1,2,3,3,3,3},u4=1,u5=2,k=4p=3,U = \\{0,0,0,0,1,2,3,3,3,3\\},u_{4}=1, u_{5}=2,k=4p=3,U={0,0,0,0,1,2,3,3,3,3},u4=1,u5=2,k=4。
受影响控制点:i=k−p+1=4−3+1=2i = k-p+1 = 4-3+1 = 2i=k−p+1=4−3+1=2 到 k = 4,即 P2,P3,P4P_{2}, P_{3}, P_{4}P2,P3,P4。
计算 αi=(ε−ui)/(ui+p−ui)α_{i} = (ε – u_{i})/(u_{i+p} – u_{i})αi=(ε−ui)/(ui+p−ui):
α2=(1.5−u2)/(u5−u2)=(1.5−0)/(2−0)=0.75
α_{2} = (1.5 – u_{2})/(u_{5} – u_{2}) = (1.5-0)/(2-0) = 0.75
α2=(1.5−u2)/(u5−u2)=(1.5−0)/(2−0)=0.75α3=(1.5−u3)/(u6−u3)=(1.5−1)/(3−1)=0.25
α_{3} = (1.5 – u_{3})/(u_{6} – u_{3}) = (1.5-1)/(3-1) = 0.25
α3=(1.5−u3)/(u6−u3)=(1.5−1)/(3−1)=0.25α4=(1.5−u4)/(u7−u4)=(1.5−1)/(3−1)=0.25
α_{4} = (1.5 – u_{4})/(u_{7} – u_{4}) = (1.5-1)/(3-1) = 0.25
α4=(1.5−u4)/(u7−u4)=(1.5−1)/(3−1)=0.25
新控制点:
Q2=(1−0.75)P1+0.75P2=0.25×(1,1)+0.75×(2,0)=(1.75,0.25)
Q_{2} = (1-0.75)P_{1} + 0.75P_{2} = 0.25×(1,1) + 0.75×(2,0) = (1.75, 0.25)
Q2=(1−0.75)P1+0.75P2=0.25×(1,1)+0.75×(2,0)=(1.75,0.25)Q3=(1−0.25)P2+0.25P3=0.75×(2,0)+0.25×(3,1)=(2.25,0.25)
Q_{3} = (1-0.25)P_{2} + 0.25P_{3} = 0.75×(2,0) + 0.25×(3,1) = (2.25, 0.25)
Q3=(1−0.25)P2+0.25P3=0.75×(2,0)+0.25×(3,1)=(2.25,0.25)Q4=(1−0.25)P3+0.25P4=0.75×(3,1)+0.25×(4,0)=(3.25,0.75)
Q_{4} = (1-0.25)P_{3} + 0.25P_{4} = 0.75×(3,1) + 0.25×(4,0) = (3.25, 0.75)
Q4=(1−0.25)P3+0.25P4=0.75×(3,1)+0.25×(4,0)=(3.25,0.75)
新控制点序列:P0,P1,Q2,Q3,Q4,P5P_{0}, P_{1}, Q_{2}, Q_{3}, Q_{4}, P_{5}P0,P1,Q2,Q3,Q4,P5
即 (0,0),(1,1),(1.75,0.25),(2.25,0.25),(3.25,0.75),(5,1)(0,0), (1,1), (1.75,0.25), (2.25,0.25), (3.25,0.75), (5,1)(0,0),(1,1),(1.75,0.25),(2.25,0.25),(3.25,0.75),(5,1)
习题 4.15
弦长参数化(Chord Length Parameterization)的公式是什么?为什么它比均匀参数化更适合于实际数据拟合?
答案:
弦长参数化公式:
u0=0
u_{0} = 0
u0=0uk=uk−1+∣Qk−Qk−1∣/D
u_{k} = u_{k-1} + |Q_{k} – Q_{k-1}| / D
uk=uk−1+∣Qk−Qk−1∣/D
其中 D=∑∣Qj−Qj−1∣D = ∑|Q_{j} – Q_{j-1}|D=∑∣Qj−Qj−1∣ 是总弦长(所有相邻数据点间距离之和)。最终所有uk∈[0,1]u_{k} ∈ [0,1]uk∈[0,1]。
均匀参数化将参数等间距分配,当数据点分布不均匀时,会导致曲线在稀疏区域过度振荡,在密集区域拉伸不足。弦长参数化反映了数据点的几何分布——相邻点距离越远,参数跨度越大,这样曲线可以更自然地跟随数据点的分布,产生更接近真实形状的曲线。弦长参数化是逆向工程中最常用的参数化方法。
习题 4.16
为什么完整的 NURBS 圆需要 7 个控制点而不是 4 个?如果只用4个控制点,能否得到精确的圆?
答案:
完整的圆至少需要 4 个 1/4 圆弧段拼接而成,每个段需要 3 个控制点,相邻段共享一个控制点,因此总共需要 4×3 – 4 – 1 = 7 个控制点(4 个段各 3 个控制点,减去 4 个共享点,首尾不重合所以需要额外 1 个)。如果用 4 个控制点(即 1 个 Bezier 段),只能得到一个圆弧,无法覆盖整个圆,因为 3 次 Bezier 曲线至多表示一个角度小于 180 度的圆弧(实际上 3 次 Bezier 最多精确表示一个 90 度的圆弧)。所以精确表示完整圆至少需要 7 个控制点。
练习
习题 4.17
为什么 CAD 系统选择 NURBS 而不是单纯的 Bezier 曲线作为工业标准?如果全部使用 Bezier 曲线会有什么问题?
答案:
Bezier 曲线有两个主要问题:(1) 控制点数量决定了曲线的次数(n 个控制点对应 n-1 次曲线),复杂形状需要高次曲线,高次多项式在数值计算上不稳定,容易出现振荡(Runge 现象);(2) Bezier 曲线没有局部控制能力——移动一个控制点会影响整条曲线,不便于交互式形状设计。
NURBS 通过节点向量将曲线分段为低次多项式(通常为 3 次),每段只受少数几个控制点影响,既保证了局部控制又避免了高次不稳定。此外,NURBS 可以精确表示圆锥曲线而 Bezier 不能。如果全部使用 Bezier 曲线,CAD 系统将面临以下问题:需要大量高次曲线、形状编辑困难、无法精确表示圆/椭圆等基本形状、数据存储量大(因为需要将复杂曲线分割成大量 Bezier 段)。因此 NURBS 成为工业标准。
习题 4.18
张量积曲面结构的局限性是什么?在什么情况下需要更一般的曲面表示方法(如细分曲面)?
答案:
张量积曲面的主要局限性是要求控制点必须是矩形拓扑网格,不能处理任意拓扑结构(如星形连接点、多于或少于 4 条边的面片)。对于需要处理任意拓扑的复杂模型(如角色动画模型、有机形状),张量积 NURBS 需要切割成多个面片并拼接,导致接缝处连续性处理复杂。
细分曲面(如 Catmull-Clark 细分)可以处理任意拓扑网格,不需要拼接多个面片,因此在动画和游戏领域更受欢迎。但在 CAD/CAM 领域,由于 NURBS 具有精确参数化和标准化优势,仍然占据主导地位。近年来,T 样条(T-spline)等新兴技术试图结合 NURBS 的精确参数化和细分曲面的任意拓扑处理能力,是 CAD 领域的重要研究方向。
习题 4.19
在 CAD 系统中,为什么需要计算曲率?曲率连续(C^{2} 连续)在 A 级曲面设计中为什么重要?
答案:
曲率直接反映了曲线的弯曲程度,在 CAD 中有以下重要用途:
- 评估曲面光顺性(曲率梳状图是常用的光顺性检查工具)
- 计算曲面的反射特性(用于A级曲面评审)
- 数控加工中的刀具路径规划(曲率影响刀具半径选择)
- 曲面拼接时的连续性判定(C2C^{2}C2连续要求曲率连续)
在 A 级曲面(如汽车外覆盖件)设计中,C2C^{2}C2 连续是基本要求,因为:(1) 曲率不连续会在光照反射中产生可见的条纹或折痕(用户可以肉眼观察到);(2) 在后续加工中,曲率不连续会导致刀具路径突变,影响加工质量;(3) 在流体动力学分析中,曲率不连续会产生非物理的流动分离。更高要求甚至要求曲率变化率连续(C3C^{3}C3 连续),用于飞机机身等对气动性能要求极高的场景。
网硕互联帮助中心



评论前必须登录!
注册