Asymptoteでアニメーションを作る
Asymptoteでアニメーションをつくってみた。
赤い四角形が360°回転する
import animation; size(10cm); animation A; path a=unitsquare; for(real i=0;i<360;i+=10){ save(); draw(rotate(i)*a,red); A.add(); restore(); } A.movie();
ラベル付きの正三角形を120°まわす。
import animation; size(5cm); animation A; path triangle=(0,1)--rotate(120)*(0,1)--rotate(-120)*(0,1)--cycle; for (real i=0; i<=120; i+=5){ save(); draw(rotate(i)*triangle); label("A",rotate(i)*(0,1),red); label("B",rotate(i)*rotate(120)*(0,1),green); label("C",rotate(i)*rotate(-120)*(0,1),blue); A.add(); restore(); } A.movie();
ラベル付の立方体をZ軸を中心に回す
倍率の変動を止めるために2の座標に白点をおいてしまっている。
他にやり方を知らないorz
import animation; import bsp; size(10cm); animation A; triple a1=(1,1,1); triple a2=(-1,-1,-1); triple b1=(-1,1,1); triple b2=(1,-1,-1); triple c1=(1,1,-1); triple c2=(-1,-1,1); triple d1=(1,-1,1); triple d2=(-1,1,-1); currentprojection=perspective(6,5,3); transform3 h=scale3(2.0); draw(h*a1,white); draw(h*a2,white); draw(h*b1,white); draw(h*b2,white); draw(h*c1,white); draw(h*c2,white); draw(h*d1,white); draw(h*d2,white); triple mid=(-1,0,1); /* #i<=120|240 triple mid=(1,1,1); triple mid=(-1,1,1); triple mid=(1,-1,1); triple mid=(-1,-1,1); #i<=90 | 180 | 270 triple mid=(0,0,1); triple mid=(0,1,0); triple mid=(1,0,0); #i<=180 triple mid=(0,1,1); triple mid=(1,0,1); triple mid=(1,1,0); triple mid=(1,-1,0); triple mid=(1,0,-1); triple mid=(-1,0,1); */ for (real i=0; i<=180; i+=5){ save(); transform3 r=rotate(i,mid); transform3 k=scale3(1.1); draw(r*(mid--scale3(-1)*mid)); label("o",k*r*mid); label("o",k*r*scale3(-1)*mid); draw(r*(a1--a2),red+2); draw(r*(b1--b2),green+2); draw(r*(c1--c2),blue+2); draw(r*(d1--d2),purple+2); draw(r*shift(-1,-1,-1)*scale3(2)*unitbox,gray); label("1",k*r*a1,red); label("1",k*r*a2,red); label("2",k*r*b1,green); label("2",k*r*b2,green); label("3",k*r*c1,blue); label("3",k*r*c2,blue); label("4",k*r*d1,purple); label("4",k*r*d2,purple); A.add(); restore(); } A.movie(delay=100); /* A.movie(loops=10,delay=50); */
追記 2009/03/10 09:45:14:
size(10cm)->size(10cm,10cm,10cm)とするとエラーが止まる。