ド・カステリョのアルゴリズム(ベジェ曲線)

ド・カステリョのアルゴリズムと呼ばれるベジェ曲線のアルゴリズムを理解してみよう。
De Casteljau のアルゴリズム

平面内の点 $\mathbf{P}_{0,0}$, $\mathbf{P}_{1,0}$, $\cdots$, $\mathbf{P}_{n,0}$ をとり, $0 \leqq t \leqq 1$ を固定する。 $1 \leqq j \leqq n$, $0 \leqq i \leqq n-j$ に対して, 次の漸化式を定める: $$ \mathbf{P}_{i,j}(t) = (1-t)\mathbf{P}_{i,j-1}(t) + t\,\mathbf{P}_{i+1,j-1}(t) $$ ただし, $$ \mathbf{P}_{i,0}(t) = \mathbf{P}_{i,0} $$ とする。 この操作を $j=1,2,\dots,n$ と繰り返して得られる点 $\mathbf{P}_{0,n}(t)$ を考える。 $\mathbf{P}_{0,n}(t)$ の $0 \leqq t \leqq 1$ における軌跡は, $n$ 次ベジェ曲線となる。

§ベジェ曲線の定義の確認

$n$ 次ベジェ曲線は, 次の式で定義されていた: $$ \sum_{k=0}^{n} {}_n \mathrm{C}_k (1-t)^{n-k} t^k \mathbf{P}_{k,0} $$ ここで, 記述を簡潔にするため, $$ b_{k,j}(t) = {}_j \mathrm{C}_k (1-t)^{\,j-k} t^k $$ とおく。

§帰納法の仮定

$j$ に関して, $$ \mathbf{P}_{i,j}(t) = \sum_{k=i}^{i+j} b_{k-i,j}(t)\,\mathbf{P}_{k,0} $$ が成り立つと仮定する。 この形が $j+1$ の場合にも成り立つことを示す。

§初期段階 $j=1$ の確認

$j=1$ のとき, $$ \mathbf{P}_{i,1}(t) = (1-t)\mathbf{P}_{i,0} + t\mathbf{P}_{i+1,0} $$ である。 一方, $$ b_{0,1}(t) = 1-t,\quad b_{1,1}(t)=t $$ であるから, $$ \mathbf{P}_{i,1}(t) = b_{0,1}\mathbf{P}_{i,0} + b_{1,1}\mathbf{P}_{i+1,0} $$ となり, 仮定は $j=1$ で成り立つ。

§$j+1$ の場合の計算

帰納法の仮定を用いると, $$\begin{aligned} \mathbf{P}_{i,j}(t) &= \sum_{k=i}^{i+j} b_{k-i,j}\mathbf{P}_{k,0},\\ \mathbf{P}_{i+1,j}(t) &= \sum_{k=i+1}^{i+j+1} b_{k-(i+1),j}\mathbf{P}_{k,0} \end{aligned}$$ である。 漸化式より, $$ \mathbf{P}_{i,j+1}(t) = (1-t)\mathbf{P}_{i,j}(t) + t\mathbf{P}_{i+1,j}(t) $$ である。よって, $\mathbf{P}_{i,j+1}(t)$ は, $$ \begin{aligned} &(1-t)b_{0,j}\mathbf{P}_{i,0} \\[10pt] &\phantom{aaa}+ \sum_{k=i+1}^{i+j}\bigl((1-t)b_{k-i,j}+t b_{k-(i+1),j}\bigr)\mathbf{P}_{k,0} \\[10pt] &\phantom{aaaaaa}+ t b_{j,j}\mathbf{P}_{i+j+1,0} \end{aligned}$$ と書ける。

§二項係数の性質

各係数について, $$ (1-t)b_{k-i,j}+t b_{k-(i+1),j} = b_{k-i,j+1} $$ が成り立つ。 これは, $$ {}_j \mathrm{C}_{k-i} + {}_j \mathrm{C}_{k-i-1} = {}_{j+1} \mathrm{C}_{k-i} $$ を用いた直接計算による。 また, $$ (1-t)b_{0,j}=b_{0,j+1},\quad t b_{j,j}=b_{j+1,j+1} $$ である。

§帰納法の結論

以上より, $$ \mathbf{P}_{i,j+1}(t) = \sum_{k=i}^{i+j+1} b_{k-i,j+1}\mathbf{P}_{k,0} $$ が得られ, 仮定は $j+1$ に対しても成り立つ。

§ベジェ曲線との一致

特に $i=0$, $j=n$ とすると, $$ \mathbf{P}_{0,n}(t) = \sum_{k=0}^{n} b_{k,n}\mathbf{P}_{k,0} = \sum_{k=0}^{n} {}_n \mathrm{C}_k (1-t)^{n-k} t^k \mathbf{P}_{k,0} $$ となる。 ゆえに, De Casteljau の漸化式によって得られる $\mathbf{P}_{0,n}(t)$ の軌跡は, $n$ 次ベジェ曲線と一致する。

$\mathbf{P}_{0,0}$, $\mathbf{P}_{1,0}$, $\mathbf{P}_{2,0}$ の 3 点をとる。 $j=1$ のとき, $$ \mathbf{P}_{0,1} = (1-t)\mathbf{P}_{0,0} + t\mathbf{P}_{1,0}, $$ $$ \mathbf{P}_{1,1} = (1-t)\mathbf{P}_{1,0} + t\mathbf{P}_{2,0} $$ である。 $j=2$ のとき, $$ \mathbf{P}_{0,2} = (1-t)\mathbf{P}_{0,1} + t\mathbf{P}_{1,1} $$ となり,これを展開すると, $$ \mathbf{P}_{0,2} = (1-t)^2\mathbf{P}_{0,0} + 2t(1-t)\mathbf{P}_{1,0} + t^2\mathbf{P}_{2,0} $$ を得る。 したがって,$\mathbf{P}_{0,2}(t)$ の軌跡は 2 次のベジェ曲線になっている。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です