Maxima のアニメーション

アニメーション出力にもいろいろあって,inline は Maxima の画面にすぐ出るので便利。出力グラフを選択して(クリックして)パラメータの変化をアニメでも見れるし,スライダーでも変化できるし,マウスのホィールでも変化できるのでとても便利。

使う関数は with_slider,with_slider_draw
with_slider(
リストの名前,リストの実際,
関数
)

リストは2つならa,[0,1]とかでいい。

with_slider(
a,makelist(i,i,-4,4)/10,
a*x^2,[x,-10,10],[y,-10,10]
)

としたのが,次のもの。

Result
これもだんだん楽になり,15年6月現在では

wxanimate(i,9,(i-5)/10*x^2,[x,-10,10],[y,-10,10]);

と,1行で済む。
グラフをもっと精密にとなれば,draw を使うことになる。

(%i1) with_slider_draw(
    k,makelist(i,i,1,7),
    proportional_axes = xy,
    xrange = [-3,3],
    yrange = [-3,3],
    xaxis=true,
    yaxis=true,
    grid = true,
    title = "Circle and Line" ,
    label([sconcat("k=",(k-4)*sqrt(5)),-1,2]),
    implicit(x^2+y^2=1,x,-3,3,y,-3,3),
    explicit(2*x+(k-4)*sqrt(5),x,-3,3)
);

Result

Imagemagick というソフトをインストールしておけば,アニメジフを簡単に作ってくれる。’11年8月現在。

(%i1) load(draw)$

(%i2) cyc(r):=block(
    if r>0 then q:3+abs(r) else q:1,
    with_slider_draw(
        k,makelist(i,i,0,10),
        proportional_axes = xy,
        xrange = [-q,q],
        yrange = [-q,q],
        xaxis=true,
        yaxis=true,
        grid = true,
        title = "epi-hypo-cycloid",
        label([sconcat("Ratio of radius 1:",r),-1,q-q/10]),
        implicit((x-(r+1)*cos(2*%pi*k/10))^2+(y-(r+1)*sin(2*%pi*k/10))^2=r^2
            ,x,-q,q,y,-q,q),
        implicit(x^2+y^2=1,x,-q,q,y,-q,q),
        color = red,
        parametric((r+1)*cos(t)-r*cos(t*(1+r)/r),(r+1)*sin(t)-r*sin(t*(1+r)/r)
            ,t,0,2*%pi*k/10)
    )
)$

これで, $r$ に1以下の正の数,-1より大きい負の数をいれると,外サイクロイドと内サイクロイドをアニメします。
cyc(-1/3); とした例。
animation
3次元はだいぶ前になるがどこかで with_slider_draw3d というのを見た気がしたが,探してみると無いようだ(11年12月)。
(12年5月)さて,出始めました with_slider_draw3d。作ってみると

--> with_slider_draw3d(
    k,makelist(k,k,1,10),
    dimensions=[500,500],
    xrange=[-2,2],
    yrange=[-2,2],
    parametric(
        (cos(k*2*%pi/10+%pi/2)-cos(k*2*%pi/10))*s+cos(k*2*%pi/10),
        (sin(k*2*%pi/10+%pi/2)-sin(k*2*%pi/10))*s+sin(k*2*%pi/10),
        -2*s+1,s,0,1)
    )$

Result

以下は with_slider_draw3d がなかったときのもの,比べると結構楽になった。
進化してる。あとはトレースモード(軌跡が残る)ができるといいんだが。

--> load(draw)$

--> apply(draw, append([terminal=animated_gif, delay=50,file_name="d:/fs/line-rot.gif"],
makelist(
    gr3d(
        xrange=[-2,2],
        yrange=[-2,2],
        parametric(
        (cos(k*2*%pi/10+%pi/2)-cos(k*2*%pi/10))*s+cos(k*2*%pi/10),
        (sin(k*2*%pi/10+%pi/2)-sin(k*2*%pi/10))*s+sin(k*2*%pi/10),
        -2*s+1,s,0,1)
    ),
k,1,10)))$

line-rot
Hyperboloid
一葉双曲面でした。
ちなみにこれは Gepgebra で作ったアナグリフ。ぜひ,青赤メガネで見てください。
青赤メガネがなかったら文房具屋で赤いセロファンと青いセロファンを買ってきて作りましょう。
inserted by FC2 system inserted by FC2 system