木瓜丸です。
みなさん、イラレ(私は金がないのでInkscape使いですが)とかでベジェ曲線使いますよね?使い始めた頃は制御点の置き方がわからなくてちんぷんかんぷんだった記憶があります。
この度開発しているアプリで、任意の関数をSVGで表現したくなったので、ベジェ曲線の原理を理解すべくまとめてみます。
2次ベジェ曲線
ベジェ曲線は、かんたんに言うと媒介変数表示で曲線を表しただけのものです。
まずは直線を引いてみます。2点P0=(x0y0), P1=(x1y1)として、2点を結ぶ直線は、
L(t)=(1−t)P0+tP1(0≤t≤1)⟺(XY)=(1−t)(x0y0)+t(x1y1)
と表せます。
では、ここで制御点P2=(x2y2)なるものを導入してみましょう。P0とP2の間を補間しながら、同時にP2とP1を補間する曲線を求めます。
B0(t)=(1−t)P0+tP2B1(t)=(1−t)P2+tP1L(t)=(1−t)B0(t)+tB1(t)⟺(XY)=(1−t)((1−t)x0+t(x2)(1−t)y0+t(y2))+t((1−t)x2+t(x1)(1−t)y2+t(y1))
こうするとtの次数が2の曲線の式が出来上がりました。これを2次ベジェ曲線といいます。
3次ベジェ曲線
今度は制御点を2つにしてみます。2つめの制御点P3=(x3y3)としましょう。
今回はP0とP2、P2とP1で得られる2次ベジェ曲線L0(t)と、P0とP3、P3とP1で得られる曲線L1(t)を補間します。
まずは2つのベジェ曲線を出しましょう。
B0(t)=(1−t)P0+tP2B1(t)=(1−t)P2+tP1B2(t)=(1−t)P0+tP3B3(t)=(1−t)P3+tP1L0(t)=(1−t)B0(t)+tB1(t)L1(t)=(1−t)B2(t)+tB3(t)
L0とL1を補間してみましょう。
L(t)=(1−t)L0(t)+tL1(t)
めんどくさいので展開はしないですが、3次の曲線が得られることがわかると思います。こんなかんじで制御点が増えれば増えるほど高次のベジェ曲線になっていきます。
感想(ぼやき)
Wikipediaの数学系の記事マジで読みづらいんだけどあいつらどんな気持ちで記事書いとるんや
参考