ベジェ曲線の定義と性質

ベジェ曲線とは

ベジェ曲線に関する定義を説明します。

バーンスタイン基底関数

定義
バーンスタイン基底関数\(J_{N,i}(t)\)を
$$J_{N,i}(t)={}_NC_it^i(1-t)^{N-i}$$
で定める

ベジェ曲線

定義
ベジェ曲線とは、
\(N\)を自然数として、\(N+1\) 個の異なる点\(P_0,P_1,…,P_N\)から定まる曲線
\begin{align*}
\overrightarrow{OP(t)}
&=\sum_{k=0}^NJ_{N,k}(t)\overrightarrow{OP_k}\\
&=\sum_{k=0}^N{}_NC_kt^k(1-t)^{N-k}\overrightarrow{OP_k}(0 \leq t \leq 1)
\end{align*}
のことをいう。また、このようなベジェ曲線の表現をバーンスタイン表現とよぶ。

制御点

定義
\(P_0,P_1,…,P_N\)のことを制御点とよぶ

\[0\leq {}_NC_kt^k(1-t)^{N-k}(0\leq k\leq N)\]であり、二項定理から\[\displaystyle{\sum_{k=0}^N{}_NC_kt^k(1-t)^{N-k}=1}\]なので、
ベジェ曲線は重心のように「点たちの加重平均」のなす曲線と捉えることができますね。

ベジェ曲線の性質

性質1

ベジェ曲線の端点は\(P_0,P_N\)と一致する

証明
\begin{equation*}
J_{N,i}(0)=\begin{cases}
1(i=0)\\0(i\neq 0)
\end{cases}
\end{equation*}より
\begin{align*}
\overrightarrow{OP(0)}&=\sum_{k=0}^NJ_{N,k}(0)\overrightarrow{OP_k}\\
&=\overrightarrow{OP_0}
\end{align*}
よって\(P(0)=P_0\)。同様にして\(P(1)=P_N\)もわかる。
したがってベジェ曲線の端点は\(P_0,P_N\)と一致する

性質2

\begin{equation*}
\frac{d}{dt}\overrightarrow{OP(t)}=N\sum_{k=0}^{N}(J_{N-1,k-1}(t)-J_{N-1,k}(t))\overrightarrow{OP_k}
\end{equation*}(ただし、\(J_{N-1,-1}(t)=J_{N-1,N}(t)=0\)とする)
とくに
\begin{align*}
\left. \frac{d}{dt}\overrightarrow{OP(t)} \right|_{t=0}&=N(\overrightarrow{OP_1}-\overrightarrow{OP_0})\\
&=N\overrightarrow{P_0P_1}\\
\left. \frac{d}{dt}\overrightarrow{OP(t)} \right|_{t=1}&=N(\overrightarrow{OP_N}-\overrightarrow{OP_{N-1}})\\
&=N\overrightarrow{P_{N-1}P_N}
\end{align*}

証明
\begin{align*}
\frac{d}{dt}\overrightarrow{OP(t)}&=\sum_{k=0}^N\frac{d}{dt}J_{N,k}(t)\overrightarrow{OP_k}\\
&=\sum_{k=0}^N\frac{d}{dt}{}_NC_kt^k(1-t)^{N-k}\overrightarrow{OP_k}\\
&=\sum_{k=0}^N\{k{}_NC_kt^{k-1}(1-t)^{N-k}-(N-k){}_NC_{N-k}t^k(1-t)^{N-k-1}\}\overrightarrow{OP_k}
\end{align*}二項係数の公式\(r{}_nC_r=n{}_{n-1}C_{r-1}\)を用いると、
\(k{}_NC_k=N{}_{N-1}C_{k-1},(N-k){}_NC_{N-k}=N{}_{N-1}C_{N-k-1}\)だから\begin{align*}\frac{d}{dt}\overrightarrow{OP(t)}&=\sum_{k=0}^N\{N{}_{N-1}C_{k-1}t^{k-1}(1-t)^{N-k}-N{}_{N-1}C_{N-k-1}t^k(1-t)^{N-k-1}\}\overrightarrow{OP_k}\\
&=N\sum_{k=0}^N\{{}_{N-1}C_{k-1}t^{k-1}(1-t)^{N-k}-{}_{N-1}C_{k}t^k(1-t)^{N-k-1}\}\overrightarrow{OP_k}\\
&=N\sum_{k=0}^{N}(J_{N-1,k-1}(t)-J_{N-1,k}(t))\overrightarrow{OP_k}
\end{align*}

性質3(ド・カステリョのアルゴリズム)

