パソコン活用研究5番街(Visual Basic、Excel(VBA)、BASIC プログラミング研究)
Basicによるグラフィック命令の違い
--------------------------------------------------------------------------------------------
グラフィック関連の命令はBASIC毎に仕様、文法の相違が激しい部分の最たるものです。
ハードの違いにより、実装される機能がかなり違います。今回は、Lineについて各Basicの
違いを補足しておきます。
--------------------------------------------------------------------------------------------
N88互換Basic for winでの実行例はグラフィックの基本にもあります。
3 Pset
(1) N88互換Basic for win
Pset (X,Y), <パレット番号>
画面上の点(X,Y)に<パレット番号>で指定した色で点を描きます。
(2) N88 Basic
Pset (X,Y), <パレット番号>
画面上の点(X,Y)に<パレット番号>で指定した色で点を描きます。
円を描いてみます。
sin, cosを用いて、媒介変数nを使い、X(n)=R*cos(2π/n) Y(n)=R*sin(2π/n) と表記する方法です。
※Psetで円を描くアルゴリズムについてはグラフィックの基本3(円を描く)を参照して下さい。
N88互換Basic for Winの実例で解説しています。
本家のN88Basicでは1ドットの縦横比が異なるので、縦長の楕円になります。
(※N88互換Basic for winでは同じコードで真円が描ける)
y(縦軸)を1/2にすれば真円になる。
F-BasicのところでPsetで真円を描く実例をあげていますが、本家のN88Basicでも同様です。
(3) F-Basic
Pset (X,Y [ , <カラーコード>] [, <機能>] )
画面上の点(X,Y)に<カラーコード>で指定した色で点を描きます。
<機能> AND,OR,XORが指定できます。現在の画面上に表示されている色とカラーコードとの論理演算の結果
の色が表示されます。
Psetを使って円を描く。
円の方程式(Rは半径)を使った方法です。
※Psetで円を描くアルゴリズムについてはグラフィックの基本3(円を描く)を参照して下さい。
N88互換Basic for Winの実例で解説しています。
N88互換Basic for Winだときれいな真円になりますが、1ドットの縦横比の違いからF-Basicでは
縦長の楕円が描かれます。
Psetによる円とSinカーブを描いてみます。
今度は円を描くのに
sin, cosを用いて、媒介変数nを使い、X(n)=R*cos(2π/n) Y(n)=R*sin(2π/n) と表記するアプローチです
F-Basicでは1ドットの縦横比の違いからやはり縦長になってしまいます。
エミュレータXM-7の場合は、縦:横 = 2:1なので縦を1/2にすると本来の円、Sinカーブが描けます。
35行目、85行目にY(縦座標)を1/2にする処理を追加しました。
真円ときれいなSinカーブが描けました。
Preset
(1)N88互換Basic for win
Preset (X,Y)
画面上の点(X,Y)を、Color命令で指定した<バックグラウンドカラー>で消去します。
(3) F-Baisc
Preset (X,Y)
画面上の点(X,Y)を、Color命令で指定した<バックグラウンドカラー>で消去します。
LINE
Line (X1,Y1)-(X2,Y2),<線色>,BF(またはB),<面色>
点(X1,Y1)と点(X2,Y2)を結ぶ直線を指定された<線色>で描きます。
Bを指定すると、2つの点を頂点とする長方形を描き、BFを指定するとその長方形の内部を<面色>で
塗りつぶします。<面色>を省略すると、<線色>で塗りつぶします。
では、楕円やら長方形を作ってみましょう。
20行目が「1」の円。
30行目が「2」の3/4の楕円
40行目は「3」 楕円内塗りつぶし
50行目は長方形
20 CIRCLE (150,100),50,1,0,2*3.14,1 30 CIRCLE (400,150),100,1,0,1.5*3.14,2 40 CIRCLE (150,260),100,1,-0.25*3.14,-1.5*3.14,1,F,6 50 LINE(350,300)-(500,350),2,BF,5 |
Paint
Paint (X,Y),<面色>,<境界色>
点<X,Y>を中心として、<境界色>で指定した色で囲まれた領域を<面色>で指定した色で塗りつぶします。
<境界色>が省略された場合、<面色>が使われます。
今度は、Paintも使ってもう少し、こったことをしてみましょう。
70〜120行目は、円グラフの表示をしています。データは1000行目から読み込んでいます。
95行目は、BASICの計算誤差のため「終了角度」計算結果が2πを越してしまうと、CIRCLE命令でエラー
がでてしまうので、こんな調整をしています。
140〜200行目は右の多角形の描画と、Paintによる色の塗りつぶしです。データは1100行のものを読み込ん
でいます。
70 cls:st=0 80 for i=1 to 5 90 read d:en=st+d/100*3.14*2 95 if en>2*3.14 then en=2*3.14 100 circle (400,100),100,1,-st,-en,1,f,i 110 st=en 120 next 130 ' 140 read x(0),y(0) 150 for i=1 to 5 160 read x(i),y(i) 170 line (x(i-1),y(i-1))-(x(i),y(i)),2 180 next 190 line(x(i-1),y(i-1))-(x(0),y(0)),2 200 paint (50,50),4,2 1000 data 35,25,15,10,20 1100 data 5,5,5,200,100,250,200,200,200,50,75,30 |
Pset
Pset (X,Y), <パレット番号>
画面上の点(X,Y)に<パレット番号>で指定した色で点を描きます。
Preset
Preset (X,Y)
画面上の点(X,Y)を、Color命令で指定した<バックグラウンドカラー>で消去します。
では、Psetを使って、図形を表示してみましょう。円や多角形以外の図形を描画するときは、Psetを使い、点を
打っていくというケースが多いと思います。
例えば、グラフや放物線などを描く場合などは、座標(x,y)を媒介変数で表し、Psetで点を打ちます。
220〜250行目は円を描いています。
260〜300行目はSinカーブです。
220 for i=0 to 200 225 t=i*3.14*2/200 230 x=cos(t)*100+200:y=sin(t)*100+100 240 pset(x,y),5 250 next 260 for i=0 to 400 270 t=i*3.14*2/100 280 x=i:y=sin(t)*50+300 290 pset(x,y),2 300 next |
最後に今回の全コードをのせておきます。
10 cls
20 CIRCLE (150,100),50,1,0,2*3.14,1
30 CIRCLE (400,150),100,1,0,1.5*3.14,2
40 CIRCLE (150,260),100,1,-0.25*3.14,-1.5*3.14,1,F,6
50 LINE(350,300)-(500,350),2,BF,5
60 a$=input$(1)
70 cls:st=0
80 for i=1 to 5
90 read d:en=st+d/100*3.14*2
95 if en>2*3.14 then en=2*3.14
100 circle (400,100),100,1,-st,-en,1,f,i
110 st=en
120 next
130 '
140 read x(0),y(0)
150 for i=1 to 5
160 read x(i),y(i)
170 line (x(i-1),y(i-1))-(x(i),y(i)),2
180 next
190 line(x(i-1),y(i-1))-(x(0),y(0)),2
200 paint (50,50),4,2
210 a$=input$(1):cls
220 for i=0 to 200
225 t=i*3.14*2/200
230 x=cos(t)*100+200:y=sin(t)*100+100
240 pset(x,y),5
250 next
260 for i=0 to 400
270 t=i*3.14*2/100
280 x=i:y=sin(t)*50+300
290 pset(x,y),2
300 next
1000 data 35,25,15,10,20
1100 data 5,5,5,200,100,250,200,200,200,50,75,30
TOP PAGE
>Basic活用研究目次