古いアニメを再生するには?
ここではversionの古いMathematicaで作られた古いアニメをversion 12のような新しいMathematicaで再生するためのTIPSをまとめてみます。
Do[
enbthe = N[ (y[t] /. ey)[[1]] ];
enbkaithe= N[(wr/er-1) enbthe];
Show[waku
,enban[(wr-er) Cos[enbthe]
,-(wr-er) Sin[enbthe]
,er,enbkaithe,-wr,wr,-wr,er
]
,DisplayFunction->$DisplayFunction
]
,{t,0,jik,dt}
]
以前はDo[]文でShowをさせると、たくさんの画像ファイルが作られて、これを次々に切り替えることによりアニメーションを再生することができました。これは次の様にManipulate[]にすれば再生させることができます。
Manipulate[
enbthe = N[ (y[t] /. ey)[[1]] ];
enbkaithe= N[(wr/er-1) enbthe];
Show[waku
,enban[(wr-er) Cos[enbthe]
,-(wr-er) Sin[enbthe]
,er,enbkaithe,-wr,wr,-wr,er
]
,DisplayFunction->$DisplayFunction
]
,{t,0,jik,dt}
]
適宜、再生速度をおとしたりしてみましょう。
次のプログラムではDo[]をManipulate[]にしただけではうまく動きません。
a=0.5;k=1.0;k'=0.5;m=1.0;d=1.0;h=0.1;l=1.0;
T=4Pi/(Sqrt[(k+2k')/m]-Sqrt[k/m]);sep=0.5;
x1[t_]:=a/2(Cos[Sqrt[k/m]t]-Cos[Sqrt[(k+2k')/m]t]);
x2[t_]:=a/2(Cos[Sqrt[k/m]t]+Cos[Sqrt[(k+2k')/m]t]);
Obj1=Cuboid[{x1[t]-d/2-h/2,0-h/2,0-h/2},{x1[t]-d/2+h/2,0+h/2,0+h/2}];
Obj2=Cuboid[{x2[t]+d/2-h/2,0-h/2,0-h/2},{x2[t]+d/2+h/2,0+h/2,0+h/2}];
Do[
Show[
Graphics3D[{Obj1,Obj2}],
ParametricPlot3D[{u,
h/2 Cos[30(l-x1[t])/l u],
h/2 Sin[30(l-x1[t])/l u]
},
{u,-d/2-l,x1[t]-d/2},
DisplayFunction->Identity
]
そこで、外で定義しているx1,x2, Obj1, Obj2をManipulate[]の内側に入れてあげます。Manipulateは局所変数を作るので、外部と若干切り離されます。aとかkは参照できるのですが、外部で定義されたx1, x2は参照できなくなります。そこで、内側で定義するようにします。
a=0.5;k=1.0;k'=0.5;m=1.0;d=1.0;h=0.1;l=1.0;
T=4Pi/(Sqrt[(k+2k')/m]-Sqrt[k/m]);sep=0.5;
Manipulate[
x1[t_]:=a/2(Cos[Sqrt[k/m]t]-Cos[Sqrt[(k+2k')/m]t]);
x2[t_]:=a/2(Cos[Sqrt[k/m]t]+Cos[Sqrt[(k+2k')/m]t]);
Obj1=Cuboid[{x1[t]-d/2-h/2,0-h/2,0-h/2},{x1[t]-d/2+h/2,0+h/2,0+h/2}];
Obj2=Cuboid[{x2[t]+d/2-h/2,0-h/2,0-h/2},{x2[t]+d/2+h/2,0+h/2,0+h/2}];
Show[
Graphics3D[{Obj1,Obj2}],
ParametricPlot3D[{u,
h/2 Cos[30(l-x1[t])/l u],
h/2 Sin[30(l-x1[t])/l u]
},
{u,-d/2-l,x1[t]-d/2},
DisplayFunction->Identity
]
DoをTableにして、全体をListAnimate[]でくくる
|
以前は画像を並べていたので、Tableを使ってそれらの画像をリストに入れます。そのリストをアニメーションとして再生するのがListAnimated[]です。この方法だと、局所変数の問題が省けます。
Do[
Show[
Graphics3D[{Obj1,Obj2}],
ParametricPlot3D[{u,
ListAnimate[
Table[
Show[
Graphics3D[{Obj1,Obj2}],
ParametricPlot3D[{u,
画像リストであるgifsをListAnimate[]でくくる
|
アニメをPPTに張るのに、gifsという画像リストを作り、これをExport[]する方法を紹介しています。 Mathematica バージョン6以上にお いて、GIFアニメを作る方法
gifs = {};
Do[
AppendTo[gifs,
Graphics[figures
, options]
]
, {t, 0, timeend, dt}
]
このときには、できたgifsをListAnimate[]で再生することができます。
gifs = {};
Do[
AppendTo[gifs,
Graphics[figures
, options]
]
, {t, 0, timeend, dt}
]
ListAnimate[gifs]
ShowAnimation[]をListAnimate[]にする
|
以前はShowAnimation[]を使っていましたが、これをListAnimate[]にします。
Needs["Graphics`Animation`"]
ShowAnimation[gifs]
その際にはNeeds[]でパッケージを読む必要がないので、この行は消します。
ListAnimate[gifs]