ベクトル\(\overrightarrow{OP_i^j(t)}\)を以下の漸化式で定める。
\begin{equation*}
\overrightarrow{OP_i^j(t)}=
\begin{cases}
\overrightarrow{OP_i}(i=0,1,…,N, j=0)\\
(1-t)\overrightarrow{OP_i^{j-1}(t)}+t\overrightarrow{OP_{i+1}^{j-1}(t)}\\
\quad (i=0,1,…,N-j,j=1,2,…,N)
\end{cases}
\end{equation*}このとき、
\[\overrightarrow{OP_i^j(t)}=\sum_{k=0}^jJ_{j,k}(t)\overrightarrow{OP_{i+k}}\\
(i=0,1,…,N-j,j=0,1,…,N)\]
とくに \(i=0,j=N\)のとき、
\begin{align*}
\overrightarrow{OP_0^N(t)}&=\sum_{k=0}^NJ_{N,k}(t)\overrightarrow{OP_{k}}\\
&=\overrightarrow{OP(t)}
\end{align*}
つまり、バーンスタイン表現によるベジェ曲線の定義とド・カステリョのアルゴリズムによるベジェ曲線の定義は同値である

制御点たちを順に\(t:1-t\)に内分し、その内分点たちをさらに順に\(t:1-t\)に内分し、…というのを繰り返していくイメージですね。それでは証明に入っていきます

証明
各\(j\)に対して数学的帰納法で示す。
\(j=0\)のとき、
\begin{align*}
\sum_{k=0}^0J_{0,k}(t)\overrightarrow{OP_{i+k}}&=\overrightarrow{OP_{i}}\\
&=\overrightarrow{OP_{i}^0(t)}
\end{align*}より、\(j=0\)のとき成り立つ。
\(j=n\) のとき成り立っていると仮定する。
このとき、\[\overrightarrow{OP_i^n(t)}=\sum_{k=0}^nJ_{n,k}(t)\overrightarrow{OP_{i+k}}
(i=0,1,…,N-n)\]
\(j=n+1\) のとき、
\begin{align*}
\overrightarrow{OP_i^{n+1}(t)}&=(1-t)\overrightarrow{OP_i^{n}(t)}+t\overrightarrow{OP_{i+1}^{n}(t)}\\
&=(1-t)\sum_{k=0}^nJ_{n,k}(t)\overrightarrow{OP_{i+k}}+t\sum_{k=0}^nJ_{n,k}(t)\overrightarrow{OP_{i+1+k}}\\
&=(1-t)\sum_{k=0}^nJ_{n,k}(t)\overrightarrow{OP_{i+k}}+t\sum_{k=1}^{n+1}J_{n,k-1}(t)\overrightarrow{OP_{i+k}}\\
&=(1-t)\sum_{k=1}^nJ_{n,k}(t)\overrightarrow{OP_{i+k}}+(1-t)J_{n,0}(t)\overrightarrow{OP_{i}}\\
&\quad +t\sum_{k=1}^{n}J_{n,k-1}(t)\overrightarrow{OP_{i+k}}+tJ_{n,n}(t)\overrightarrow{OP_{i+n+1}}\\
&=\sum_{k=1}^n\{(1-t)J_{n,k}(t)+tJ_{n,k-1}(t)\}\overrightarrow{OP_{i+k}}\\
&\quad +(1-t)^{n+1}\overrightarrow{OP_{i}}+t^{n+1}\overrightarrow{OP_{i+n+1}}
\end{align*}
ここで、
\begin{align*}
(1-t)J_{n,k}(t)+tJ_{n,k-1}(t)&=(1-t){}_nC_kt^k(1-t)^{n-k}\\
&\quad+t{}_nC_{k-1}t^{k-1}(1-t)^{n-k+1}\\
&=({}_nC_k+{}_nC_{k-1})t^k(1-t)^{n-k+1}\\
\end{align*}パスカルの法則\({}_nC_r={}_{n-1}C_r+{}_{n-1}C_{r-1}\)を用いれば、\({}_nC_k+{}_nC_{k-1}={}_{n+1}C_k\)より、\begin{align*}
(1-t)J_{n,k}(t)+tJ_{n,k-1}(t)&={}_{n+1}C_kt^k(1-t)^{n+1-k}\\
&=J_{n+1,k}(t)
\end{align*}
より、
\begin{align*}
\overrightarrow{OP_i^{n+1}(t)}&=\sum_{k=1}^nJ_{n+1,k}(t)\overrightarrow{OP_{i+k}}+(1-t)^{n+1}\overrightarrow{OP_{i}}+t^{n+1}\overrightarrow{OP_{i+n+1}}\\
&=\sum_{k=0}^{n+1}J_{n+1,k}(t)\overrightarrow{OP_{i+k}}(i=0,1,…,N-n-1)
\end{align*}
よって\(j=n+1\)のときも成り立つ。
以上より、数学的帰納法から\[\overrightarrow{OP_i^j(t)}=\sum_{k=0}^jJ_{j,k}(t)\overrightarrow{OP_{i+k}}\\
(i=0,1,…,N-j,j=0,1,…,N)\]は成り立つ。

タイトルとURLをコピーしました