================ BEZIER5 ================ Mathematicaを用いた練習を行います。 Mathematica は毎回使いますから、GNOMEパネルの ランチャーに登録しておきましょう。 Mathematica は 「センターメニュー」-「アプリケーション」-「Mathematic数式処理」 にあります。 適当にプログラムの中の数字などを変更して試してみてください。 以下の説明の中で*****ではさまれた部分は Mathematica に入力する文字列です。自分で入力し Shift+Enter(Return) キーで実行します。 上から順に,すべて実行するようにしてください。 上で定義した関数を後で利用すること があります。 先週は、ベジエ曲線を用いて、文字を描いてみましたが、 これを Mathematica にあるanimation 機能を用いて動かして見ましょう。 まず、文字「ゆ」を動かします。 ****** 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 -> True, PlotStyle -> {Thickness[0.005]}] Bezier[pt_, color_] := ParametricPlot[Evaluate[SS[n]], {t, 0, 1}, AspectRatio -> Automatic, Axes -> True, PlotRange -> {{-9, 9}, {-9, 9}}, PlotStyle -> {Thickness[pt], color}] ****** まず回転する 行列を決めます。 ****** mm[w_] = {{Cos[4*Pi*w], -Sin[4*Pi*w]}, {Sin[4*Pi*w], Cos[4*Pi*w]}} ****** 「ゆ」の動きを平行移動により定めます。 ****** zz[w_] = {3*Cos[2*Pi*w], 3*Sin[6*Pi*w]} ****** 先週作った「ゆ」ファイルから、コピーしてきます。 「ゆ」の一部分です。 ****** yy = 0.02 RR = Blue TT = Red n = 3 b[0] = {0.1, -0.3} b[1] = {-0.2, -2} b[2] = {-0.2, -2} b[3] = {0, -4} p1 = B2Poly o1 = Bezier[yy, RR] ****** この例では48枚の絵を描きます。qq1[i] の名前の付け方にきをつけて下さい。 ****** Clear[vvv] m = mm[vvv] z = zz[vvv] n = 3 b[0] = m.b[0] + z b[1] = m.b[1] + z b[2] = m.b[2] + z b[3] = m.b[3] + z For[i = 0; 0, i < 48, i++, vvv = i/48; qq1[i] = Bezier[yy, TT]] ****** 同じことをくり返します。 先週作った「ゆ」ファイルから、コピーしてきます。 ****** n = 4 b[0] = {0, -4} b[1] = {0, -2.5} b[2] = {0, -2.5} b[3] = {1.5, -0.5} b[4] = {3, -0.5} p2 = B2Poly o2 = Bezier[yy, RR] ****** 今度は、qq2[i] と名前をつけました。 ****** Clear[vvv] m = mm[vvv] z = zz[vvv] n = 4 b[0] = m.b[0] + z b[1] = m.b[1] + z b[2] = m.b[2] + z b[3] = m.b[3] + z b[4] = m.b[4] + z For[i = 0; 0, i < 48, i++, vvv = i/48; qq2[i] = Bezier[yy, TT]] ****** ****** n = 3 b[0] = {3, -0.5} b[1] = {4, -0.5} b[2] = {5, -0.9} b[3] = {5, -2.5} p3 = B2Poly o3 = Bezier[yy, RR] Clear[vvv] m = mm[vvv] z = zz[vvv] n = 3 b[0] = m.b[0] + z b[1] = m.b[1] + z b[2] = m.b[2] + z b[3] = m.b[3] + z For[i = 0; 0, i < 48, i++, vvv = i/48; qq3[i] = Bezier[yy, TT]] ****** ****** n = 3 b[0] = {5, -2.5} b[1] = {5, -4} b[2] = {4, -4.5} b[3] = {3, -4.5} p4 = B2Poly o4 = Bezier[yy, RR] Clear[vvv] m = mm[vvv] z = zz[vvv] b[0] = m.b[0] + z b[1] = m.b[1] + z b[2] = m.b[2] + z b[3] = m.b[3] + z For[i = 0; 0, i < 48, i++, vvv = i/48; qq4[i] = Bezier[yy, TT]] ****** ****** n = 3 b[0] = {3, -4.5} b[1] = {2.0, -4.5} b[2] = {1.5, -3.5} b[3] = {1.3, -2.8} p5 = B2Poly o5 = Bezier[yy, RR] Clear[vvv] m = mm[vvv] z = zz[vvv] b[0] = m.b[0] + z b[1] = m.b[1] + z b[2] = m.b[2] + z b[3] = m.b[3] + z For[i = 0; 0, i < 48, i++, vvv = i/48; qq5[i] = Bezier[yy, TT]] ****** ****** n = 4 b[0] = {2.7, 0.2} b[1] = {3, -3} b[2] = {3, -4.8} b[3] = {2.5, -5.1} b[4] = {1.5, -5.3} p6 = B2Poly o6 = Bezier[yy, RR] Clear[vvv] m = mm[vvv] z = zz[vvv] b[0] = m.b[0] + z b[1] = m.b[1] + z b[2] = m.b[2] + z b[3] = m.b[3] + z b[4] = m.b[4] + z For[i = 0; 0, i < 48, i++, vvv = i/48; qq6[i] = Bezier[yy, TT]] ****** ここで、Kernel - Delete All Output を実行しておいて下さい。 では、これらを用いてアニメーションを完成しましょう。 ****** For[i = 0; 0, i < 48, i++, vvv = i/48; Show[qq1[i], qq2[i], qq3[i], qq4[i], qq5[i], qq6[i]]] ****** 48枚の絵を全て選んで、cell - Amimate Selected Graphics を実行してください。 次に、行列を決めた部分 mm[w_] = {{Cos[4*Pi*w], -Sin[4*Pi*w]}, {Sin[4*Pi*w], Cos[4*Pi*w]}} を ****** mm[w_] = {{1, 0}, {0, 1}} ****** に変えて、もう一度、実行してみましょう。 アニメーションを完成する前に、 Kernel - Delete All Output を実行しておいて下さい。 その後、 ****** For[i = 0; 0, i < 48, i++, vvv = i/48; Show[qq1[i], qq2[i], qq3[i], qq4[i], qq5[i], qq6[i]]] ****** を実行しましょう。 それでは、先週作成した文字をアニメーションで動かせるように プログラムを修正してみてください。