ベジェ曲線のパラメータ表示

今回の授業では、ベジェ曲線(Bézier curve)のパラメータ表示について解説します。

1. 曲線のパラメータ表示

以下の方程式で表される楕円を考えます。 $$ x^2+4y^2=1 $$

この楕円上の点を次のように表すことが可能です。

$$ x(t) = \cos(2 \pi t), \quad y(t)= \frac{1}{2} \sin(2 \pi t) \quad (t \in [0,1]) $$

媒介変数 $t$ の変化に従って、点 $(x(t),y(t))$ は一つの曲線を描きます。上記の式は曲線のパラメータ表示と呼ばれます。

例1:楕円のパラメータ表示

演習1

$$ x(t) = \cos^n(2\pi t), \quad y(t) = \sin^n(2\pi t) \quad (t \in [0,1]) $$ $$ x(t) = \cos^5(2\pi t), \quad y(t) = \sin(2\pi t) \quad (t \in [0,1]) $$$$ x(t) = \cos(5\pi t), \quad y(t) = \sin(2\pi t) \quad (t \in [0,2]) $$

2. ベジェ曲線のパラメータ表示

実際の応用では、2次元平面上の曲線を自由に表現するために、以下のパラメータ表示で与えられるベジェ曲線が使用される。

$$ F(t) = (X(t), Y(t)) $$

ここで、 $$ X(t) = X_0 B_{0,n}(t) + X_1 B_{1,n}(t) + \cdots + X_n B_{n,n}(t) = \sum_{i=0}^n X_i B_{i,n}(t) $$ $$ Y(t) = Y_0 B_{0,n}(t) + Y_1 B_{1,n}(t) + \cdots + Y_n B_{n,n}(t) = \sum_{i=0}^n Y_i B_{i,n}(t) $$

また、制御点は以下の点となる。 $$ P_0=(X_0,Y_0), \quad P_1 = (X_1,Y_1),\quad \cdots, \quad P_n=(X_n,Y_n) $$

3次ベジェ曲線の例

ホームページにあるベジェ曲線の補足資料(3次ベジェ曲線の例)を参考にしてください。

以下の制御点で定義されるベジェ曲線を描画します。 $$ P_0 = (0,0), \quad P_1 = (0.5,1), \quad P_0 = (2,-1), \quad P_3=(3,0) $$

ベジェ曲線の描画関数

以下のコードでは、与えられる点のリストに対応するベジェ曲線を描画するdraw_bezierという関数を定義します。

演習2

Windowsのツール「ペイント」で曲線を利用した絵を描いてください。また、その際の制御点の座標を記録して、Pythonのコードでベジェ曲線を描いて絵を再現してください。

特に、以前の授業で描いた「家」の飾りとして、太陽、川、坂の輪郭などを描いてください。

補足:制御点の座標のファイルへの保存

前回と同様にNumpyのsavetxtとloadtxtを用いれば、以下のコードのように簡単に制御点の座標(2次元配列)をテキストファイルに書き込んで保存し、テキストファイルから読み込んだ制御点の座標に対応するベジェ曲線を描くことができます。