8.2 例題プログラムの解説
目次へ戻る
8.2.1 JAPAN.BAS
- 日本地図を、北海道・本州・四国・九州・沖縄の4つの独立の島として描きます。作図のデータを準備するのが大変です。下書きに方眼紙を使って座標を求めました。複雑な地図を単純な図形で表わすには、一種のデザイン感覚でのデフォルメが必要です。
- 図形のデータは、図形を左回りに回る順に座標値を求めます。データを配列に取り込むには、配列の寸法に合った必要十分のデータを DATA 文に用意し、 READ 文で読み込ませます。琵琶湖は、本州図形の穴と考え、その領域を引算 RSUB で抜きます。
- 領域の生成は、コマンドRPOLYGを使います。この際、個々の島ごとに異なる高さのデータを与えておきます。琵琶湖の図形は、引算に使うだけですので、高さを与えてありません。コマンド LMTREE で、本州の図形を親とし、他の島を本州の子として関連をつけます。HDISP で平面図形としての日本地図を描かせます。HDISP で指定するのは本州図形ですが、木構造を指定したパラメータ itreeが指定されていますので、日本全図を描きます。ウインドウの範囲の設定は、最初の図形の下書きの段階で決めておきます。
- 各々の平面図形を立体化させます。コマンド RTOP25 には木構造指定がありませんので各図形ごとに処理します。図形同志の干渉が起こらなければ、それぞれ異なった高さの立体が得られます。
10 REM =========== MAP of JAPAN ============
20 DIM HONSYU(2,27),RKYSYU(2,12),HKAIDO(2,8),SIKOKU(2,8)
30 DIM BIWAKO(2,3),OKNAWA(2,4)
40 READ HONSYU : REM -----------------------------
50 DATA 20,20,20,-20,10,-20,10,-10,5,-10
60 DATA 5,-20,-30,-20,-30,-40,5,-40,0,-45
70 DATA 12.5,-57.5,25,-45,20,-40,35,-40,35,-35
80 DATA 40,-35,40,-45,45,-45,45,-20,40,-20
90 DATA 40,0,35,15,35,20,30,20,30,15,25,15,25,20
100 READ RKYSYU : REM -----------------------------
110 DATA -60,-25,-60,-40,-55,-40,-55,-35,-50,-35
120 DATA -50,-65,-45,-65,-45,-60,-40,-60,-40,-65
130 DATA -35,-65,-35,-25
140 READ HKAIDO : REM -----------------------------
150 DATA 20,45,20,25,25,25,25,35,30,35
160 DATA 40,25,60,45,40,65
170 READ SIKOKU : REM -----------------------------
180 DATA -30,-55,-20,-65,-15,-60,-10,-65,0,-55
190 DATA -10,-45,-15,-50,-20,-45
200 READ OKNAWA : REM -----------------------------
210 DATA -75,-60,-75,-70,-70,-70,-70,-60
220 READ BIWAKO : REM -----------------------------
230 DATA 5,-25,5,-30,10,-25
240 REM -------------------------------------------
250 CMINIT : DPWIND,0.,0.,100.
260 NVH=27 : RPOLYG "A",HONSYU,NVH,5.
270 NVK=12 : RPOLYG "B",RKYSYU,NVK,10.
280 NVHK=8 : RPOLYG "C",HKAIDO,NVHK,10.
290 NVSK=8 : RPOLYG "D",SIKOKU,NVSK,8.
300 NVO=4 : RPOLYG "E",OKNAWA,NVO,5.
310 NVB=3 : RPOLYG "F",BIWAKO,NVB
320 RSUB "A","F"
330 LMTREE "A","B","C","D","E"
340 CLS : HDISP "A",1
350 REM ----- Convert into Two-and-half Solid Model ------
360 RTOP25 "A" : RTOP25 "B" : RTOP25 "C" : RTOP25 "D" : RTOP25 "E"
370 CAM(1)=0 : CAM(2)=-200 : CAM(3)=100
380 DPCAM CAM
390 CLS : HLDISP "A",1
400 END
8.3.2 OVERLAY.BAS
- らせん階段を合成したプログラムです。短冊状の平面図形を、原点を中心として30度づつ回転させ、同時に高さを1づつ上げて行きます。最初の図形は、デフォルト値として1の高さを持つ矩形で、名前 "R"を付けて、コマンドRECTM で作ります。この図形をコピーし、回転させると同時に、コマンドRHIGHTで高さを設定します。この平面図形を順にコマンド ROVL で重ね描きをさせ、一つの地図状の図形に合成します。
- 各領域にはそれぞれ高さの設定が記憶されていますので、全体をコマンドRTOP25によって 2.5次元モデルに立体化させます。カメラを設定して、最初に、コマンドHEDISPでワイヤーフレームモデルの作図をさせます。
- 同じ角度から、コマンドHLIMAGで隠れ線処理を施した投影図に変換させます。この変換で、多面体モデルは無くなって、同名の図形モデルが得られています。作図は未だされていませんので、コマンドHDISP で画面に投影されます。
- コマンドROVLの書式「 ROVL "A","B" ]は、図形"A" に図形"B" を上乗せして、名前は"A" とし、図形"A" が図形"B" に隠されます。この図形モデルを 2.5次元モデルにすると、高さのデータがそのまま生かされます。図形"B" が図形"A" よりも高いときには、この例題のように、確かに思った通りに後から作った段が優先された階段ができます。もし図形"B" が図形"A" よりも低ければ、低い側の段で、高い側の段を削るように階段を作ります。
10 PRINT "GEOMAP Demonstration Program"
20 PRINT "--- Test Program for Overlay ---"
30 CMINIT
40 DIM POSA(2),POSB(2)
50 READ POSA,POSB : DATA 0 -0.5 5 0.5
60 HIGHT=1
70 RECTM "R",POSA,POSB
80 COPY "R","R1"
90 FOR ANG=30 TO 330 STEP 30
100 HIGHT=HIGHT+1
110 COPY "R","B"
120 RHIGHT "B",1,HIGHT
130 RGROT "B",,ANG,CEN(1)
140 ROVL "R1","B"
150 CLS : HDISP "R1"
160 NEXT
170 RTOP25 "R1"
180 CAM(1)=-10 : CAM(2)=50 : CAM(3)=50
190 DPCAM CAM,0.5
200 CLS : HEDISP "R1" : HLIMAG "R1" : CLS : HDISP "R1"
210 END
目次へ戻る