5.2 例題プログラム DEVELOP.BASの解説
目次へ戻る
- 例題の展開図に利用する多面体モデルは、第1章で例示したモデルの中から、5個を選びました。これは、角柱・円柱・円錐・正20面体・製図モデルです。最後のモデルは製図規格の中で、投影法を解説するときに使っているものです。このモデルは、凹多面体の例に使いました。
- この例題のプログラムは、BASIC 言語のプログラミングのテクニックのうち、サブルーチンの使い方(GOSUB .... RETURN 文)の参考になります。多面体モデルを、コマンド PCUBE/PRCYLN/PRCONE/PHDFL/PHEDRA で作成するごとに、サブルーチン(行番号 2000)に制御を渡します。多面体モデルの名前はいつも"A" としてあります。同時に同じ名前のモデルができないようにするため、モデルを作る前に、コマンド CMINIT によって、GEOMAPの作業領域を更新します。
- サブルーチンでは、個々のモデルがどのような形状であるかを確かめるため、まず、透視図がディスプレイされます。コマンド HDEV で、立体モデルの展開図を作成します。モデルの名前は"A",2次元の幾何モデルとしての名前は"B" です。平面図形としての展開図がどのような寸法を持つかを調べるコマンドが QBOX です。このコマンドは、与えられた2Dモデルを囲む矩形の寸法を計算して、用意した配列(この例では BMIN と BMAX)に入れます。配列には、この矩形の左下の座標(X1,Y1) と、右上の座標(X2,Y2) が求まります。なお、このコマンド QBOX は、多面体モデルを作図するとき、DPWINDを再定義するときに使います。
- 2次元の幾何モデルは、そのまま図形データの性質を持ちますので、作図のコマンドはHDISP を使います。
- 上で求めた矩形領域をウインドウとし、これをビューポートに割り付けます。このコマンドは、[ DPWIND CX,CY,WX ] で定義します。ここに、(CX,CY) は矩形領域の中心の座標、 WX は矩形の横幅です。ただし、矩形領域が縦長の場合には展開図の上下が切れてしまいますので、この場合には縦の寸法が納まるように調整します。例題のプログラムは、モニター画面の縦横の寸法比を(1 : 1.4) と仮定してあります。
- コマンドのQBOXは、立体図形を囲む直方体の寸法を計算するときにも使うことができます。この直方体を更に囲むような球体を計算し、この球体が視角に納まるようにDPCAMのパラメータを決めると、程よいレイアウトで透視図を求めることができます。ただし例題のプログラムでは使っていません。
- 作図したら、しばらく図形を観察するゆとりが必要です。作図コマンドの後に PAUSE文を挿入するとよいでしょう。
10 PRINT "GEOMAP Demonstration Program"
20 PRINT "---Develop of a Polyhedron---"
30 DIM XYZPOS(3,14),ITABL(60)
40 READ XYZPOS : REM ------ DATA FOR XYZPOS ------
50 DATA 4 4 6, 4 -6 6, 0 4 10, 0 -6 10, -6 4 10, -6 -6 10,
60 DATA 4 -6 -10, 4 8 -10, 4 8 -6, 4 4 -6, -6 8 -10,-6 8 -6
70 DATA -6 4 -6, -6 -6 -10
80 READ ITABL : REM ------ DATA FOR ITABLE ------
90 DATA 1 10 13 5 3 9900
100 DATA 9 8 11 12 9900
110 DATA 6 14 7 2 4 9900
120 DATA 4 3 5 6 9900
130 DATA 9 12 13 10 9900
140 DATA 7 14 11 8 9900
150 DATA 2 1 3 4 9900
160 DATA 2 7 8 9 10 1 9900
170 DATA 5 13 12 11 14 6 9900 9999 /
180 CAM(1)=35: CAM(2)=-25 : CAM(3)=30 : TH=0.8
190 CMINIT : REM ===================== PCUBE
200 PCUBE "A",10.,12.,20.
210 GOSUB 2000
220 CMINIT : REM ===================== PRCYLN(ROUND)
230 ICURV=1
240 PRCYLN "A",12,0,5.,15.,ICURV
250 GOSUB 2000
260 CMINIT : REM ===================== PRCONE(ROUND)
270 ICURV=1
280 PRCONE "A",12,0,5.,15.,ICURV
290 GOSUB 2000
300 CMINIT : REM ===================== PHDFL
310 NV=14 : NC=52
320 PHDFL "A",XYZPOS,NV,ITABL,NC
330 GOSUB 2000
340 CMINIT : REM ===================== PHEDRA
350 PHEDRA "A",4,10.
360 GOSUB 2000
370 END
2000 REM ========SUBROUTINE DEVELOP=============
2010 DPWIND 0,0,100. : DPCAM CAM,TH
2020 CLS : HFDISP "A",0,4
2030 HDEV "A","B"
2040 QBOX "B",BMIN(1),BMAX(1)
2050 CX=0.5*(BMIN(1)+BMAX(1))
2060 CY=0.5*(BMIN(2)+BMAX(2))
2070 WX=BMAX(1)-BMIN(1)
2080 WY=BMAX(2)-BMIN(2)
2090 IF WX
2100 DPWIND CX,CY,WX*1.4
2110 CLS : HDISP "B"
2120 RETURN
目次へ戻る;