関数のグラフを描くプログラムは,たいていの場合,次のプログラムの100行から140行までを修正して作ることができます。 100 DEF f(x)=(1+1/x)^x 110 LET left=-5 120 LET right=5 130 LET bottom=-1 140 LET top=9 150 SET WINDOW left, right, bottom, top 160 ASK PIXEL SIZE (left, bottom; right, top) p, q 170 DRAW axes 180 FOR x=left TO right STEP (right-left)/(p-1) 190 WHEN EXCEPTION IN 200 PLOT LINES: x, f(x); 210 USE 220 PLOT LINES 230 END WHEN 240 NEXT x 250 END
ASK PIXEL SIZEは,対角の頂点を指定した矩形内にあるピクセル数を調べる命令です。
leftとrightの位置にはそれぞれ1ピクセルが存在しますから,leftとrightとの間のピクセル間隙の個数はp-1です(植木算)。
そこで,180行のように,xの値をleftからrightまで(right-left)/(p-1)刻みで変化させて計算すれば効率よくグラフが描けます。 |
関数値の変動の激しい関数のグラフを描く場合には,例1のプログラムのように画面解像度にあわせてxの値を変化させたのでは十分ではないことがあります。 100 DEF f(x)=SIN(1/x) 110 LET left=-4 120 LET right=4 130 LET bottom=-4 140 LET top=4 150 SET WINDOW left, right, bottom, top 170 DRAW axes 180 FOR x=left TO right STEP (right-left)/5000 190 WHEN EXCEPTION IN 200 PLOT LINES: x, f(x); 210 USE 220 PLOT LINES 230 END WHEN 240 NEXT x 250 END
|
例1や例2の手法がうまく機能しない場合もあります。 100 DEF f(x)=TAN(x) 110 LET left=-5 120 LET right=5 130 LET bottom=-5 140 LET top=5 のように変えて正接関数のグラフを描くと,右図のようになってしまいます。 |
このような場合は,連続な折れ線で描くのをあきらめ,多くの点をとるという基本に忠実なプログラムとします。 100 DEF f(x)=TAN(x) 110 LET left=-5 120 LET right=5 130 LET bottom=-5 140 LET top=5 150 SET WINDOW left, right, bottom, top 160 SET POINT STYLE 1 170 DRAW axes 180 FOR x=left TO right STEP (right-left)/5000 190 WHEN EXCEPTION IN 200 PLOT POINTS: x, f(x) 210 USE 230 END WHEN 240 NEXT x 250 END これで右図のようなグラフが得られます。 |
三角関数のグラフを描くのが目的である場合は,角の大きさの単位を度に変えると厄介な問題を回避できることがあります。 100 OPTION ANGLE DEGREES 110 DEF f(x)=TAN(x) 120 LET left=-320 130 LET right=320 140 LET bottom=-5 150 LET top=5 160 SET WINDOW left, right, bottom, top 170 DRAW axes(90,1) 180 FOR x=left TO right 190 WHEN EXCEPTION IN 200 PLOT LINES: x, f(x); 210 USE 220 PLOT LINES 230 END WHEN 240 NEXT x 250 END
|
BASICで方程式 f (x, y)=0 の表す曲線を描くのは簡単ではありません。 100 DEF f(x,y)=x^2+y^2 - 3*x*y +1 110 LET left=-4 120 LET right=4 130 LET bottom=-4 140 LET top=4 150 SET POINT STYLE 1 160 SET WINDOW left,right,bottom,top 170 DRAW axes 180 FOR y=bottom TO top STEP (top-bottom)/2000 190 LET x=left 200 LET z0=f(x,y) 210 FOR x=left TO right STEP (right-left)/2000 220 LET z=f(x,y) 230 IF z0*z<0 THEN PLOT POINTS: x,y 240 LET z0=z 250 NEXT x 260 NEXT y 270 END
y の値を固定して,x の値を左端から右端まで少しずつ変化させ,f (x, y)の値の符号が変わったら,そのすぐ近くにf (x, y)=0となる点があるはずなのでそこに点を描きます。 |
100 DEF f(x,y)=(1/(x-y))-x+3*y 110 LET left=-5 120 LET right=5 130 LET bottom=-5 140 LET top=5 150 SET POINT STYLE 1 160 SET WINDOW left,right,bottom,top 170 DRAW axes 180 FOR y=bottom TO top STEP (top-bottom)/2000 190 LET x=left 200 WHEN EXCEPTION IN 210 LET z0=f(x,y) 220 USE 230 LET z0=1 240 END WHEN 250 FOR x=left TO right STEP (right-left)/2000 260 WHEN EXCEPTION IN 270 LET z=f(x,y) 280 IF ABS(z0)<1 AND ABS(z)<1 AND z0*z<0 THEN PLOT POINTS: x,y 290 LET z0=z 300 USE 310 LET z0=1 320 END WHEN 330 NEXT x 340 NEXT y 350 END |