十進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