0
0

はじめに

先日、授業の課題でMathematicaのGraphics機能を使って絵を描く、という課題が出たので、アニメーションを作りました。
その備忘録です。

Mathematicaでのアニメーション作成

まず、Mathematicaでアニメーションを作るにはDoループ、Animate、DynamicModuleなどの方法があります。
私が作ろうとしていたアニメーションは、一般的なアニメーションの作成方法と同様に、1秒間に何度か図形を切り替えてアニメーションにしようとしていたため、より高度な扱いができるDynamicModuleを採用しました。
Animateうまく動かせなかった

DynamicModuleによるアニメーションのコード

DynamicModule[{i = 1}, 
 Circles = {Circle[{0, 2}, 1], Circle[{1, 1.75}, 1], 
   Circle[{2, 1.5}, 1]};
 ground = Line[{{-2, -2}, {2, -2}}];
 Dynamic[
  Graphics[{ground, Circles[[i]]}, PlotRange -> {{-6, 6}, {-6, 6}}]], 
 Initialization :> (RunScheduledTask[If[i < 3, i++, i = 1], 0.5])]

動かすとこんな感じになります。

animation.gif

コードの中身を見ていきます。

DynamicModule[{i = 1},

ここではDynamicModuleを利用し、最初に変数iに1を代入しています。
iは配列のi番目の要素を出力する時に使うのですが、最初に1つ目の要素を出力するために1を代入しています。ちなみに、Mathematicaは1-index(配列のn番目の数え方が0ではなく1から始まる)なので、0を入れると何も出力されません。

Circles = {Circle[{0, 2}, 1], Circle[{1, 1.75}, 1], 
  Circle[{2, 1.5}, 1]};
ground = Line[{{-2, -2}, {2, -2}}];

出力する図形です。
円はアニメーションとして動かしているので、Circlesは配列になっています。
地面の線は固定されているので、配列ではなくLineだけになっています。

Dynamic[
  Graphics[{ground, Circles[[i]]}, PlotRange -> {{-6, 6}, {-6, 6}}]], 

DynamicModuleで動かすGraphicsの変数がまとまっています。
groundとCirclesのi番目をGraphicsで表示、Graphicsの描画範囲をPlotRangeで指定しています。

Initialization :> (RunScheduledTask[If[i < 3, i++, i = 1], 0.5])]

If[i < 3, i++, i = 1]の部分で、iが[1, 2, 3]の値を取ることを、0.5の部分で0.5秒ごとに画像を更新することを指定しています。

補足

ちなみに、アニメーションの出力はExport関数を使うとgif形式で出力できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0