スプライン曲線・ベジェ曲線

自由曲線を描く方法がいくつかあります。ひとつは、手書き風にマウスの動きに沿って曲線を描いていくもの。もうひとつは、CGソフトなどでも使われるベジェ曲線やスプライン曲線です。

KETCindyにはベジェ曲線やスプライン曲線を描く関数があります。ここでは、その中でも使いやすい CRspline() を使って、池の図を描きます。

CRsplineは、作図した点を通るなめらかな曲線です。これに対し、ベジェ曲線やBスプライン曲線は、制御点というものを使って曲線を描きます。まず、これを比較してみます。

まず、Cinderellaの作図ツールで点を取ります。

この点をリストにして、引数として渡します。

まず、ベジェ曲線で、

Mkbezierptcrv([A,B,C,D,E,F,A]);

としますと、作図した6つの点以外に青い点ができます。これが「制御点」です。(作図した点は緑に変わります)

この状態では曲線になっていません。制御点をドラッグするとなめらかな線になっていきます。

この制御点はユーザーが指定することもできます。その場合は

Mkbeziercrv("n",[[A,B,C,D,E,F],[[G],[H,K],[L,M],[N],[P]]]);

のようにします。Mkbeziercrv(名前,[[節点リスト, 制御点リスト],[オプション] ) です。

これに対し、CRspline(名前,節点リスト,[オプション] ) では、つぎのようになります。

はじめから曲線になっています。緑色の点が制御点ですが、この制御点は動かすことができません。

制御点は動かすことができないので、非表示にすることもできます。オプションに "pointsize->0" をつけます。

CRspline("1",[A,B,C,D,E,F,A],["pointsize->0"]);

制御点が見えない分、こちらのほうがすっきりした形です。

KETCindyにはもうひとつ、Bspline(名前,制御点リスト,[オプション] ) という関数があります。この関数では、通る点ではなく制御点のリストを引数として渡します。

また、ベジェ曲線にも、Bezier(名前,節点リスト,制御点リスト,[オプション] ) , Beziersmooth(名前,節点リスト,[オプション] ) , Beziersym(名前,節点リスト,[オプション] ) があります。

以上、曲線を描くいくつかの関数があります。

・通る点を決めたいかどうか

・制御点を使って細かく図を描きたいかどうか

によって使い分けるとよいでしょう。

池を描く

高校数学の「三角比」であつかう測量の問題です。池の大きさを測るのに、次のような図を作ります。

池は先ほどの図で、点A〜Fの大きさをインスペクタで最小にし、ラベルを非表示にしたものです。

点A,B,Cは識別名はG,H,Kですが、ラベルをA,B,Cにしたものです。

スクリプトは

CRspline("1",[A,B,C,D,E,F,A],["pointsize->0"]);

fillpoly(bz1,Alpha->0.3,color->[0.3,0.8,1]);

2行目は、CRsipline()関数で作られたプロットデータ bz1 を使って閉曲線の色塗りをしています。

ABとBCをListplot()で書き出し、点の名前を Letter() で描けば、次のようなTeXの図ができます。

Listplot([G,H,K]);

Letter([G,"w","A",H,"s","B",K,"e","C"]);

あとは必要に応じ、角度を記入したり、「池」の文字を記入したり、Shade()関数で池を薄く色塗りしたりして体裁を整えます。

< 戻る >