================ BEZIER2 ================ Mathematicaを用いた練習を行います。 Mathematica は毎回使いますから、GNOMEパネルの ランチャーに登録しておきましょう。 Mathematica は 「センターメニュー」-「アプリケーション」-「Mathematic数式処理」 にあります。 適当にプログラムの中の数字などを変更して試してみてください。 以下の説明の中で*****ではさまれた部分は Mathematica に入力する文字列です。自分で入力し Shift+Enter(Return) キーで実行します。 上から順に,すべて実行するようにしてください。 上で定義した関数を後で利用すること があります。 ****** Needs["Graphics`Colors`"] ****** ****** Cn[s_]:=n!/(s!*(n-s)!) Bn[s_,u_]:=Cn[s]*(u^s)*((1-u)^(n-s)) SS[n_]:=Sum[b[j]*Bn[j,t],{j,0,n}] L[n_]:=Table[(1-t)*b[i]+t*b[i+1],{i,0,n-1}] B2Poly:=ParametricPlot[Evaluate[L[n]],{t,0,1},AspectRatio->Automatic, Axes->False] BlueBezier:= ParametricPlot[Evaluate[SS[n]],{t,0,1},AspectRatio->Automatic, Axes->False,PlotRange\[Rule]All, PlotStyle->{Thickness[0.005],Blue}] RedBezier:= ParametricPlot[Evaluate[SS[n]],{t,0,1},AspectRatio\[Rule]Automatic, Axes\[Rule]False,PlotRange\[Rule]All, PlotStyle->{Thickness[0.01],Red}] GreenBezier:= ParametricPlot[Evaluate[SS[n]],{t,0,1},AspectRatio\[Rule]Automatic, Axes\[Rule]False,PlotRange\[Rule]All, PlotStyle->{Thickness[0.03],Green}] OrangeBezier:= ParametricPlot[Evaluate[SS[n]],{t,0,1},AspectRatio\[Rule]Automatic, Axes\[Rule]False,PlotRange\[Rule]All, PlotStyle->{Thickness[0.03],Orange}] BlackBezier:= ParametricPlot[Evaluate[SS[n]],{t,0,1},AspectRatio\[Rule]Automatic, Axes\[Rule]False,PlotRange\[Rule]All, PlotStyle->{Thickness[0.03],Black}] ****** ハートを描いてみましょう。 ****** n=8 b[0]={0,1/2}; b[1]={0,0.7}; b[2]={2.5,3.5}; b[3]={2.5,4}; b[4]={2.5,4.7}; b[5]={2,5.5}; b[6]={1/2,5.5}; b[7]={0,5}; b[8]={0,4}; c1=RedBezier b1=B2Poly b[0]={0,1/2}; b[1]={0,.7}; b[2]={-2.5,3.5}; b[3]={-2.5,4}; b[4]={-2.5,4.7}; b[5]={-2,5.5}; b[6]={-1/2,5.5}; b[7]={0,5}; b[8]={0,4}; c2=RedBezier b2=B2Poly ****** ****** Show[c1,c2] ****** ****** Show[c1,c2, b1,b2] ****** ハートに色をぬりましょう。 ****** n=8; b[0]={0,1/2}; b[1]={0,0.7}; b[2]={2.5,3.5}; b[3]={2.5,4}; b[4]={2.5,4.7}; b[5]={2,5.5}; b[6]={1/2,5.5}; b[7]={0,5}; b[8]={0,4}; cc1=SS[n]; b[0]={0,1/2}; b[1]={0,.7}; b[2]={-2.5,3.5}; b[3]={-2.5,4}; b[4]={-2.5,4.7}; b[5]={-2,5.5}; b[6]={-1/2,5.5}; b[7]={0,5}; b[8]={0,4}; cc2=SS[n]; ****** ****** filledcurve[curve_, {u_,u0_, u1_}, Color_]:=Module[{plottmp, grtmp}, plottmp= ParametricPlot[ curve//Evaluate, {u,u0,u1}, AspectRatio\[Rule]Automatic, DisplayFunction\[Rule]Identity]; grtmp=plottmp /. (Line[pts_]:> Polygon[pts]); Show[grtmp, DisplayFunction ->$DisplayFunction,Axes\[Rule]False, PlotRange\[Rule]All, DefaultColor\[Rule]Color] ] ****** ****** filledcurve[{cc1,cc2}, {t,-0,1},Red] ****** 文字 「お」 をかいてみましょう。 ****** m={{1,0},{0,1}} ****** ****** nn={.45,-1} ****** ****** n=2 b[0]=m.({-.45,1}+nn) b[1]=m.({0,.95}+nn) b[2]=m.({.57,1.1}+nn) o1=BlackBezier p1=B2Poly b[0]=m.({0.1,1.4}+nn) b[1]=m.({0.1,1}+nn) b[2]=m.({0.11,-0.6}+nn) o2=BlackBezier p2=B2Poly n=13 b[0]=m.({0.11,-0.6}+nn) b[1]=m.({0.11,-0.7}+nn) b[2]=m.({-0.2,-0.8}+nn) b[3]=m.({-1.3,-0.2}+nn) b[4]=m.({-0.9,-0.1}+nn) b[5]=m.({-0.3,0.1}+nn) b[6]=m.({-0.1,0.4}+nn) b[7]=m.({1.7,1.4}+nn) b[8]=m.({2.0,0.8}+nn) b[9]=m.({1.7,-0.3}+nn) b[10]=m.({1.6,-0.6}+nn) b[11]=m.({1.4,-0.8}+nn) b[12]=m.({0.7,-0.7}+nn) b[13]=m.({0.5,-0.4}+nn) o3=BlackBezier p3=B2Poly n=2 b[0]=m.({.9,1.18}+nn) b[1]=m.({1.2,1.1}+nn) b[2]=m.({1.45,.9}+nn) o10=BlackBezier p10=B2Poly ****** ****** A1=Show[o1,o2,o3, o10,p1,p2,p3, p10 , PlotRange->All] ****** ****** Show[o1,o2,o3, o10, PlotRange->All] ****** 鏡文字をかいてみましょう。 ****** m={{-1,0},{0,1}} n=2 b[0]=m.({-.45,1}+nn) b[1]=m.({0,.95}+nn) b[2]=m.({.57,1.1}+nn) o1=RedBezier p1=B2Poly b[0]=m.({0.1,1.4}+nn) b[1]=m.({0.1,1}+nn) b[2]=m.({0.11,-0.6}+nn) o2=RedBezier p2=B2Poly n=13 b[0]=m.({0.11,-0.6}+nn) b[1]=m.({0.11,-0.7}+nn) b[2]=m.({-0.2,-0.8}+nn) b[3]=m.({-1.3,-0.2}+nn) b[4]=m.({-0.9,-0.1}+nn) b[5]=m.({-0.3,0.1}+nn) b[6]=m.({-0.1,0.4}+nn) b[7]=m.({1.7,1.4}+nn) b[8]=m.({2.0,0.8}+nn) b[9]=m.({1.7,-0.3}+nn) b[10]=m.({1.6,-0.6}+nn) b[11]=m.({1.4,-0.8}+nn) b[12]=m.({0.7,-0.7}+nn) b[13]=m.({0.5,-0.4}+nn) o3=RedBezier p3=B2Poly n=2 b[0]=m.({.9,1.18}+nn) b[1]=m.({1.2,1.1}+nn) b[2]=m.({1.45,.9}+nn) o10=RedBezier p10=B2Poly ****** ****** A2=Show[o1,o2,o3, o10,p1,p2,p3, p10 , PlotRange->All] ****** 文字を変形しましょう ****** m={{1,1/2},{1,2}} n=2 b[0]=m.({-.45,1}+nn) b[1]=m.({0,.95}+nn) b[2]=m.({.57,1.1}+nn) o1=BlueBezier p1=B2Poly b[0]=m.({0.1,1.4}+nn) b[1]=m.({0.1,1}+nn) b[2]=m.({0.11,-0.6}+nn) o2=BlueBezier p2=B2Poly n=13 b[0]=m.({0.11,-0.6}+nn) b[1]=m.({0.11,-0.7}+nn) b[2]=m.({-0.2,-0.8}+nn) b[3]=m.({-1.3,-0.2}+nn) b[4]=m.({-0.9,-0.1}+nn) b[5]=m.({-0.3,0.1}+nn) b[6]=m.({-0.1,0.4}+nn) b[7]=m.({1.7,1.4}+nn) b[8]=m.({2.0,0.8}+nn) b[9]=m.({1.7,-0.3}+nn) b[10]=m.({1.6,-0.6}+nn) b[11]=m.({1.4,-0.8}+nn) b[12]=m.({0.7,-0.7}+nn) b[13]=m.({0.5,-0.4}+nn) o3=BlueBezier p3=B2Poly n=2 b[0]=m.({.9,1.18}+nn) b[1]=m.({1.2,1.1}+nn) b[2]=m.({1.45,.9}+nn) o10=BlueBezier p10=B2Poly A3=Show[o1,o2,o3, o10,p1,p2,p3, p10 , PlotRange->All] ****** 文字を変形しましょう ****** m={{1,1/2},{0,1}} n=2 b[0]=m.({-.45,1}+nn) b[1]=m.({0,.95}+nn) b[2]=m.({.57,1.1}+nn) o1=RedBezier p1=B2Poly b[0]=m.({0.1,1.4}+nn) b[1]=m.({0.1,1}+nn) b[2]=m.({0.11,-0.6}+nn) o2=RedBezier p2=B2Poly n=13 b[0]=m.({0.11,-0.6}+nn) b[1]=m.({0.11,-0.7}+nn) b[2]=m.({-0.2,-0.8}+nn) b[3]=m.({-1.3,-0.2}+nn) b[4]=m.({-0.9,-0.1}+nn) b[5]=m.({-0.3,0.1}+nn) b[6]=m.({-0.1,0.4}+nn) b[7]=m.({1.7,1.4}+nn) b[8]=m.({2.0,0.8}+nn) b[9]=m.({1.7,-0.3}+nn) b[10]=m.({1.6,-0.6}+nn) b[11]=m.({1.4,-0.8}+nn) b[12]=m.({0.7,-0.7}+nn) b[13]=m.({0.5,-0.4}+nn) o3=RedBezier p3=B2Poly n=2 b[0]=m.({.9,1.18}+nn) b[1]=m.({1.2,1.1}+nn) b[2]=m.({1.45,.9}+nn) o10=RedBezier p10=B2Poly A4=Show[o1,o2,o3, o10, PlotRange->All] ****** ****** Show[A1,A2] ****** ****** Show[A1,A3] ****** ****** Show[A1,A4] ******