B‐spline curves 的定义
Given:
𝑛+1 control points 𝒅0,…,dn∈R3
参数化向量 𝑇=(t0,…,tn,…,tn+k)
𝒅i 又称为 de Boor points
Then:
k阶 B‐spline curve 𝒙(𝑡) 定义为:
x(t)=n∑i=0Ni,k(t)⋅di
B样条本质是分段曲线、但通过 local basis funchion 的方法,有一个公式统一了所有分段曲线。
B‐spline curves 的例子
k=4,n=5
Support intervals of 𝑁i,k
由于n=5,d0−d5定义第一条曲线,d1−d6定义第二条曲线。
本质上是分段曲线,在连接点上C3连续。
Multiple weighted knot vectors
例子中的𝑇=(t0,…,tn,…,tn+k) 满足 t0<t1<⋯<tn+k
但也可以定义为t0≤t1≤⋯≤tn+k,即结点重合。
结点重合会导致连续性下降,每增加一重、连续性减一。可以以此方法控制曲线的连续性。
可以根据重合度控制结点的光滑性。
• The recursive definition of the B spline function 𝑁i,k(i=0,…,n) works nonetheless as long as no more than 𝑘 knots coincide
首未端点插值
set: t0=t1=⋯=tk−1 and tn+1=tn+2=⋯=tn+k
𝒅0 and 𝒅n are interpolated
要使首未端点被插值,需要把首未端点设置为K重。把B-spline curve 的两个端点都设成n−1重,就会退化为 Bezier curve.
B‐spline curves的性质
性质1:退化
要使首未端点被插值,需要把首未端点设置为K重。把B-spline curve 的两个端点都设成n−1重,就会退化为 Bezier curve.
性质2:连续性
结点重合会reduction of continuity of𝑥(𝑡)。𝑙重结点 (1≤𝑙<𝑘) means 𝐶k−𝑙−1 continuity
性质3:局部性
moving of 𝑑i only changes the curve in the region [𝑡i,ti+k]
The insertion of new de Boor points does not change the polynomial degree of the curve segments
[1:10:41] 💡 在神经网络中把 acfivation 改为 local basis funchion. 这样,只需更新 N N 的部分参数。
B样条的计算 The de Boor algorithm
算法背景
输入:
de Boor points:𝒅0,…,𝒅n
Knot vector:
(t0,⋯,tk−1=t0,tk,tk+1,…,tn,tn+1,…,tn+k=tn+1)
输出:
Curve point 𝒙(𝑡) of the k 阶B‐spline curve
算法过程
不断地插入结点就可以得到B样条曲线
- Search index with tr≤t≤tr+1
for i=r-k+1,... ,r
d^0_i=d_i
for j=1, ... ,k-1
for i=r-k+1+j,\cdots ,r
a_i^j={t-t_i}/{t_{i+k-j}-t_i}
d_i^j=(1-a^j_i) \cdot d^{j-1}_{i-1}+a_j^i \cdot d^{j-1}_i
d^{k-1}_r=x(t)
B样条的其他理论知识
- B样条的许多性质
• 局部凸包性、变差缩减性、包络性
• B样条的导数、积分递推式、几何作图 - 重节点的B样条基函数及B样条曲线
- Bezier样条曲线转换为B样条曲线
- B样条插值方法
- …
本文出自CaterpillarStudyGroup,转载请注明出处。 https://caterpillarstudygroup.github.io/GAMES102_mdbook/