円グラフ(扇形)の描き方

Full BASICには円や扇形を描く専用命令がありません。
扇形を描くためには,扇形を多角形で近似し,その全頂点の座標を2次元配列に代入してMAT PLOT文を適用します。
次のプログラムは,円グラフを描きます。
単位円の上端を基点として時計回りにθだけ回転した点の座標が(sinθ,cosθ)であることを利用しています。
扇形を1002角形で近似しています。(弧のために1001個の点を使う)

100 DATA "東京", 1257
110 DATA "神奈川",879
120 DATA "埼玉",705
130 DATA "千葉",605
140 DATA "茨城",297
150 DATA "群馬",202
160 DATA "栃木",201
170 DECLARE EXTERNAL PICTURE sector
180 SET WINDOW -1,1,-1,1
190 SET AREA STYLE "HATCH"
200 LET t=0
210 DO
220    READ IF MISSING THEN EXIT DO:s$,n
230    LET t=t+n
240 LOOP
250 RESTORE
260 LET a=0
270 LET i=0
280 DO 
290    LET i=i+1
300    SET AREA COLOR i 
310    SET AREA STYLE INDEX MOD(i-1,6)+1
320    READ IF MISSING THEN EXIT DO:s$,n
330    LET d=n/t*360
340    DRAW sector(a,d,s$)
350    LET a=a+d
360 LOOP
370 END
1000 EXTERNAL PICTURE sector(a,d,s$)
1010 OPTION ANGLE DEGREES
1020 DIM p(0 TO 1001, 2)
1030 FOR i=0 TO 1000
1040    LET t=a+d*i/1000
1050    LET p(i,1)=SIN(t)
1060    LET p(i,2)=COS(t)
1070 NEXT i   
1080 LET p(1001,1)=0
1090 LET p(1001,2)=0
1100 MAT PLOT AREA:p
1110 SET TEXT JUSTIFY  "CENTER","HALF"
1120 SET TEXT BACKGROUND "OPAQUE"
1130 PLOT TEXT ,AT SIN(a+d/2)*0.8, COS(a+d/2)*0.8:s$
1140 END PICTURE   

関東一都六県の人口の構成比のグラフです。
200〜240行で全都県の人口を求めています。
250〜360行で再び人口データを読み込み,人口に比例した扇形を描いています。
数値は全体を360とする値に換算しています。
1000〜1140行の外部絵定義sectorは,上端を基点として時計まわりの角度でa°から(a+d)°の弧に対する扇形と, s$で指定されたラベルを描きます。


補足 SAMPLEフォルダにあるsector.basも扇形の描き方を示す例です。


戻る inserted by FC2 system