スプライン曲線・ベジェ曲線
自由曲線を描く方法がいくつかあります。ひとつは、手書き風にマウスの動きに沿って曲線を描いていくもの。もうひとつは、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()関数で池を薄く色塗りしたりして体裁を整えます。
< 戻る >