================ BEZIER3(平面の有理ベジエ曲線) ================ Mapleを用いた実習を行います. Mapleを起動してください. 適当にプログラムの中の数字などを変更して試してみてください. 以下の説明の中で*****ではさまれた部分は Mapleに入力する文字列です.自分で入力あるいはコピーし Enter(Return) キーで実行します. 上から順に,すべて実行するようにしてください. 上で定義した関数を後で利用すること があります. 関数のグラフを描くにはパッケイジ plots と plottools を用います. ****** with(plots): with(plottools): ****** ベジエ曲線を描くには、plotを用います. これは、y=f(x)の形になるもの以外も描く必要があるためです. plotを用いて放物線を描いてみましょう. ****** plot([-1 + 2*t, (-1 + 2*t)^2, t=0..1]); ****** 縦と横の比を1対1にするには,1:1のボタンを押すか, PlotメニュのScaling Constrainedを選んで下さい. plotを用いて円(の一部)を描いてみましょう. ****** plot([(1-t^2)/(1+t^2), (2*t)/(1+t^2), t=0..1]); ****** 平面の有理ベジエ曲線を描くための準備として、まず次を入力してください. ***** rationalbezier1:=proc(L,W, clr, thk, r,s) local n, b, bb; n:=nops(L)-1; b:= [sum(n!/(k!*(n-k)!)*(u^k)*((1-u)^(n-k))*L[k+1][1]*W[k+1], k=0..n)/(sum(n!/(k!*(n-k)!)*(u^k)*((1-u)^(n-k))*W[k+1], k=0..n)), sum(n!/(k!*(n-k)!)*(u^k)*((1-u)^(n-k))*L[k+1][2]*W[k+1], k=0..n)/(sum(n!/(k!*(n-k)!)*(u^k)*((1-u)^(n-k))*W[k+1],k=0..n))]: bb:=plot([b[1], b[2], u=r..s], color=clr, thickness=thk); end: ***** 4分の1円を描きましょう. ***** cpoly:=[[1,0], [1,1],[0,1]]; weight:=[1,1,2]; rationalbezier1(cpoly,weight, blue, 2, 0,1); ***** ***** AA:=plot(cpoly, color=black, thickness=2); p:=NULL: for j from 1 to 64 do p:=p, display(AA, rationalbezier1(cpoly,weight, blue, 2, 0, j/64) ): end do: display(p,insequence=true, axes=none); ***** 双曲線を描きましょう. ***** cpoly:=[[3, -2*2^(1/2)], [1/3, 0], [3, 2*2^(1/2)]]; weight:=[1,3,1]; rationalbezier1(cpoly,weight, blue, 2, 0,1); ***** 重みを変えてみましょう. ***** cpoly:=[[3, -2*2^(1/2)], [-1, 0], [3, 2*2^(1/2)]]; weight:=[1,1/2,1]; ***** ***** cpoly:=[[3, -2*2^(1/2)], [-1, 0], [3, 2*2^(1/2)]]; weight:=[1,1,1]; ***** デカルトの葉線を描いてみましょう. ***** cpoly:=[[0, 0], [1, 0], [2, 1], [3/2, 3/2]]; weight:=[1, 1, 1, 2]; rationalbezier1(cpoly,weight, blue, 2, 0,1); ***** アステロイドを描きましょう. ***** cpoly:=[[0, 1], [0, 1], [0, 2/3], [1/4, 1/4], [2/3, 0], [1, 0], [1, 0]]; weight:=[1, 1, 6/5, 8/5, 12/5, 4, 8]; rationalbezier1(cpoly,weight, blue, 2, 0,1); ***** 半円を描きましょう. ***** cpoly:=[[1, 0], [1, 2], [-1, 2], [-1, 0]]; weight:=[1, 1/3, 1/3, 1]; rationalbezier1(cpoly,weight, blue, 2, 0,1); ***** いろいろなベジエ点を与えて,ベジエ曲線を作って見ましょう. 何かおもしろそうなものができたら、教えて下さい.