色々な命令を作ってきましたが、もっと複雑な曲線はどのように表現すればいいのでしょう?例えば、3点 A, B, C を通るような滑らかな曲線を引きたい時は・・・?
実はベジェ曲線[*1]という名前の曲線があって、この曲線は複数の制御点に沿うような曲線を簡単に描くことができます。但し、あくまで制御点に沿うだけなので、一般に端点以外の制御点を通るとは限りません。
詳しいアルゴリズムは省略しますが、(n+1)個の制御点B_iで構成されるベジェ曲線は次の式で与えられます[*2]:
意味は分からなくても問題ありませんよf(^^;
分割数とは整数=50
# /* # 用例
点列とは配列=「100,100
150,400
400,100
300,300」をCSV取得
点列へベジェ曲線
# */
●ベジェ曲線({グループ=?母艦}OBJの{配列}Sへ|OBJにSで)
点列とは配列
Iとは整数。Nとは整数=Sの要素数-1
Tとは数値。ΔTとは数値=1/分割数
Aとは数値。Bとは整数
点列[0]=S[0]
Iを0からNまで繰り返す
B=CHOOSE(N,I)
T=0
(分割数)回
TにΔTを直接足す
A=B*(T^I)*((1-T)^(N-I))
点列[回数][0]にS[I][0]*Aを直接足す
点列[回数][1]にS[I][1]*Aを直接足す
OBJの点列へ折れ線
●CHOOSE({整数}Nから{整数}Mを)
結果とは整数=1
(M)回、結果に(N-回数+1)/回数を直接掛ける
結果を戻す
●折れ線({グループ=?母艦}OBJの{配列}Sへ|OBJにSで)
(Sの要素数-1)回
OBJのS[回数-1][0],S[回数-1][1]からS[回数][0],S[回数][1]へ線
但し、このプログラムは最適化[*3]をしていません。ここではプログラムを分かりやすくするために単純にしておきました。