数値解析 において、3次エルミートスプライン または3次エルミート補間 は、各部分がエルミート形式 で指定される3次多項式 、つまり対応する区間 の両端の値と1次微分 によって指定されるスプライン である
[ 1]
。
3次エルミートスプラインは、通常、与えられる引数値
x
1
,
x
2
,
…
,
x
n
{\displaystyle x_{1},x_{2},\ldots ,x_{n}}
で指定される数値データを補間 して連続関数 を得るために使用される。
データは、各
x
k
{\displaystyle x_{k}}
についての所望の関数値と微分から構成される必要がある(値のみが与えられている場合、微分はそれから推定する必要がある)。
エルミート補間多項式[ 訳注 1] は各区間
(
x
k
,
x
k
+
1
)
{\displaystyle (x_{k},x_{k+1})}
に個別に適用される。
結果のスプラインは連続、かつ、一次微分連続となる。
3次多項式スプラインは他の方法でも指定でき、ベジェ形式 が最も一般的である。
しかし、これら2つの方法で得られるスプラインセットは同一であり、ベジェ形式とエルミート形式の間でデータの変換も容易であるため、これらの名称はしばしば同義語のように使用される。
3次多項式スプラインは、コンピュータグラフィックス や幾何モデリング (英語 : geometric modeling ) において、平面 または3次元空間 上の指定された点を通過する曲線 や運動軌跡 を得るために広く用いられている。
これらのアプリケーションでは、平面または空間の各座標は、個別のパラメータ t を持つ3次スプライン関数によって個別に補間される。
3次多項式スプラインは、オイラー・ベルヌーイ梁理論 (英語 : Euler–Bernoulli beam theory ) などの構造解析アプリケーションでも広く用いられている。
3次多項式スプラインは、死亡率分析[ 2]
や死亡率予測[ 3]
にも応用されている。
3次スプラインは、いくつかの方法で2つ以上のパラメータを持つ関数に拡張できる。
バイキュービックスプライン(バイキュービック補間 )は、デジタル画像 のピクセル 値や地形の高度 データなど、規則的な矩形グリッド上のデータを補間するためによく使用される。
バイキュービック曲面パッチ
[ 訳注 2]
は、コンピュータグラフィックスにおいて不可欠なツールである。
3次スプラインは、特にコンピュータグラフィックスではしばしばcspline と呼ばれる。エルミートスプラインは、シャルル・エルミート にちなんで名付けられた。
単一区間の補間
単位区間 [0, 1]
4つのエルミート基底関数。各部分区間における補間関数は、これら4つの関数の線形結合である。
単位間隔
[
0
,
1
]
{\displaystyle [0,1]}
について、
t
=
0
{\displaystyle t=0}
における始点
p
0
{\displaystyle {\boldsymbol {p}}_{0}}
、
t
=
1
{\displaystyle t=1}
における終点
p
1
{\displaystyle {\boldsymbol {p}}_{1}}
、および、
t
=
0
{\displaystyle t=0}
における開始接ベクトル
m
0
{\displaystyle {\boldsymbol {m}}_{0}}
、
t
=
1
{\displaystyle t=1}
における終了接ベクトル
m
1
{\displaystyle {\boldsymbol {m}}_{1}}
が与えられると、
多項式は次のように定義される。
p
(
t
)
=
(
2
t
3
−
3
t
2
+
1
)
p
0
+
(
t
3
−
2
t
2
+
t
)
m
0
+
(
−
2
t
3
+
3
t
2
)
p
1
+
(
t
3
−
t
2
)
m
1
{\displaystyle {\boldsymbol {p}}(t)=\left(2t^{3}-3t^{2}+1\right){\boldsymbol {p}}_{0}+\left(t^{3}-2t^{2}+t\right){\boldsymbol {m}}_{0}+\left(-2t^{3}+3t^{2}\right){\boldsymbol {p}}_{1}+\left(t^{3}-t^{2}\right){\boldsymbol {m}}_{1}}
ただし t ∈ [0, 1] である。
任意区間の補間
任意の区間
(
x
k
,
x
k
+
1
)
{\displaystyle (x_{k},x_{k+1})}
内の
x
{\displaystyle x}
での補間は、アフィン (1次)変数変換により区間を
[
0
,
1
]
{\displaystyle [0,1]}
にマッピングすることで行われる。
式は次のようになる。
p
(
x
)
=
h
00
(
t
)
p
k
+
h
10
(
t
)
(
x
k
+
1
−
x
k
)
m
k
+
h
01
(
t
)
p
k
+
1
+
h
11
(
t
)
(
x
k
+
1
−
x
k
)
m
k
+
1
{\displaystyle {\boldsymbol {p}}(x)=h_{00}(t){\boldsymbol {p}}_{k}+h_{10}(t)(x_{k+1}-x_{k}){\boldsymbol {m}}_{k}+h_{01}(t){\boldsymbol {p}}_{k+1}+h_{11}(t)(x_{k+1}-x_{k}){\boldsymbol {m}}_{k+1}}
ただし
t
=
(
x
−
x
k
)
/
(
x
k
+
1
−
x
k
)
{\displaystyle t=(x-x_{k})/(x_{k+1}-x_{k})}
と
h
{\displaystyle h}
は、以下 に定義される基底関数を参照。
なお接ベクトルの長さは、単位区間の方程式に対し
x
k
+
1
−
x
k
{\displaystyle x_{k+1}-x_{k}}
倍にスケーリングされる。
一意性
上記の式は、指定された接ベクトルを持つ2点間の、一意の3次多項式の経路を示す。
証明
P
,
Q
{\displaystyle P,Q}
は、与えられた境界条件を満たす2つの3次多項式とする。
R
=
Q
−
P
{\displaystyle R=Q-P}
とすると、
R
(
0
)
=
Q
(
0
)
−
P
(
0
)
=
0
{\displaystyle R(0)=Q(0)-P(0)=0}
R
(
1
)
=
Q
(
1
)
−
P
(
1
)
=
0
{\displaystyle R(1)=Q(1)-P(1)=0}
である。
Q
{\displaystyle Q}
と
P
{\displaystyle P}
はいずれも3次多項式であるので、
R
{\displaystyle R}
は最大で3次の多項式である。
そのため、
R
{\displaystyle R}
は以下の式でなければならない。
R
(
x
)
=
a
x
(
x
−
1
)
(
x
−
r
)
{\displaystyle R(x)=ax(x-1)(x-r)}
導関数を計算すると、
R
′
(
x
)
=
a
x
(
x
−
1
)
+
a
x
(
x
−
r
)
+
a
(
x
−
1
)
(
x
−
r
)
{\displaystyle R'(x)=ax(x-1)+ax(x-r)+a(x-1)(x-r)}
さらに、以下が明らかである。
R
′
(
0
)
=
Q
′
(
0
)
−
P
′
(
0
)
=
0
,
{\displaystyle R'(0)=Q'(0)-P'(0)=0,}
R
′
(
0
)
=
0
=
a
r
{\displaystyle R'(0)=0=ar}
(1 )
R
′
(
1
)
=
Q
′
(
1
)
−
P
′
(
1
)
=
0
,
{\displaystyle R'(1)=Q'(1)-P'(1)=0,}
R
′
(
1
)
=
0
=
a
(
1
−
r
)
{\displaystyle R'(1)=0=a(1-r)}
(2 )
式 (1 ) と (2 ) を合わせると、
a
=
0
{\displaystyle a=0}
が導かれ、したがって
R
=
0
{\displaystyle R=0}
、よって
P
=
Q
{\displaystyle P=Q}
となる。
表現
単位区間上の補間多項式は次のように書ける(任意区間については、上記 再スケール版を参照)。
p
(
t
)
=
h
00
(
t
)
p
0
+
h
10
(
t
)
m
0
+
h
01
(
t
)
p
1
+
h
11
(
t
)
m
1
{\displaystyle {\boldsymbol {p}}(t)=h_{00}(t){\boldsymbol {p}}_{0}+h_{10}(t){\boldsymbol {m}}_{0}+h_{01}(t){\boldsymbol {p}}_{1}+h_{11}(t){\boldsymbol {m}}_{1}}
ただし
h
00
{\displaystyle h_{00}}
,
h
10
{\displaystyle h_{10}}
,
h
01
{\displaystyle h_{01}}
,
h
11
{\displaystyle h_{11}}
はエルミート基底関数である。
これらは様々な方法で記述することができ、それぞれ異なる性質を示す。
展開
因数分解
バーンスタイン
h
00
(
t
)
{\displaystyle h_{00}(t)}
2
t
3
−
3
t
2
+
1
{\displaystyle 2t^{3}-3t^{2}+1}
(
1
+
2
t
)
(
1
−
t
)
2
{\displaystyle (1+2t)(1-t)^{2}}
B
0
(
t
)
+
B
1
(
t
)
{\displaystyle B_{0}(t)+B_{1}(t)}
h
10
(
t
)
{\displaystyle h_{10}(t)}
t
3
−
2
t
2
+
t
{\displaystyle t^{3}-2t^{2}+t}
t
(
1
−
t
)
2
{\displaystyle t(1-t)^{2}}
1
3
B
1
(
t
)
{\displaystyle {\tfrac {1}{3}}B_{1}(t)}
h
01
(
t
)
{\displaystyle h_{01}(t)}
−
2
t
3
+
3
t
2
{\displaystyle -2t^{3}+3t^{2}}
t
2
(
3
−
2
t
)
{\displaystyle t^{2}(3-2t)}
B
3
(
t
)
+
B
2
(
t
)
{\displaystyle B_{3}(t)+B_{2}(t)}
h
11
(
t
)
{\displaystyle h_{11}(t)}
t
3
−
t
2
{\displaystyle t^{3}-t^{2}}
t
2
(
t
−
1
)
{\displaystyle t^{2}(t-1)}
−
1
3
B
2
(
t
)
{\displaystyle -{\tfrac {1}{3}}B_{2}(t)}
「展開」列は上記の定義で使用された表現を示している。
「因数分解」列は、
h
10
{\displaystyle h_{10}}
と
h
11
{\displaystyle h_{11}}
が端点でゼロであることを直接示している。
さらに、
h
01
{\displaystyle h_{01}}
と
h
11
{\displaystyle h_{11}}
は0で重複度 2の零点を持ち、
h
00
{\displaystyle h_{00}}
と
h
10
{\displaystyle h_{10}}
は1で重複度2の零点を持つため、それら端点で傾きが0になると言える。
「バーンスタイン」列は、エルミート基底関数を3次のバーンスタイン多項式 に分解したものを示しており、
B
k
(
t
)
=
(
3
k
)
⋅
t
k
⋅
(
1
−
t
)
3
−
k
{\displaystyle B_{k}(t)={\binom {3}{k}}\cdot t^{k}\cdot (1-t)^{3-k}}
である。
この関係を利用すると、3次エルミート補間を 3次ベジェ曲線 の形式で、次の4つの値
p
0
,
p
0
+
1
3
m
0
,
p
1
−
1
3
m
1
,
p
1
{\displaystyle {\boldsymbol {p}}_{0},{\boldsymbol {p}}_{0}+{\frac {1}{3}}{\boldsymbol {m}}_{0},{\boldsymbol {p}}_{1}-{\frac {1}{3}}{\boldsymbol {m}}_{1},{\boldsymbol {p}}_{1}}
によって表現でき、ド・カステリョのアルゴリズム を用いてエルミート補間を行うことができる。
これは、3次ベジェ曲線
[ 訳注 3]
において、補間曲線の両端点における接ベクトルが、中間の2つの制御点により決定されることを示している。
この多項式は次の標準形式で記述することもできる:
p
(
t
)
=
(
2
p
0
+
m
0
−
2
p
1
+
m
1
)
t
3
+
(
−
3
p
0
+
3
p
1
−
2
m
0
−
m
1
)
t
2
+
m
0
t
+
p
0
{\displaystyle {\boldsymbol {p}}(t)=\left(2{\boldsymbol {p}}_{0}+{\boldsymbol {m}}_{0}-2{\boldsymbol {p}}_{1}+{\boldsymbol {m}}_{1}\right)t^{3}+\left(-3{\boldsymbol {p}}_{0}+3{\boldsymbol {p}}_{1}-2{\boldsymbol {m}}_{0}-{\boldsymbol {m}}_{1}\right)t^{2}+{\boldsymbol {m}}_{0}t+{\boldsymbol {p}}_{0}}
ただし、制御点と接ベクトルが係数である。
この形式では係数が一定となり、一度計算して再利用できるため、t の様々な値について多項式を効率的に評価できる。
行列形式では
p
(
t
)
=
[
t
3
t
2
t
1
]
[
2
1
−
2
1
−
3
−
2
3
−
1
0
1
0
0
1
0
0
0
]
[
p
0
m
0
p
1
m
1
]
{\displaystyle {\boldsymbol {p}}(t)={\begin{bmatrix}t^{3}&t^{2}&t&1\end{bmatrix}}{\begin{bmatrix}2&1&-2&1\\-3&-2&3&-1\\0&1&0&0\\1&0&0&0\end{bmatrix}}{\begin{bmatrix}{\boldsymbol {p}}_{0}\\{\boldsymbol {m}}_{0}\\{\boldsymbol {p}}_{1}\\{\boldsymbol {m}}_{1}\end{bmatrix}}}
となる。
ベジェ曲線への変換
3次ベジェ曲線の行列形式は
p
(
t
)
=
[
t
3
t
2
t
1
]
[
−
1
3
−
3
1
3
−
6
3
0
−
3
3
0
0
1
0
0
0
]
[
p
b
z
0
p
b
z
1
p
b
z
2
p
b
z
3
]
{\displaystyle {\boldsymbol {p}}(t)={\begin{bmatrix}t^{3}&t^{2}&t&1\end{bmatrix}}{\begin{bmatrix}-1&3&-3&1\\3&-6&3&0\\-3&3&0&0\\1&0&0&0\end{bmatrix}}{\begin{bmatrix}{\boldsymbol {p_{bz}}}_{0}\\{\boldsymbol {p_{bz}}}_{1}\\{\boldsymbol {p_{bz}}}_{2}\\{\boldsymbol {p_{bz}}}_{3}\end{bmatrix}}}
であることから、3次エルミートスプラインと等しくなる3次ベジェ曲線の制御点は
[
p
b
z
0
p
b
z
1
p
b
z
2
p
b
z
3
]
=
[
−
1
3
−
3
1
3
−
6
3
0
−
3
3
0
0
1
0
0
0
]
−
1
[
2
1
−
2
1
−
3
−
2
3
−
1
0
1
0
0
1
0
0
0
]
[
p
0
m
0
p
1
m
1
]
=
[
p
0
p
0
+
m
0
3
p
1
−
m
1
3
p
1
]
{\displaystyle {\begin{bmatrix}{\boldsymbol {p_{bz}}}_{0}\\{\boldsymbol {p_{bz}}}_{1}\\{\boldsymbol {p_{bz}}}_{2}\\{\boldsymbol {p_{bz}}}_{3}\end{bmatrix}}={\begin{bmatrix}-1&3&-3&1\\3&-6&3&0\\-3&3&0&0\\1&0&0&0\end{bmatrix}}^{-1}{\begin{bmatrix}2&1&-2&1\\-3&-2&3&-1\\0&1&0&0\\1&0&0&0\end{bmatrix}}{\begin{bmatrix}{\boldsymbol {p}}_{0}\\{\boldsymbol {m}}_{0}\\{\boldsymbol {p}}_{1}\\{\boldsymbol {m}}_{1}\end{bmatrix}}={\begin{bmatrix}{\boldsymbol {p}}_{0}\\{\boldsymbol {p}}_{0}+{\frac {{\boldsymbol {m}}_{0}}{3}}\\{\boldsymbol {p}}_{1}-{\frac {{\boldsymbol {m}}_{1}}{3}}\\{\boldsymbol {p}}_{1}\end{bmatrix}}}
である。
データセットの補間
あるデータセット
(
x
k
,
p
k
)
{\displaystyle (x_{k},{\boldsymbol {p}}_{k})}
(
k
=
1
,
…
,
n
{\displaystyle k=1,\ldots ,n}
)は、各区間に上記手順を適用することで補間できる。ただし、接ベクトルを適切な方法で選択する、つまり端点を共有する区間どうしで接線を等しくする。
補間された曲線は区分3次エルミートスプラインで構成され、
(
x
1
,
x
n
)
{\displaystyle (x_{1},x_{n})}
において大域的に連続して微分可能である。
接ベクトルの選択は一意ではなく、いくつかのオプションが利用可能である。
有限差分
有限差分の例
最も単純な選択肢は3点差分であり、一定間隔のデータ点を必要としない。
内部の点
k
=
2
,
…
,
n
−
1
{\displaystyle k=2,\dots ,n-1}
に対しては、
m
k
=
1
2
(
p
k
+
1
−
p
k
x
k
+
1
−
x
k
+
p
k
−
p
k
−
1
x
k
−
x
k
−
1
)
{\displaystyle {\boldsymbol {m}}_{k}={\frac {1}{2}}\left({\frac {{\boldsymbol {p}}_{k+1}-{\boldsymbol {p}}_{k}}{x_{k+1}-x_{k}}}+{\frac {{\boldsymbol {p}}_{k}-{\boldsymbol {p}}_{k-1}}{x_{k}-x_{k-1}}}\right)}
とし、データ集合の端点では片側差分とする。
カーディナルスプライン
2Dにおけるカーディナルスプラインの例。 線は曲線を表し、四角形は制御点
p
k
{\displaystyle {\boldsymbol {p}}_{k}}
を表す。 曲線は最初の点と最後の点には達していないことに注意。 ただし、これらの点は曲線の形状に影響を与える。テンションパラメータは0.1を用いた。
m
k
=
(
1
−
c
)
p
k
+
1
−
p
k
−
1
x
k
+
1
−
x
k
−
1
{\displaystyle {\boldsymbol {m}}_{k}=(1-c){\frac {{\boldsymbol {p}}_{k+1}-{\boldsymbol {p}}_{k-1}}{x_{k+1}-x_{k-1}}}}
を用いて接ベクトルを計算すると、カーディナルスプライン (英語: cardinal spline)が得られる
[ 4]
。なお、カーディナルスプラインは正準スプライン (英語: canonical spline)と呼ばれることもある
[ 5]
。
パラメータ c はテンション パラメータであり、[0, 1] の範囲でなければならない。
ある意味では、これは接ベクトルの「長さ」と解釈できる。
c = 1 を選択するとすべての接ベクトルがゼロになり、c = 0 を選択すると一様パラメータ化(英語: uniform parameterization)Catmull-Romスプライン になる。
Catmull–Romスプライン
等間隔の横軸における黒点のCatmull–Rom 3次補間の幾何学的解釈 [ 6]
接ベクトルとして
m
k
=
p
k
+
1
−
p
k
−
1
2
{\displaystyle {\boldsymbol {m}}_{k}={\frac {{\boldsymbol {p}}_{k+1}-{\boldsymbol {p}}_{k-1}}{2}}}
を選択することによりカーディナルスプラインの特殊な場合のひとつであるCatmull-Romスプライン が得られる。
「一様な」パラメータ間隔を前提とする。
Kochanek–Bartelsスプライン
Kochanek–Bartels スプラインは、データ ポイント
p
k
−
1
{\displaystyle {\boldsymbol {p}}_{k-1}}
,
p
k
{\displaystyle {\boldsymbol {p}}_{k}}
,
p
k
+
1
{\displaystyle {\boldsymbol {p}}_{k+1}}
が与えられた場合に接ベクトルを選択する方法をさらに一般化したものであり、テンション、バイアス、連続性の3つのパラメータを指定できる。
単調3次補間
上記のいずれかのタイプの3次エルミートスプラインを単調 データセットの補間 に使用する場合、補間された関数は必ずしも単調にはならないが、接ベクトルを調整することで単調性を維持できる。
端点の微分が一致する単位区間の補間
点
p
n
−
1
,
p
n
,
p
n
+
1
,
p
n
+
2
{\displaystyle {\boldsymbol {p}}_{n-1},{\boldsymbol {p}}_{n},{\boldsymbol {p}}_{n+1},{\boldsymbol {p}}_{n+2}}
のひとつの座標成分を、
整数座標 x = n − 1, n , n + 1, n + 2 で関数 f (x ) が取る値とすると、
p
n
=
f
(
n
)
∀
n
∈
Z
{\displaystyle p_{n}=f(n)\quad \forall n\in \mathbb {Z} }
と表すことができる。
さらに、端点における接ベクトルは、隣接点の中心差分
m
n
=
f
(
n
+
1
)
−
f
(
n
−
1
)
2
=
p
n
+
1
−
p
n
−
1
2
∀
n
∈
Z
.
{\displaystyle m_{n}={\frac {f(n+1)-f(n-1)}{2}}={\frac {p_{n+1}-p_{n-1}}{2}}\quad \forall n\in \mathbb {Z} .}
で定義されると仮定する。
実数値 x における補間値 f (x ) を評価するには、まず x を整数部 n と小数部 u に分離する。
x
=
n
+
u
,
{\displaystyle x=n+u,}
n
=
⌊
x
⌋
=
floor
(
x
)
,
{\displaystyle n=\lfloor x\rfloor =\operatorname {floor} (x),}
u
=
x
−
n
=
x
−
⌊
x
⌋
,
{\displaystyle u=x-n=x-\lfloor x\rfloor ,}
0
≤
u
<
1
,
{\displaystyle 0\leq u<1,}
ここで
⌊
x
⌋
{\displaystyle \lfloor x\rfloor }
は床関数 を表し、x 以下の最大の整数を返すものとする。
Catmull-Romスプラインは
[ 7]
f
(
x
)
=
f
(
n
+
u
)
=
CINT
u
(
p
n
−
1
,
p
n
,
p
n
+
1
,
p
n
+
2
)
=
[
1
u
u
2
u
3
]
[
0
1
0
0
−
1
2
0
1
2
0
1
−
5
2
2
−
1
2
−
1
2
3
2
−
3
2
1
2
]
[
p
n
−
1
p
n
p
n
+
1
p
n
+
2
]
=
1
2
[
−
u
3
+
2
u
2
−
u
3
u
3
−
5
u
2
+
2
−
3
u
3
+
4
u
2
+
u
u
3
−
u
2
]
T
[
p
n
−
1
p
n
p
n
+
1
p
n
+
2
]
=
1
2
[
u
(
(
2
−
u
)
u
−
1
)
u
2
(
3
u
−
5
)
+
2
u
(
(
4
−
3
u
)
u
+
1
)
u
2
(
u
−
1
)
]
T
[
p
n
−
1
p
n
p
n
+
1
p
n
+
2
]
=
1
2
(
(
u
2
(
2
−
u
)
−
u
)
p
n
−
1
+
(
u
2
(
3
u
−
5
)
+
2
)
p
n
+
(
u
2
(
4
−
3
u
)
+
u
)
p
n
+
1
+
u
2
(
u
−
1
)
p
n
+
2
)
=
1
2
(
(
−
u
3
+
2
u
2
−
u
)
p
n
−
1
+
(
3
u
3
−
5
u
2
+
2
)
p
n
+
(
−
3
u
3
+
4
u
2
+
u
)
p
n
+
1
+
(
u
3
−
u
2
)
p
n
+
2
)
=
1
2
(
(
−
p
n
−
1
+
3
p
n
−
3
p
n
+
1
+
p
n
+
2
)
u
3
+
(
2
p
n
−
1
−
5
p
n
+
4
p
n
+
1
−
p
n
+
2
)
u
2
+
(
−
p
n
−
1
+
p
n
+
1
)
u
+
2
p
n
)
=
1
2
(
(
(
−
p
n
−
1
+
3
p
n
−
3
p
n
+
1
+
p
n
+
2
)
u
+
(
2
p
n
−
1
−
5
p
n
+
4
p
n
+
1
−
p
n
+
2
)
)
u
+
(
−
p
n
−
1
+
p
n
+
1
)
)
u
+
p
n
,
{\displaystyle {\begin{aligned}f(x)=f(n+u)&={\text{CINT}}_{u}(p_{n-1},p_{n},p_{n+1},p_{n+2})\\&={\begin{bmatrix}1&u&u^{2}&u^{3}\end{bmatrix}}{\begin{bmatrix}0&1&0&0\\-{\tfrac {1}{2}}&0&{\tfrac {1}{2}}&0\\1&-{\tfrac {5}{2}}&2&-{\tfrac {1}{2}}\\-{\tfrac {1}{2}}&{\tfrac {3}{2}}&-{\tfrac {3}{2}}&{\tfrac {1}{2}}\end{bmatrix}}{\begin{bmatrix}p_{n-1}\\p_{n}\\p_{n+1}\\p_{n+2}\end{bmatrix}}\\&={\frac {1}{2}}{\begin{bmatrix}-u^{3}+2u^{2}-u\\3u^{3}-5u^{2}+2\\-3u^{3}+4u^{2}+u\\u^{3}-u^{2}\end{bmatrix}}^{\mathrm {T} }{\begin{bmatrix}p_{n-1}\\p_{n}\\p_{n+1}\\p_{n+2}\end{bmatrix}}\\&={\frac {1}{2}}{\begin{bmatrix}u{\big (}(2-u)u-1{\big )}\\u^{2}(3u-5)+2\\u{\big (}(4-3u)u+1{\big )}\\u^{2}(u-1)\end{bmatrix}}^{\mathrm {T} }{\begin{bmatrix}p_{n-1}\\p_{n}\\p_{n+1}\\p_{n+2}\end{bmatrix}}\\&={\tfrac {1}{2}}{\Big (}{\big (}u^{2}(2-u)-u{\big )}p_{n-1}+{\big (}u^{2}(3u-5)+2{\big )}p_{n}+{\big (}u^{2}(4-3u)+u{\big )}p_{n+1}+u^{2}(u-1)p_{n+2}{\Big )}\\&={\tfrac {1}{2}}{\big (}(-u^{3}+2u^{2}-u)p_{n-1}+(3u^{3}-5u^{2}+2)p_{n}+(-3u^{3}+4u^{2}+u)p_{n+1}+(u^{3}-u^{2})p_{n+2}{\big )}\\&={\tfrac {1}{2}}{\big (}(-p_{n-1}+3p_{n}-3p_{n+1}+p_{n+2})u^{3}+(2p_{n-1}-5p_{n}+4p_{n+1}-p_{n+2})u^{2}+(-p_{n-1}+p_{n+1})u+2p_{n}{\big )}\\&={\tfrac {1}{2}}{\Big (}{\big (}(-p_{n-1}+3p_{n}-3p_{n+1}+p_{n+2})u+(2p_{n-1}-5p_{n}+4p_{n+1}-p_{n+2}){\big )}u+(-p_{n-1}+p_{n+1}){\Big )}u+p_{n},\end{aligned}}}
ただし、
T
{\displaystyle \mathrm {T} }
は行列の転置 を表す。
最後の式はホーナー法 を用いた計算手法を示す。
この記述はトリキュービック補間(1回の最適化につき、同じ u と異なる p を使用して CINTu を16回計算する必要がある)にも関連する。
関連項目
脚注
訳注
^ 英語版Wikipediaでは、単に "The Hermite formula"
^ 英語版Wikipediaでは "Bicubic surface patches, defined by three bicubic splines" で、直訳すると『3つのバイキュービックスプラインで定義されるバイキュービック曲面パッチ』と理解困難な文章になってしまうため、"defined by three bicubic splines" を省いて和訳した。なお、3Dグラフィックス関連の文献で、3次(双3次ではない)ベジェ曲線を "bicubic Bézier curve" としている例が散見される。一例:
Carsten Benthin (January 2006). Realtime ray tracing on current CPU architectures . pp. 86-87. doi :10.22028/D291-25853 .
^ 英語版Wikipediaでは "a cubic Bézier patch" だが、曲線についての記述であるため、"patch" を "curve" に置き換えて和訳した。
出典
外部リンク