最近在做CAD的开发,涉及到BSpline,记录一些数学学习过程。
曲线表示
曲线、曲面的表示方程一般分为三种:
空间曲线上的一个点可以表示为
- 显示方程表示 :
z = f ( x , y ) z= f(x,y) z=f(x,y) - 隐式方程表示 :
f ( x , y , z ) = 0 f(x,y,z)=0 f(x,y,z)=0 - 参数方程表示 :(参数方程表示不唯一)
p ( t ) = [ x ( t ) 、 y ( t ) 、 z ( t ) ] p(t) = [x(t)、y(t)、z(t)] p(t)=[x(t)、y(t)、z(t)]
笛卡尔分量 p ( t ) = x ( t ) i + y ( t ) j + z ( t ) ] k p(t) = x(t)i+y(t)j+z(t)]k p(t)=x(t)i+y(t)j+z(t)]k
因为种种原因和便捷性,在CAD中主要用了参数方程,部分可能会涉及到隐式方程。二者互补性强,以下对比二者
参数方程对比
| 对比维度 | 隐式表示 | 参数表示 |
|---|---|---|
| 核心逻辑 | 约束关系(点满足什么条件)(某些情况的曲面offset好用) | 生成规则(如何生成点) |
| 空间适应性 | 2D 曲线、3D 曲面 | 2D/3D 曲线、3D 曲面(全场景覆盖) |
| 形状有界性 | 擅长无界 | 擅长有界片段(零件轮廓、圆弧) |
| 设计友好性 | 系数无几何意义,不适合交互设计 | 控制点直观,适合交互控形 |
| 关键操作效率 | 快速判断 “点在不在曲线上” | 快速生成 “曲线上的点” |
| 奇点处理 | 无参数化伪奇点 | 可能存在伪奇点,需额外处理(如球的南北极点) |
幂基表示
“幂基” 的核心是用 ** 幂函数(幂函数(1, u, u², …, uⁿ))作为 “基函数”,通过 “基函数与系数矢量的线性组合” 来定义曲线。类比数学中的 “多项式展开”:比如二次多项式(f(u) = 2 + 3u + 5u²),是用(1, u, u²)作为基,系数为(2, 3, 5);而 n 次曲线的幂基表示,是将这种 “标量多项式” 推广到 “矢量多项式”—— 每个系数都是三维矢量,对应曲线上点的坐标分量。
公式解析
-
n次曲线的幂级形式:
C ( u ) = ⟨ x ( u ) , y ( u ) , z ( u ) ⟩ = ∑ i = 0 n a i u i , 0 ≤ u ≤ 1 C(u) = \langle x(u), y(u), z(u) \rangle = \sum_{i=0}^{n} a_{i} u^{i}, \quad 0 \leq u \leq 1 C(u)=⟨x(u),y(u),z(u)⟩=i=0∑naiui,0≤u≤1 -
矩阵形式:
C ( u ) = [ a 0 a 1 ⋯ a n ] [ 1 u ⋮ u n ] = [ a i ] T [ u i ] C(u) = \begin{bmatrix} a_{0} & a_{1} & \cdots & a_{n} \end{bmatrix} \begin{bmatrix} 1 \\ u \\ \vdots \\ u^{n} \end{bmatrix} = \left[ a_{i} \right]^{T} \left[ u^{i} \right] C(u)=[a0a1⋯an] 1u⋮un =[ai]T[ui]
其中 [ a i ] T \left[ a_{i} \right]^{T} [ai]

最低0.47元/天 解锁文章
1041

被折叠的 条评论
为什么被折叠?



