================ BEZIER10 (3次元空間内のベジエ曲線) ================ Mapleを用いた実習を行います. Mapleを起動してください. 適当にプログラムの中の数字などを変更して試してみてください. 以下の説明の中で*****ではさまれた部分は Mapleに入力する文字列です.自分で入力あるいはコピーし Enter(Return) キーで実行します. 上から順に,すべて実行するようにしてください. 上で定義した関数を後で利用すること があります. 関数のグラフを描くにはパッケージ plots と plottools を用います. ****** with(plots): with(plottools): ****** 3次元空間内のベジエ曲線を描くための準備として、前と同様に次を入力してください. ***** lerp := proc(p,q,r,s,t) local R; R:= (s - t)/(s - r)*p + (t - r)/(s - r)*q; end: ***** ***** badecas:=proc(L,r,s) local i, b; b:=L; for i from 1 to nops(L)-1 do b:=seq( lerp(b[j], b[j+1], r,s,t), j=1..nops(L)-i); od; b; end: ***** 次の項目を入力したとき,選択 function definition remmber table assignment が出たときは,maple11では remmber table assignmentを選ぶ. ***** decas:=proc(L,r,s) local i,j, b, cc,c; b:=L; for i from 1 to nops(L)-1 do b:=seq( lerp(b[j], b[j+1], r,s,t), j=1..nops(L)-i); cc(i):=b; od; c:=seq([cc(i)],i=1..nops(L)-1); end: ***** では、3次元空間内のベジエ曲線を描きましょう. ***** cpoly:=[ [-1, 1, -1], [-1/3,-1/3,1], [1/3,-1/3,-1], [1,1,1]]; spacecurve(cpoly, color=black, thickness=2); ***** ***** bezier:=badecas(cpoly,0,1): point3d:=k-> pointplot3d(eval({bezier[1],bezier[2],bezier[3]}, t=k/64) , color=black, thickness=4): BB:=decas(cpoly, 0,1): frame:=k-> seq(spacecurve(eval(BB[i],t=k/64),color=red, thickness=2), i=1..nops(cpoly)-1): ***** ***** AA3d:=spacecurve(cpoly, color=black, thickness=2): frame(0):=AA3d: p:=NULL: for k from 0 to 64 do p:=p, display(AA3d,frame(k), spacecurve([bezier[1],bezier[2],bezier[3]], t=-0.01..k/64,color=blue, thickness=2) ): end do: display(p,insequence=true, axes=boxed); ***** つぎの場合も試してみましょう. ***** cpoly:=[ [2, 0, 0], [2,2,0], [2,2,2], [0,0,2]]; ***** ***** cpoly:=[ [2, 0, 0], [2,2,0], [2,2,2], [0,0,2], [2,0,0]]; ***** ***** cpoly:=[ [2, 0, 0], [2,2,0], [2,2,2], [0,0,2], [-1,2,0]]; ***** いろいろなベジエ点を与えて,ベジエ曲線を作って見ましょう. 何かおもしろそうなものができたら、教えて下さい.