スプライン関数
制御点/制御ポリゴンとマークされたコンポーネント曲線を持つBスプラインの加重和として描画されたスプライン曲線
数値解析 の 数学の 分野において 、 B スプライン または 基底スプラインは、与えられた 次数 、 滑らかさ 、および 領域 分割に関して最小の サポート を持つ スプライン 関数です。与えられた次数のスプライン関数は、その次数の B スプラインの 線形結合 として表現できます。カーディナル B スプラインには、互いに等距離にあるノットがあります。B スプラインは、 曲線フィッティング や 実験データの
数値微分 に使用できます。
コンピュータ支援設計 および コンピュータ グラフィックス では 、スプライン関数は、制御点のセットを持つ B スプラインの線形結合として構築されます。
導入
ジェラルド・ファリンによれば、Bスプラインは19世紀初頭に ロシアの カザン大学 の ニコライ・ロバチェフスキーによって研究された。 [1] 「Bスプライン」という用語 は、1978年に アイザック・ヤコブ・シェーンベルク [2] によって造られ、基底スプライン の 略語である。 [3]
次数のスプライン関数は、 次数の 区分多項式 関数である 。断片が交わる場所は結び目として知られている。スプライン関数の主な特性は、結び目の多重度に応じて、スプライン関数とその導関数が連続する可能性があることである。
ん
{\displaystyle n}
ん
−
1
{\displaystyle n-1}
次数Bスプラインは、 同じノット上で定義された同じ次数のスプライン関数の 基底関数 であり、すべての可能なスプライン関数はBスプラインの 線形結合 から構築でき、各スプライン関数には一意の組み合わせが1つだけ存在することを意味します。 [4]
ん
{\displaystyle n}
意味
ノットベクトル(0, 0, 0, 1, 2, 3, 3, 3)と制御点(0, 0, 1, 0, 0)を持つ基数2次Bスプラインとその1次導関数
ノットベクトル(−2、−2、−2、−2、−1、0、1、2、2、2、2)と制御点(0、0、0、6、0、0、0)を持つカーディナル3次Bスプラインとその1次導関数
ノットベクトル (0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 5, 5, 5, 5) と制御点 (0, 0, 0, 0, 1, 0, 0, 0, 0) を持つ基数 4 次 B スプライン、およびその 1 次導関数と 2 次導関数
次数の B スプラインは、 変数 の 次 数の区分 多項式 関数 の集合です。 多項式の断片が交わる場所 の値は結び目と呼ばれ、 非減少順に表示され、並べ替えられます。
p
+
1
{\displaystyle p+1}
B
私
、
p
(
t
)
{\displaystyle B_{i,p}(t)}
p
{\displaystyle p}
t
{\displaystyle t}
t
{\displaystyle t}
t
0
、
t
1
、
t
2
、
…
、
t
メートル
{\displaystyle t_{0},t_{1},t_{2},\ldots ,t_{m}}
与えられたノットのシーケンスに対して、スケーリング係数を除けば、以下 を満たす
唯一のスプラインが存在する。
B
私
、
p
(
t
)
{\displaystyle B_{i,p}(t)}
B
私
、
p
(
t
)
=
{
ゼロ以外
もし
t
私
≤
t
<
t
私
+
p
+
1
、
0
さもないと
。
{\displaystyle B_{i,p}(t)={\begin{cases}{\text{非ゼロ}}&{\text{if }}t_{i}\leq t<t_{i+p+1},\\0&{\text{それ以外}}.\end{cases}}}
追加の制約を加えると
∑
私
=
0
メートル
−
p
−
1
B
私
、
p
(
t
)
=
1
{\displaystyle \sum _{i=0}^{mp-1}B_{i,p}(t)=1}
結び目 と の間の すべての に対して である 場合、 のスケーリング係数は 固定されます。 と の間( と を含まない)の結び目は 内部結び目
と呼ばれます。
t
{\displaystyle t}
t
p
{\displaystyle t_{p}}
t
メートル
−
p
{\displaystyle t_{mp}}
B
私
、
p
(
t
)
{\displaystyle B_{i,p}(t)}
t
p
{\displaystyle t_{p}}
t
メートル
−
p
{\displaystyle t_{mp}}
B スプラインは、Cox-de Boor 再帰式によって構築できます。次数の B スプライン 、つまり区分的に定数の多項式から始めます。
p
=
0
{\displaystyle p=0}
B
私
、
0
(
t
)
:=
{
1
もし
t
私
≤
t
<
t
私
+
1
、
0
さもないと
。
{\displaystyle B_{i,0}(t):={\begin{cases}1&{\text{if }}t_{i}\leq t<t_{i+1},\\0&{\text{otherwise}}.\end{cases}}}
高次の Bスプラインは再帰によって定義される
(
p
+
1
)
{\displaystyle (p+1)}
B
i
,
p
(
t
)
:=
t
−
t
i
t
i
+
p
−
t
i
B
i
,
p
−
1
(
t
)
+
t
i
+
p
+
1
−
t
t
i
+
p
+
1
−
t
i
+
1
B
i
+
1
,
p
−
1
(
t
)
.
{\displaystyle B_{i,p}(t):={\dfrac {t-t_{i}}{t_{i+p}-t_{i}}}B_{i,p-1}(t)+{\dfrac {t_{i+p+1}-t}{t_{i+p+1}-t_{i+1}}}B_{i+1,p-1}(t).}
プロパティ
Bスプライン関数は、制御点と呼ばれる多数の点によって制御される柔軟なバンドの組み合わせであり、滑らかな曲線を作成します。これらの関数は、多数の点を使用して複雑な形状や表面を作成および管理するために使用されます。Bスプライン関数とベジェ関数は、形状最適化手法に広く適用されています。 [5]
次数の B スプラインは、 変数 の 次数 の区分多項式関数です 。これは 、ノットまたはブレークポイントと呼ばれる 場所で定義され、降順 ではない順序でなければなりません 。B スプラインは、これらのノットの最初と最後の間の範囲でのみ寄与し、それ以外の場所ではゼロになります。各ノットが前のノットから同じ距離 ( ) だけ離れている場合、ノット ベクトルとそれに対応する B スプラインは「均一」と呼ばれます (以下のカーディナル B スプラインを参照)。
n
{\displaystyle n}
n
−
1
{\displaystyle n-1}
x
{\displaystyle x}
1
+
n
{\displaystyle 1+n}
t
j
{\displaystyle t_{j}}
t
j
≤
t
j
+
1
{\displaystyle t_{j}\leq t_{j+1}}
h
{\displaystyle h}
h
=
t
j
+
1
−
t
j
{\displaystyle h=t_{j+1}-t_{j}}
がゼロでない有限のノット区間ごとに、B スプラインは次数 の多項式です 。B スプラインは ノットで 連続関数です。 [注 1] B スプラインに属するすべてのノットが別個である場合、その導関数も次数 の導関数まで連続しています 。ノットが の特定の値で一致する場合 、導関数の次数の連続性は、一致するノットが増えるごとに 1 ずつ減ります。B スプラインはノットのサブセットを共有することがありますが、まったく同じノットで定義された 2 つの B スプラインは同一です。言い換えると、B スプラインはそのノットによって一意に定義されます。
n
−
1
{\displaystyle n-1}
n
−
2
{\displaystyle n-2}
x
{\displaystyle x}
内部ノットと端点は区別されます。内部ノットは、 関心のあるドメインをカバーします。単一の B スプラインがすでに ノットにまたがっているため、内部ノットの間隔に影響する最初と最後の B スプラインを完全にサポートするには、各側に端点を持つように内部ノットを拡張する必要があります 。端点の値は重要ではなく、通常は最初または最後の内部ノットが繰り返されるだけです。
x
{\displaystyle x}
1
+
n
{\displaystyle 1+n}
n
−
1
{\displaystyle n-1}
B スプラインの有用性は、与えられたノット セット上の任意のスプライン関数が B スプラインの線形結合として表現できるという
事実にあります。
n
{\displaystyle n}
S
n
,
t
(
x
)
=
∑
i
α
i
B
i
,
n
(
x
)
.
{\displaystyle S_{n,\mathbf {t} }(x)=\sum _{i}\alpha _{i}B_{i,n}(x).}
Bスプラインはスプライン関数空間の基底関数 の役割を果たす ため、その名前が付けられています。この特性は、すべてのピースが、それぞれのサポート範囲内で、ノットにおいて同じ連続性特性を持つという事実から生じます。 [6]
多項式部分の表現はコックス・ド・ブール再帰公式[7] によって導出できる。
B
i
,
0
(
x
)
:=
{
1
if
t
i
≤
x
<
t
i
+
1
,
0
otherwise
.
{\displaystyle B_{i,0}(x):={\begin{cases}1&{\text{if }}t_{i}\leq x<t_{i+1},\\0&{\text{otherwise}}.\end{cases}}}
B
i
,
k
(
x
)
:=
x
−
t
i
t
i
+
k
−
t
i
B
i
,
k
−
1
(
x
)
+
t
i
+
k
+
1
−
x
t
i
+
k
+
1
−
t
i
+
1
B
i
+
1
,
k
−
1
(
x
)
.
{\displaystyle B_{i,k}(x):={\frac {x-t_{i}}{t_{i+k}-t_{i}}}B_{i,k-1}(x)+{\frac {t_{i+k+1}-x}{t_{i+k+1}-t_{i+1}}}B_{i+1,k-1}(x).}
つまり、 は区分定数 1 または 0 で、どのノット スパン x が属しているかを示します (ノット スパン j が繰り返される場合は 0)。再帰方程式は 2 つの部分から構成されます。
B
j
,
0
(
x
)
{\displaystyle B_{j,0}(x)}
x
−
t
i
t
i
+
k
−
t
i
{\displaystyle {\frac {x-t_{i}}{t_{i+k}-t_{i}}}}
x が から に変化する と、 は 0 から 1 に変化し 、
t
i
{\displaystyle t_{i}}
t
i
+
k
{\displaystyle t_{i+k}}
t
i
+
k
+
1
−
x
t
i
+
k
+
1
−
t
i
+
1
{\displaystyle {\frac {t_{i+k+1}-x}{t_{i+k+1}-t_{i+1}}}}
は、 x が から に変化する とき、1 から 0 に傾斜します 。対応する B は、それぞれの範囲外では 0 です。たとえば、 は、 未満では 0 である 三角関数 であり 、 で 1 に傾斜し 、 を超えると 0 に戻ります 。ただし、B スプライン基底関数は のローカル サポートを持つため、B スプラインは通常、 de Boor のアルゴリズム など、基底関数が 0 である場所で基底関数を評価する必要のないアルゴリズムによって計算されます 。
t
i
+
1
{\displaystyle t_{i+1}}
t
i
+
k
+
1
{\displaystyle t_{i+k+1}}
B
i
,
1
(
x
)
{\displaystyle B_{i,1}(x)}
x
=
t
i
{\displaystyle x=t_{i}}
x
=
t
i
+
1
{\displaystyle x=t_{i+1}}
x
=
t
i
+
2
{\displaystyle x=t_{i+2}}
この関係は、 FORTRAN でコード化されたアルゴリズムBSPLVに直接つながり 、 x における n 次のBスプラインの値を生成します。 [8] 次の図は、 n次の各部分が、その左側にある n − 1
次のBスプライン部分の線形結合であることを示しています。
0
0
0
B
i
−
2
,
2
B
i
−
1
,
1
B
i
,
0
B
i
−
1
,
2
B
i
,
1
0
B
i
,
2
0
0
{\displaystyle {\begin{matrix}&&0\\&0&\\0&&B_{i-2,2}\\&B_{i-1,1}&\\B_{i,0}&&B_{i-1,2}\\&B_{i,1}&\\0&&B_{i,2}\\&0&\\&&0\end{matrix}}}
の結び目を持つ再帰式を適用すると、 3次の一様Bスプラインの断片が得られる。
(
0
,
1
,
2
,
3
)
{\displaystyle (0,1,2,3)}
B
1
=
x
2
/
2
,
0
≤
x
<
1
,
B
2
=
(
−
2
x
2
+
6
x
−
3
)
/
2
,
1
≤
x
<
2
,
B
3
=
(
3
−
x
)
2
/
2
,
2
≤
x
<
3.
{\displaystyle {\begin{aligned}B_{1}&=x^{2}/2,&0&\leq x<1,\\B_{2}&=(-2x^{2}+6x-3)/2,&1&\leq x<2,\\B_{3}&=(3-x)^{2}/2,&2&\leq x<3.\end{aligned}}}
これらの部分は図に示されています。2次スプライン関数の連続性とその内部ノットにおける1次導関数は次のように示されています。
At
x
=
1
:
B
1
=
B
2
=
0.5
,
d
B
1
d
x
=
d
B
2
d
x
=
1.
At
x
=
2
:
B
2
=
B
3
=
0.5
,
d
B
2
d
x
=
d
B
3
d
x
=
−
1.
{\displaystyle {\begin{aligned}&{\text{At }}x=1\colon \ B_{1}=B_{2}=0.5,\ {\frac {dB_{1}}{dx}}={\frac {dB_{2}}{dx}}=1.\\[6pt]&{\text{At }}x=2\colon \ B_{2}=B_{3}=0.5,\ {\frac {dB_{2}}{dx}}={\frac {dB_{3}}{dx}}=-1.\end{aligned}}}
2次Bスプラインの2次導関数は節点で不連続です。
d
2
B
1
d
x
2
=
1
,
d
2
B
2
d
x
2
=
−
2
,
d
2
B
3
d
x
2
=
1.
{\displaystyle {\frac {d^{2}B_{1}}{dx^{2}}}=1,\ {\frac {d^{2}B_{2}}{dx^{2}}}=-2,\ {\frac {d^{2}B_{3}}{dx^{2}}}=1.}
de Boorアルゴリズムのより高速な変種も提案されているが、安定性が比較的低いという問題がある。 [9] [10]
カーディナルBスプライン
カーディナルBスプラインは、ノット間の間隔 h が一定です。与えられた次数 n のカーディナルBスプラインは、単に互いのシフトされたコピーです。これらは、より単純な定義から得ることができます。 [11]
B
i
,
n
,
t
(
x
)
=
x
−
t
i
h
n
[
0
,
…
,
n
]
(
⋅
−
t
i
)
+
n
−
1
.
{\displaystyle B_{i,n,t}(x)={\frac {x-t_{i}}{h}}n[0,\dots ,n](\cdot -t_{i})_{+}^{n-1}.}
「プレースホルダー」表記は、 2 つの変数 t と x の関数の n 乗 の差を、 x を固定して t のみの関数として 考えること によって求めることを示すために使用されます 。
(
t
−
x
)
+
n
−
1
{\displaystyle (t-x)_{+}^{n-1}}
(
t
−
x
)
+
n
−
1
{\displaystyle (t-x)_{+}^{n-1}}
カーディナル B スプラインには均一間隔のノットがあるため、ノット間の補間はスムージング カーネルによる畳み込みと等しくなります。
例えば、Bスプラインノード()の間に3つの値を補間したい場合 、信号は次のように記述できます。
b
{\displaystyle {\textbf {b}}}
x
=
[
b
1
,
0
,
0
,
b
2
,
0
,
0
,
b
3
,
0
,
0
,
…
,
b
n
,
0
,
0
]
.
{\displaystyle \mathbf {x} =[\mathbf {b} _{1},0,0,\mathbf {b} _{2},0,0,\mathbf {b} _{3},0,0,\dots ,\mathbf {b} _{n},0,0].}
信号を 矩形関数で畳み込むと 、1 次補間された B スプライン値が得られます。2 次 B スプライン補間は、矩形関数を 2 回畳み込むことで 、矩形関数による反復フィルタリングによって、より高次の補間が得られます。
x
{\displaystyle \mathbf {x} }
h
=
[
1
/
3
,
1
/
3
,
1
/
3
]
{\displaystyle \mathbf {h} =[1/3,1/3,1/3]}
y
=
x
∗
h
∗
h
{\displaystyle \mathbf {y} =\mathbf {x} *\mathbf {h} *\mathbf {h} }
均一なサンプル領域での高速 B スプライン補間は、反復平均フィルタリングによって実行できます。あるいは、長方形関数は フーリエ領域 で sincに等しくなります。したがって、3 次スプライン補間は、フーリエ領域で信号に sinc 4 を乗算することと等しくなります 。
アーウィン・ホール分布# 1~4次のカーディナルBスプラインの代数式の
特殊なケース を参照してください。
Pスプライン
Pスプラインという用語は「ペナルティ付きBスプライン」の略です。これは、係数が フィッティング されるデータによって部分的に決定され、 過剰適合を 避けるために 滑らかさを 課すことを目的とした追加の ペナルティ関数 によって部分的に決定されるBスプライン表現を使用することを指します。 [12]
2次元および多次元のPスプライン近似データでは、行列の 面分割積を 使用して計算操作を最小化することができます。 [13]
微分表現
k 次のBスプラインの微分は、 k − 1次のBスプラインの関数である 。 [14]
d
B
i
,
k
(
x
)
d
x
=
k
(
B
i
,
k
−
1
(
x
)
t
i
+
k
−
t
i
−
B
i
+
1
,
k
−
1
(
x
)
t
i
+
k
+
1
−
t
i
+
1
)
.
{\displaystyle {\frac {dB_{i,k}(x)}{dx}}=k\left({\frac {B_{i,k-1}(x)}{t_{i+k}-t_{i}}}-{\frac {B_{i+1,k-1}(x)}{t_{i+k+1}-t_{i+1}}}\right).}
これは、
d
d
x
∑
i
α
i
B
i
,
k
=
∑
i
=
r
−
k
+
2
s
−
1
k
α
i
−
α
i
−
1
t
i
+
k
−
t
i
B
i
,
k
−
1
on
[
t
r
,
t
s
]
,
{\displaystyle {\frac {d}{dx}}\sum _{i}\alpha _{i}B_{i,k}=\sum _{i=r-k+2}^{s-1}k{\frac {\alpha _{i}-\alpha _{i-1}}{t_{i+k}-t_{i}}}B_{i,k-1}\quad {\text{on}}\quad [t_{r},t_{s}],}
これは、スプライン関数の導関数と次数が 1 少ない B スプラインの間に単純な関係があることを示しています。
一変量Bスプラインのモーメント
一変量Bスプライン、つまりノットの位置が1次元にあるBスプラインは、1次元確率密度関数を表すために使用できます 。例として、それぞれが1に面積正規化された(つまり、標準のde-Boorアルゴリズムを使用して直接評価されない) 次数のBスプライン基底関数の加重和があり ます。
p
(
x
)
{\displaystyle p(x)}
i
{\displaystyle i}
n
{\displaystyle n}
p
(
x
)
=
∑
i
c
i
⋅
B
i
,
n
,
norm
(
x
)
{\displaystyle p(x)=\sum _{i}c_{i}\cdot B_{i,n,{\textbf {norm}}}(x)}
正規化定数制約 で表されます 。 正規化されたBスプラインの k 番目の生のモーメントは 、カールソンのディリクレ平均 として表すことができ 、 [15]これは、輪郭積分と反復和 [16] を介して次のよう
に正確に解くことができます。
∑
i
c
i
=
1
{\displaystyle \sum _{i}c_{i}=1}
μ
k
{\displaystyle \mu _{k}}
B
i
,
n
,
norm
{\displaystyle B_{i,n,{\textbf {norm}}}}
R
k
{\displaystyle R_{k}}
μ
k
=
R
k
(
m
;
t
)
=
∫
−
∞
∞
x
k
⋅
B
i
,
n
,
norm
(
x
∣
t
1
…
t
j
)
d
x
=
Γ
(
k
+
1
)
Γ
(
m
)
Γ
(
m
+
k
)
⋅
D
k
(
m
,
t
)
{\displaystyle \mu _{k}=R_{k}(\mathbf {m} ;\mathbf {t} )=\int _{-\infty }^{\infty }x^{k}\cdot B_{i,n,{\textbf {norm}}}(x\mid t_{1}\dots t_{j})\,dx={\frac {\Gamma (k+1)\Gamma (m)}{\Gamma (m+k)}}\cdot D_{k}(\mathbf {m} ,\mathbf {t} )}
と
D
k
=
1
k
∑
u
=
1
k
[
(
∑
i
=
1
j
m
i
⋅
t
i
u
)
D
k
−
u
]
{\displaystyle D_{k}={\frac {1}{k}}\sum \limits _{u=1}^{k}\left[\left(\sum \limits _{i=1}^{j}m_{i}\cdot {t_{i}}^{u}\right)D_{k-u}\right]}
および 。ここで、 は結び目の位置 を表すベクトル と、 それぞれの結び目の多重度を表すベクトルを表します。したがって、数値手法に頼ることなく、Bスプライン基底関数の和で表される確率密度関数の任意のモーメントを 正確に計算できます。
D
0
=
1
{\displaystyle D_{0}=1}
t
{\displaystyle \mathbf {t} }
j
{\displaystyle j}
m
{\displaystyle \mathbf {m} }
p
(
x
)
{\displaystyle p(x)}
区分的/合成ベジェとの関係
ベジェ 曲線 も、同じクラスのより低次の曲線からの再帰を使用して定義可能で、制御点に関してエンコードされた多項式曲線ですが、重要な違いは、ベジェ曲線セグメントの再帰のすべての項は同じ定義域 (通常は ) を持つのに対し、 B スプライン再帰の 2 つの項の サポートは 異なります (最も外側のサブ間隔は共通ではありません)。つまり、 制御点 によって与えられる次数のベジェ曲線は 、ほぼ独立したセグメントで構成されますが、同じパラメータを持つ B スプラインはサブ間隔からサブ間隔に滑らかに移行します。ベジェ曲線から同等のものを得るには、セグメント間の移行に滑らかさの条件を課す必要があり、その結果、何らかのベジェ スプラインが生成されます (その場合、多くの制御点は滑らかさの要件によって決まります)。
[
0
,
1
]
{\displaystyle [0,1]}
n
{\displaystyle n}
m
≫
n
{\displaystyle m\gg n}
m
/
n
{\displaystyle m/n}
区分 的/合成ベジェ曲線 は、少なくとも C0 連続性 (1 つの曲線の最後の点が次の曲線の開始点と一致する)で結合された一連のベジェ曲線です。アプリケーションに応じて、追加の滑らかさの要件(C1 または C2 連続性など)が追加される場合があります。 [17] C1 連続曲線は、ブレークポイント(2 つの曲線が出会う場所)で同一の接線を持ちます。C2 連続曲線は、ブレークポイントで同一の曲率を持ちます。 [18]
曲線フィッティング
通常、 曲線フィッティング では、データポイントの集合を何らかの数学関数で定義された曲線にフィッティングします。たとえば、一般的なタイプの曲線フィッティングでは、多項式または 指数関数のセットを使用します。フィッティング関数を選択するための理論的根拠がない場合は、 最小二乗 法を使用して、Bスプラインの合計で構成されるスプライン関数で曲線をフィッティングすることができます 。 [19] [注2] したがって、最小二乗最小化の 目的関数は、次数 k のスプライン関数の場合 、
U
=
∑
all
x
{
W
(
x
)
[
y
(
x
)
−
∑
i
α
i
B
i
,
k
,
t
(
x
)
]
}
2
,
{\displaystyle U=\sum _{{\text{all}}~x}\left\{W(x)\left[y(x)-\sum _{i}\alpha _{i}B_{i,k,t}(x)\right]\right\}^{2},}
ここで、 W ( x ) は重み、 y ( x ) は x におけるデータ値です 。係数は 決定するパラメータです。ノット値は固定することも、パラメータとして扱うこともできます。
α
i
{\displaystyle \alpha _{i}}
このプロセスを適用する際の主な難しさは、使用するノットの数と配置場所を決定することです。de Boor は、この問題に対処するためのさまざまな戦略を提案しています。たとえば、ノット間の間隔は、データの曲率 (2 次導関数) に比例して減少します。 [ 要出典 ] いくつかのアプリケーションが公開されています。たとえば、単一の ローレンツ曲線 と ガウス 曲線をフィッティングするための B スプラインの使用が調査されています。5、6、7 ノットの対称配置に基づく 3~7 次までの最適なスプライン関数が計算され、この方法が分光曲線の平滑化と微分化に適用されました。 [20] 同様の研究では、2 次元バージョンの Savitzky–Golay フィルタリング とスプライン法は、 移動平均 または チェビシェフ フィルタリング よりも優れた結果を生み出しました。 [21]
コンピュータ支援設計とコンピュータグラフィックス
コンピュータ支援設計 や コンピュータ グラフィックス アプリケーションでは 、スプライン曲線は 、ある実パラメータ のパラメトリック曲線として表されることがあります 。この場合、曲線は2 つまたは 3 つの別個の座標関数 、または として扱うことができます 。座標関数 、 および は、 それぞれスプライン関数であり、共通のノット値のセット を持ちます 。
C
(
t
)
{\displaystyle C(t)}
t
{\displaystyle t}
C
(
t
)
{\displaystyle C(t)}
(
x
(
t
)
,
y
(
t
)
)
{\displaystyle (x(t),y(t))}
(
x
(
t
)
,
y
(
t
)
,
z
(
t
)
)
{\displaystyle (x(t),y(t),z(t))}
x
(
t
)
{\displaystyle x(t)}
y
(
t
)
{\displaystyle y(t)}
z
(
t
)
{\displaystyle z(t)}
t
1
,
t
2
,
…
,
t
n
{\displaystyle t_{1},t_{2},\ldots ,t_{n}}
Bスプラインは基底関数を形成するため、各座標関数はBスプラインの線形和として表すことができるため、
X
(
t
)
=
∑
i
x
i
B
i
,
n
(
t
)
,
Y
(
t
)
=
∑
i
y
i
B
i
,
n
(
t
)
,
Z
(
t
)
=
∑
i
z
i
B
i
,
n
(
t
)
.
{\displaystyle {\begin{aligned}X(t)&=\sum _{i}x_{i}B_{i,n}(t),\\Y(t)&=\sum _{i}y_{i}B_{i,n}(t),\\Z(t)&=\sum _{i}z_{i}B_{i,n}(t).\end{aligned}}}
重み 、 および を組み合わせて 3 次元空間に点を形成できます。これらの点は 一般に制御点と呼ばれます。
x
i
{\displaystyle x_{i}}
y
i
{\displaystyle y_{i}}
z
i
{\displaystyle z_{i}}
P
i
=
(
x
i
,
y
i
,
z
i
)
{\displaystyle P_{i}=(x_{i},y_{i},z_{i})}
P
i
{\displaystyle P_{i}}
逆に、制御点のシーケンス、ノット値、および B スプラインの順序によってパラメトリック曲線が定義されます。制御点による曲線の表現には、いくつかの便利なプロパティがあります。
制御点は 曲線を定義します。制御点がすべて何らかの方法で一緒に変換された場合 (たとえば、平行移動、回転、拡大縮小、アフィン変換による移動など)、対応する曲線も同様に変換されます。
P
i
{\displaystyle P_{i}}
B スプラインは有限数のノット間隔に対してのみゼロではないため、単一の制御点を移動した場合、パラメトリック曲線への対応する変更は、少数のノット間隔のパラメータ範囲をわずかに超える程度になります。
であり、常に各 で あるため 、曲線は制御点の境界ボックスの内側に残ります。また、ある意味では、曲線は制御点に大まかに従います。
∑
i
B
i
,
n
(
x
)
=
1
{\displaystyle \sum _{i}B_{i,n}(x)=1}
B
i
,
n
(
x
)
≥
0
{\displaystyle B_{i,n}(x)\geq 0}
あまり望ましくない特徴は、パラメトリック曲線が制御点を補間しないことです。通常、曲線は制御点を通過しません。
3次Bスプライン
正規化されたパラメータを持つ 3次Bスプライン曲線は 、4つのノード( 制御点 ) 、、、 および によって定義されます 。これは、次のように表される3次多項式を形成します。
C
(
t
)
{\displaystyle \mathbf {C} (t)}
t
∈
[
0
,
1
]
{\displaystyle t\in [0,1]}
b
0
{\displaystyle {\textbf {b}}_{0}}
b
1
{\displaystyle {\textbf {b}}_{1}}
b
2
{\displaystyle {\textbf {b}}_{2}}
b
3
{\displaystyle {\textbf {b}}_{3}}
C
(
t
)
=
1
6
[
t
3
t
2
t
1
]
[
−
1
3
−
3
1
3
−
6
3
0
−
3
0
3
0
1
4
1
0
]
[
b
0
b
1
b
2
b
3
]
{\displaystyle \mathbf {C} (t)={\frac {1}{6}}\;{\begin{bmatrix}t^{3}&t^{2}&t&1\end{bmatrix}}{\begin{bmatrix}-1&3&-3&1\\3&-6&3&0\\-3&0&3&0\\1&4&1&0\end{bmatrix}}{\begin{bmatrix}\mathbf {b} _{0}\\\mathbf {b} _{1}\\\mathbf {b} _{2}\\\mathbf {b} _{3}\end{bmatrix}}}
。
これはBスプライン多項式に対応する。
B
0
(
t
)
=
1
6
(
−
t
3
+
3
t
2
−
3
t
+
1
)
B
1
(
t
)
=
1
6
(
3
t
3
−
6
t
2
+
4
)
B
2
(
t
)
=
1
6
(
−
3
t
3
+
3
t
2
+
3
t
+
1
)
B
3
(
t
)
=
1
6
t
3
{\displaystyle {\begin{aligned}B_{0}(t)&={\frac {1}{6}}(-t^{3}+3t^{2}-3t+1)\\B_{1}(t)&={\frac {1}{6}}(3t^{3}-6t^{2}+4)\\B_{2}(t)&={\frac {1}{6}}(-3t^{3}+3t^{2}+3t+1)\\B_{3}(t)&={\frac {1}{6}}t^{3}\end{aligned}}}
そして曲線は と評価できる 。これを展開すると、以下のように完全な多項式を書くことができる。
C
(
t
)
=
∑
i
=
0
3
B
i
(
t
)
b
i
{\displaystyle \mathbf {C} (t)=\sum _{i=0}^{3}B_{i}(t)\,\mathbf {b} _{i}}
C
(
t
)
=
1
6
(
(
−
b
0
+
3
b
1
−
3
b
2
+
b
3
)
t
3
+
(
3
b
0
−
6
b
1
+
3
b
2
)
t
2
+
(
−
3
b
0
+
3
b
2
)
t
+
(
b
0
+
4
b
1
+
b
2
)
)
{\displaystyle \mathbf {C} (t)={\frac {1}{6}}{\biggl (}(-\mathbf {b} _{0}+3\mathbf {b} _{1}-3\mathbf {b} _{2}+\mathbf {b} _{3})t^{3}+(3\mathbf {b} _{0}-6\mathbf {b} _{1}+3\mathbf {b} _{2})t^{2}+(-3\mathbf {b} _{0}+3\mathbf {b} _{2})t+(\mathbf {b} _{0}+4\mathbf {b} _{1}+\mathbf {b} _{2}){\biggr )}}
。
これは3次多項式なので、 制御点 、 、 、 を持つ3次 ベジェ曲線 として書くこともできます。
P
0
{\displaystyle {\textbf {P}}_{0}}
P
1
{\displaystyle {\textbf {P}}_{1}}
P
2
{\displaystyle {\textbf {P}}_{2}}
P
3
{\displaystyle {\textbf {P}}_{3}}
P
0
=
1
6
(
b
0
+
4
b
1
+
b
2
)
,
P
1
=
1
3
(
2
b
1
+
b
2
)
,
P
2
=
1
3
(
b
1
+
2
b
2
)
,
P
3
=
1
6
(
b
1
+
4
b
2
+
b
3
)
.
{\displaystyle {\begin{aligned}\mathbf {P} _{0}&={\frac {1}{6}}(\mathbf {b} _{0}+4\mathbf {b} _{1}+\mathbf {b} _{2}),\\\mathbf {P} _{1}&={\frac {1}{3}}(2\mathbf {b} _{1}+\mathbf {b} _{2}),\\\mathbf {P} _{2}&={\frac {1}{3}}(\mathbf {b} _{1}+2\mathbf {b} _{2}),\\\mathbf {P} _{3}&={\frac {1}{6}}(\mathbf {b} _{1}+4\mathbf {b} _{2}+\mathbf {b} _{3}).\end{aligned}}}
区分的 3 次 B スプラインはノードのセットによって形成され、連続する 4 つのノードはそれぞれ上記の定式化に従って曲線の 3 次部分を定義します。
ナーブス
NURBS 曲線 - 同次座標で定義された多項式曲線 (青) と平面への投影 - 有理曲線 (赤)
コンピュータ支援設計 、 コンピュータ支援製造 、および コンピュータ グラフィックス において 、B スプラインの強力な拡張として非一様有理 B スプライン (NURBS) があります。NURBS は基本的に 同次座標 の B スプラインです。B スプラインと同様に、順序、ノット ベクトル、および制御点のセットによって定義されますが、単純な B スプラインとは異なり、制御点にはそれぞれ重みがあります。重みが 1 の場合、NURBS は単なる B スプラインであり、そのため NURBS は B スプラインと ベジェ曲線 およびベジェ曲面の両方を一般化します。主な違いは、NURBS 曲線を「有理」にする制御点の重み付けです。
さまざまなパラメータ値で NURBS を評価することで、空間内で曲線をトレースできます。同様に、2 つのパラメータのさまざまな値で NURBS サーフェスを評価することで、サーフェスを直交空間で表現できます。
B スプラインと同様に、NURBS 制御点によって曲線の形状が決まります。曲線の各点は、多数の制御点の加重合計によって計算されます。各点の重みは、支配パラメータに応じて変化します。次数 d の曲線の場合、制御点の影響は、パラメータ空間の d +1 区間 (ノット スパン) 内でのみ非ゼロになります。これらの区間内では、重みは次数 d の多項式関数 (基底関数) に応じて変化します 。区間の境界では、基底関数は滑らかにゼロになり、その滑らかさは多項式の次数によって決まります。
ノット ベクトルは、制御点が NURBS 曲線にどこでどのように影響するかを決定する一連のパラメータ値です。ノットの数は、常に制御点の数と曲線の次数に 1 を加えた数に等しくなります。パラメータ値が新しいノット スパンに入るたびに、新しい制御点がアクティブになり、古い制御点は破棄されます。
NURBS曲線は次の形式をとる: [22]
C
(
u
)
=
∑
i
=
1
k
N
i
,
n
(
u
)
w
i
P
i
∑
i
=
1
k
N
i
,
n
(
u
)
w
i
{\displaystyle C(u)={\frac {\sum _{i=1}^{k}N_{i,n}(u)w_{i}P_{i}}{\sum _{i=1}^{k}N_{i,n}(u)w_{i}}}}
ここでの表記は次のようになります。 u は独立変数( x の代わりに)、 k は制御点の数、 N は B スプライン( B の代わりに使用)、 n は多項式の次数、 P は制御点、 w は重みです。 分母は、すべての重みが 1 の場合に 1 と評価される正規化係数です。
これを次のように書くのが通例である。
C
(
u
)
=
∑
i
=
1
k
R
i
,
n
(
u
)
P
i
{\displaystyle C(u)=\sum _{i=1}^{k}R_{i,n}(u)P_{i}}
関数
R
i
,
n
(
u
)
=
N
i
,
n
(
u
)
w
i
∑
j
=
1
k
N
j
,
n
(
u
)
w
j
{\displaystyle R_{i,n}(u)={\frac {N_{i,n}(u)w_{i}}{\sum _{j=1}^{k}N_{j,n}(u)w_{j}}}}
有理基底関数として知られています。
NURBS曲面は、 2つのNURBS曲線の テンソル積 として得られる。つまり、2つの独立したパラメータ u と v (それぞれインデックス i と j )を使用する。 [23]
S
(
u
,
v
)
=
∑
i
=
1
k
∑
j
=
1
ℓ
R
i
,
j
(
u
,
v
)
P
i
,
j
{\displaystyle S(u,v)=\sum _{i=1}^{k}\sum _{j=1}^{\ell }R_{i,j}(u,v)P_{i,j}}
と
R
i
,
j
(
u
,
v
)
=
N
i
,
n
(
u
)
N
j
,
m
(
v
)
w
i
,
j
∑
p
=
1
k
∑
q
=
1
ℓ
N
p
,
n
(
u
)
N
q
,
m
(
v
)
w
p
,
q
{\displaystyle R_{i,j}(u,v)={\frac {N_{i,n}(u)N_{j,m}(v)w_{i,j}}{\sum _{p=1}^{k}\sum _{q=1}^{\ell }N_{p,n}(u)N_{q,m}(v)w_{p,q}}}}
有理基底関数として。
参照
注記
^ 厳密に言えば、B スプラインは通常、左連続であると定義されます。
^ de Boor は、実験データの最小二乗フィッティングのための FORTRAN ルーチンを提供します。
参考文献
^ Farin, GE (2002). CAGD のための曲線と曲面: 実用ガイド . Morgan Kaufmann. p. 119.
^ de Boor、114ページ。
^ Gary D. Knott (2000)、 3次スプラインの補間 。Springer。p.151。
^ ハルトムート・プラウチュ;ヴォルフガング・ベーム。マルコ・パルシュニー (2002)。 ベジェおよび B スプライン手法 。数学と視覚化。ベルリン、ハイデルベルク: Springer Science & Business Media。 p. 63. 土井 :10.1007/978-3-662-04919-8。 ISBN 978-3-540-43761-1 . OCLC 851370272.
^ Talebitooti, R.; Shojaeefard, MH; Yarmohammadisatri, Sadegh (2015). 「Bスプライン曲線を使用した円筒形タンクの形状設計最適化」。Computer & Fluids . 109 : 100–112. doi :10.1016/j.compfluid.2014.12.004.
^ de Boor、113ページ。
^ de Boor、131ページ。
^ de Boor、134ページ。
^ Lee, ETY (1982 年 12 月). 「簡略化された B スプライン計算ルーチン」. コンピューティング . 29 (4): 365–371. doi :10.1007/BF02246763. S2CID 2407104.
^ Lee, ETY (1986). 「いくつかのBスプラインアルゴリズムに関するコメント」. コンピューティング . 36 (3): 229–238. doi :10.1007/BF02240069. S2CID 7003455.
^ de Boor、322ページ。
^ Eilers, PHCおよびMarx, BD (1996). Bスプラインとペナルティによる柔軟なスムージング(コメントと反論付き). 統計科学11(2):89–121.
^ Eilers, Paul HC; Marx, Brian D. (2003). 「2次元ペナルティ付き信号回帰を用いた温度相互作用による多変量較正」. ケモメトリクスおよびインテリジェント実験システム . 66 (2): 159–174. doi :10.1016/S0169-7439(03)00029-7.
^ de Boor、115ページ。
^ Carlson, BC (1991). 「Bスプライン、超幾何関数、ディリクレ平均」 近似理論ジャーナル . 67 (3): 311–325. doi : 10.1016/0021-9045(91)90006-V .
^ Glüsenkamp, T. (2018). 「重み付けモンテカルロデータの有限サイズによる不確実性の確率的処理」. EPJ Plus . 133 (6): 218. arXiv : 1712.01293 . Bibcode :2018EPJP..133..218G. doi :10.1140/epjp/i2018-12042-x. S2CID 125665629. )
^ Eugene V. Shikin、Alexander I. Plis (1995 年 7 月 14 日)。ユーザーのためのスプラインハンドブック。CRC Press。pp. 96– 。ISBN 978-0-8493-9404-1 。
^ Wernecke, Josie (1993). "8". The Inventor Mentor: Open Inventor リリース 2 によるオブジェクト指向 3D グラフィックスのプログラミング (第 1 版)。ボストン、マサチューセッツ州、米国: Addison-Wesley Longman Publishing Co., Inc. ISBN 978-0201624953 。
^ デ・ブール、第 XIV 章、p. 235.
^ Gans, Peter; Gill, J. Bernard (1984). 「スプライン関数を用いた分光曲線の平滑化と微分化」. 応用分光法 . 38 (3): 370–376. Bibcode :1984ApSpe..38..370G. doi :10.1366/0003702844555511. S2CID 96229316.
^ Vicsek, Maria; Neal, Sharon L.; Warner, Isiah M. (1986). 「2次元蛍光データの時間領域フィルタリング」. 応用分光法 . 40 (4): 542–548. Bibcode :1986ApSpe..40..542V. doi :10.1366/0003702864508773. S2CID 28705788. 2017年6月23日時点のオリジナルよりアーカイブ。
^ ピゲルとティラー、第4章、第2節
^ ピゲルとティラー、第 4 章、第 4 節
引用文献
カール・デ・ブール (1978)。 スプラインの実践ガイド 。スプリンガー・フェルラーク。 ISBN 978-3-540-90356-7 。
Piegl, Les; Tiller, Wayne (1997). The NURBS Book (第 2 版). Springer. ISBN 978-3-540-61545-3 。
さらに読む
Richard H. Bartels、John C. Beatty、Brian A. Barsky (1987)。コンピュータグラフィックスとジオメトリモデリングで 使用 するスプライン入門 。Morgan Kaufmann。ISBN 978-1-55860-400-1 。
Jean Gallier (1999)。『幾何学モデリングにおける曲線と曲面: 理論とアルゴリズム』。Morgan Kaufmann。第 6 章 B スプライン曲線。 この本は絶版になっており、著者から無料で入手できます。
ハルトムート・プラウチュ;ヴォルフガング・ベーム。マルコ・パルシュニー (2002)。 ベジェおよび B スプライン手法 。シュプリンガーのサイエンス&ビジネスメディア。 ISBN 978-3-540-43761-1 。
David Salomon (2006)。 コンピュータグラフィックスのための曲線と表面 。Springer。第 7 章 B スプライン近似 。ISBN 978-0-387-28452-1 。
Hovey, Chad (2022)。ベジェおよび B スプライン ジオメトリの定式化と Python 実装。SAND2022-7702C。(153 ページ)
外部リンク
Weisstein、Eric W. 「B-スプライン」 。MathWorld 。
Ruf, Johannes。「非均一グリッド上の 3 次 B スプライン」 (PDF) 。2013 年 11 月 6 日に オリジナル (PDF)からアーカイブ。2012 年 5 月 2 日 に取得 。
NumPy からの二変量 B スプライン
JSXGraph を使用したインタラクティブな B スプライン
TinySpline: さまざまな言語にバインディングされたオープンソースの C ライブラリ
均一な非有理 B スプライン、2D 空間での曲線のモデリング。著者: Stefan G. Beck
B-スプライン エディタ by Shukant Pal