ベジェ曲線

bezier.png
bezier.png (1)
\begin{equation} P(t)=P_{0}B_{0}^{3}(t)+P_{1}B_{2}^{3}(t)+P_{3}B_{3}^{3}(t) \end{equation}

$B_{i}^{3}(t)$は混合比を表す関数、バーンスタイン基底関数と呼ばれる。
バーンスタイン基底関数は次式で表される。

(2)
\begin{align} B_{0}^{3}(t)=(1-t)^{3} B_{1}^{3}(t)=3t(1-t)^2 \\ B_{2}^{3}(t)=3t^{2}(1-t) \\ B_{3}^{3}(t)=t^{3} \end{align}

バーンスタイン関数は、2次ベジェ曲線なら2次バーンスタイン基底関数になる。
n次のバーンスタイン関数は次式で定義される

(3)
\begin{align} B^{n}_{i}=\pmatrix{n\\i}t^{i}(1-t)^{n-i}=\frac{n!}{i!(n-i)!}t^{i}(1-t)^{n-i} \end{align}

Eq.(1)のBの部分を混合比と呼ぶ。この混合比の合計は1になる。

bernstein.jpg

さて、式1を参考に次は点をド・カステリョのアルゴリズムで分割していくのである。

ド・カステリョのアルゴリズム

de-casteliau.png 右図の P0, P1, P2, P3 が与えられた制御点である。
ここから更に分割した点を5つ生み出す。
step1 $P_{0}^{1}(t)=(1-t)P_{0}+tP_{1}$ $P_{1}^{1}(t)=(1-t)P_{1}+tP_{2}$ $P_{2}^{1}(t)=(1-t)P_{2}+tP_{3}$
step2 $P_{0}^{2}=(1-t)P_{0}^{1}(t)+tP_{1}^{1}(t)$ $P_{1}^{2}(t)=(1-t)P_{1}^{1}(t)+tP_{2}^{1}(t)$
step3 $P_{0}^{3}(t)=(1-t)P_{0}^{2}(t)+tP_{1}^{2}$

時間t=0.0~1.0の軌跡を描くと曲線になるってわけだ。
最終的に描くものは$P_{0}^{3}(t)$である。

ベジェ曲線は軌跡?

http://ruiueyama.tumblr.com/post/11197882224
GIMPでベジェ曲線

ベジェ曲線の次数

制御点が3個なのが2次ベジェ曲線
制御点が4個なのが3次ベジェ曲線
2次ベジェ曲線の数式
3次ベジェ曲線の数式
WindowsAPIのPolyBezier()関数

サポートサイト Wikidot.com