なめらかに動くアニメーションの作り方

 十進BASIC独自の拡張であるhidden draw モードを使うと,描画中は画面を更新せず,描き終った後に画面に反映させることができます。そうすることで滑らかな動きが実現できます。
 具体的には次のようにします。

100 OPTION ARITHMETIC NATIVE 
110 DEF f(x)=x^2 + (a-4)*x + (a^2-3*a +1)
120 SET WINDOW -3,6,-5,5
130 FOR a=-3 TO 4 STEP 0.01
140    SET DRAW MODE Hidden              ! hidden draw モードへ移行
150    CLEAR                             ! 初期化           
160    DRAW axes
170    SET LINE COLOR 1
180    FOR x=-3 TO 6 STEP 0.01
190       PLOT LINES: x,f(x);
200    NEXT x
210    PLOT LINES
220    SET LINE COLOR 3
230    FOR t=-3 TO a STEP 0.01
240       PLOT LINES: -(t-4)/2, (3*t^2-4*t-12)/4;
250    NEXT t
260    PLOT POINTS:  -(a-4)/2, (3*a^2-4*a-12)/4
270    SET DRAW MODE explicit            ! explicit draw モードへ移行
280    WAIT DELAY 0.01                   ! スピードを調節
290 NEXT a
300 END


 繰り返しの中での無駄な計算を減らすためにMAT PLOT文を使うことができます。次の例では前回の繰り返し中で計算した座標は配列vertexに残されています。

100 OPTION ARITHMETIC NATIVE 
110 OPTION BASE 0
120 DIM vertex(700,1)
130 DEF f(x)=x^2 + (a-4)*x + (a^2-3*a +1)
140 SET POINT COLOR 4
150 SET WINDOW -3,6,-5,5
160 FOR a=-3 TO 4 STEP 0.01
170    SET DRAW MODE Hidden              ! hidden draw モードへ移行
180    CLEAR                             ! 初期化           
190    DRAW axes
200    LET u=-(a-4)/2
210    LET v=(3*a^2-4*a-12)/4
220    SET LINE COLOR 3
230    LET L=ROUND((a+3)*100)
240    LET vertex(L,0)=u
250    LET vertex(L,1)=v
260    MAT PLOT LINES, LIMIT L+1 : vertex
270    SET LINE COLOR 1
280    FOR x=-3 TO 6 STEP 0.01
290       PLOT LINES: x,f(x);
300    NEXT x
310    PLOT LINES
320    PLOT POINTS: u,v 
330    SET DRAW MODE explicit            ! explicit draw モードへ移行
340 NEXT a
350 END


 高速化の手法にはNOTXOR モードの利用もあります。
 NOTXORモードでは,白地に描いた場合には指定された色で描かれますが,それ以外の色の点に描くと,すでにある点の色と指定された色とで定まる特別な色で描かれます。その色は,NOTXORモードで2度描きすると,元に戻るように定められた色です。

100 OPTION ARITHMETIC NATIVE
110 DEF f(x)=x^2 + (a-4)*x + (a^2-3*a +1)
120 SUB DrawCurve
130    SET DRAW MODE hidden
140    FOR x=-3 TO 6 STEP 0.1
150       PLOT LINES: x,f(x);
160    NEXT x
170    PLOT LINES
180    SET DRAW MODE explicit
190 END SUB
200 SET WINDOW -3,6,-5,5
210 SET POINT COLOR "RED" 
220 DRAW axes
230 FOR a=-3 TO 4 STEP 0.1
240    SET DRAW MODE NOTXOR    
250    CALL DrawCurve
260    WAIT DELAY 0.05       ! 0.05秒,休止
270    CALL DrawCurve        ! 二度描きすると元の色に戻る
280    SET DRAW MODE OVERWRITE
290    PLOT POINTS:  -(a-4)/2, (3*a^2-4*a-12)/4
300 NEXT a
310 END



戻る