三次元グラフィック ・ アニメーションの作り方とその応用

三次元グラフィック・アニメーションの作り方とその応用
六 日 l :ll.
(技術科電気教室)
3 -Dimensional Computer Graphics
Programing and It s Apphcaton
Yoshiaki MUDA (Department of Electronics)
A three-dimensional (3D, perspective view) computer graphics program has been made for a
personal computer. A very simple formula has been derived for calculating the two-dimensional cordinates (Xp, Yp) of a projected piont on an assumed picture plane, from the three-dimensional coordinates(x, y, z) of a point on an object and those of a view point, and the direction cosines of the picture plave. The required floating point operations for obtaining a set of
Xp and Yp are only 17operations. Therefor, a real time3D animation program has run on a
personal computer (NEC PC9801FA). Some application to undergraduate education has been
made so as to demonstrate the generality and usefulness of the graphic program.
Key Words: Computer Graphics, 3D
I 目 的
最近、コンピュータを用いたグラフィックス(CG)画面をよく見かける。手書きの画像とは異
なる面白さと、手書きでは出来ない仮想現実感の表現が可能である。教育の現場でも、コンビュ夕をメディアとする教育は、大きな可能性をはらんでいる。
特に、三次元(3D)グラフィックスは、コンピュータにしかできないといっても過言ではない。
AVメディアに子供の頃から慣れ親しんでいる生徒にとって、受け入れ易い方法でもあろう。
3Dグラフィックスは、 TV等でかなり精巧なも
のを目にすることが出来るが、それには、かなり高
速な計算機と多大な労力が必要なようである。そこ
で、本論文では、パソコン上で、リアルタイムで動
く3Dグラフィックスのプログラムを作ることを考
えた。
立体上の点の三次元座標から、画面上の投影点の X
二次元座標を計算する大変簡単な式を導いたので、
プログラムを作る事はそれほど難しくはない。また、
立体を構成する点と線、および視点と視線の方向さ
え入力すれば、好きな位置から眺めた画像(投視図)
97
図1 三次元グラフィックスの原理
六 田 嘉 明
が得られるので、応用として、多くのものが考えられる。技術科では、作品の完成予想図、結晶模
型等、家庭科では室内風景、地理では地図から実際の地形を予想する。数学では三次元図形や関数
の表示などが考えられる。プログラムの核になる部分は大変簡単であるので、あとはアイデアしだ
いである。利用していただければ、幸いである。
Ⅱ 方 法
三次元グラフィックスとは、中心投影法による立体の投影図(投視図)の事であり、立体をある
視点から、ある向きに置かれたガラス窓を通して眺めた時、窓に映る光景をコンピュータで作図す
る事である。
従って、基本的には図1のように、空間上に点Aがあるとき、点Aと視点Eとを結ぶ直線(これ
を投影線と呼ぶ)が画面と交わる点Apが、点Aの投影点であり、これを、立体上の全ての点につ
いて求め、次に点と点を直線で結べばワイアフレームモデルの3Dグラフィックスが出来上がる。
今、適当に定めた直角座標系0で、点Aの座標を(xa va, 2a 、視点Eを(xe, ye 、視
線方向すなわち視点Eから画面に下した垂線の方向を(/, m, n)とするとき、求める投影点Apの
座標(Xp, Yp)は、次式で表される。
- 1/r
'X,D
) (≡三菱 (1)
\YJ 〝 \-In/r -mri/
-Y.-In,
Zp-l-
・-V
(xa-xj+m・(ya-ye)+n・(2
-Ze)
(2)
(3)
l2+m2
ただし、 I, m, nはいわゆる方向余弦で、
l2+m2+n2-1 ≠±1
(A)
を満足するものとする。
なお、 (1)式における(Xp, Yp)は、画面上に取られた直角座標系での座標である。その座
標系とは、図1に示すように視点Eから画面に下した垂線の足を原点o'とし、 o'をとおり地面と平
行な平面と画面との交線をⅩ軸、 o'を通りⅩ軸に垂直な直線をY軸としている。
Z。は点Aの視点から画面に垂直方向に測った距離で、 Zp- 0は点Aが視点を通り画面に平行な
平面上にあることを意味し、 Zp<0は、この平面より背後にあることを意味する。従って、その
ような点は描画しないように注意しなければならない。
また、 (1)式中のDは視点から画面までの距離であって、 Dを変えても投影図は相似であるの
で、プログラムではD-1としている。
本論文では、式の導出は省略する。
(1)式の2行3列の行列は、透視変換を表す行列である。この行列は、画面の方向余弦I, m,
nのみによって決まるので、視点と視線方向の設定が行なわれた時点で、一度だけ計算すれば良い.
したがって、一つの点の投影点Xp, Ypの計算には、加減算を8回、乗除算を9回行なうだけで
良く、計算量は従来の三角関数を用いる式より大幅に短縮されたものと考えている。従って、パソ
コンレベルでも3Dグラフィックスをリアルタイムで描画することが可能である。
3D表示の核になる部分は、上に述べた通りであり、付録に掲載したプログラム中の四角で囲っ
た部分でその計算を行なっている。
98
三次元グラフィック・アニメーションの作り方とその応用
Ⅲ 研究結果と議論
上で述べた3D表示のサブルーチンをもとにし
て今回作成したプログラムの概要を説明すると、
(1)入力データとして、立体上のすべての点
の座標(xa, va, 2a)と、線分の両端
の点の番号を書いたファイルを読み込む。
(1230-1250行目)
ワィ.アフL'・-1ム3Dグラフィックス-Ⅲ (視方向可変版) 終了 (-1)
立方体 (1)
室内風景1 (2)
街の風景1 (3)
街の周景2 (4)
山l L5)
(2)次に、視点の座標(xe, ye, 2c)と、
シリコ二ノ結晶(6) ノ/
自動車 (7)
視線方向(/,m,n)を書いたファイル
デー一夕ファイル名の入力
を読み込む。視点と視線方向を少しづっ
変えたものをこのファイルに書き連ねて
おくと、街の中を散歩したり、結晶の中図2 立体のメニューと(1、 1、 1)方向から見た
をさまよったり出来る (1260行目) シリコン結晶
(3)視点と視線方向のデータを取り出し、 (1)式の透視行列の行列要素を計算する。 (13101320, 2810-2820行目)
(4)全ての点のAp, Ip, Zipを上で述べた式から計算し、配列に格納する。
(3000 -3060行目)
(5)点と点を直線で結ぶ。このとき、両点のZ。が共に負であれば、その直線は描画しない。
片方のみが負になった場合には、その直線と画面の交点を求めて、この交点とZ。が正の
点とを結ぶ。両方が正なら、文句なく描画する。 (2920-2960行目)
(6)全直線を描き終わると、この画面を表示し、第二の画面を描画画面に設定する。続いて
(2)にもどり、次の視点と視方向から見た視図を作図する。画面1と2は交互に入れ替
える。
以上が、本プログラムの概要であり、 (1)と(2)で述べたデータファイルを準備しさえすれ
ば、街を散歩したり、結晶の中をさまよったり、自動車の外観を好きな方向から眺めたり出来る。
本プログラムでは、サンプルとして、図2の様な7種類の立体模型を用意した。また、飛行コース
のサンプルとして、視線を常に立体の中心に向けながら円周上を回転するコースや、立体の中心を
突き抜け半円を措いてもどるコース等、 4種類のコースを用意した。図2はシリコンの単結晶(ダ
イヤモンド構造)を(1,1,1)方向から眺めた時の図である。図3、 4には、立方体と街の風景の
-シーンを示しておく。
なお、必要なデ-タファイルの書式を付録2, 3, 4に示しておくO
付録2 "部品DAT" :立方体やとんがり屋根などを標準部品として登録しておく。
付録3 風景を表すファイル:風景を構成する部品の番号と配置場所、およびx, y, z方向の
拡大率を書いたファイル。
詣 阜i:、'" -''.',一 蝣
付録4 飛行コースファイル:視点の座標(ズe, }le, Ze)と視線の方向余弦(/,m,n)を書き
込んだファイル。
さらに、これらのデータファイルを半自動的に生成するためのプログラムや、 3Dゲ-ムのよう
にキーボードから視点や視線方向を操作しつつ立体の内や外を回遊するプログラムも作成したが、
ここでは省略する。
99
stf'i
図3 立方体の投視図
図4 街の風景Ⅱ
Ⅳ 結論と今後の課題
今回は、ワイアフレームにとどまったが、次回は、面に色を付けて隠線処理をするポリゴングラ
フィックスへと進めたい。今回の経験からすると、 16MHzの32ビットCPUを用いた最新のパソ
コン(PC9801FA)でも、 200点程度のワイヤフレームモデルを実時間で動かすのがやっとであっ
た。計算式は、これ以上簡単には出来ない程簡単になったので、時間を消費する主な要因は、 BAS
ICのグラフィックス処理あたりにあるように恩われる。
参考文献
1)宮本親一朗: 「AVプログラミング講座」、 ASCII, Vol.15, No.6 (1991), Na7 (1991), No.8
(1991)
100
三次元グラフィック・アニメーションの作り方とその応用
0
ハ
0
3
0
蝣
O
0
YT(NP ),ZT(NP ) '点の絶対座標(点の総数-NP)
YP(NP ), ZP(NP ) 投影点の(X,Y)座標
2) '辺の両端点の番号(辺の総数-NL)
.
D
0
-
0
蝣
0
XT(NP
XP(NP
LINK(
TMP 10
>
ハ
0
DIM
DIM
DIM
DIM
・-J o
Z o
0
O
バ
ー
O
j
c
O
,
冒:倍晋鵠1),Y(17,161),2(17,161):摘萱宍S3讃真宗鋸琵蔑o'(慧慧蒜7)
=17)
DIM NOL(17)
DIM PNOl(17,13
1), PN。2(17,13日,各品賀醜。謡品禁の相対番号(辺の数=131)
o
<
O
-
O
(
定剛
O
- ・ 〓 リ E
L*丁,1
i
NE=300
冒:;告t・.吉.ill
Ml'.言1∴告蝣I]I
I'I杜,1.>,ぎー冊'.甑、相川'.ォF.ト
2)>640 THEN SMODE= 4:
M種V
M機汀
-
1 11 1 1 1 1 1 1 11-・・・t 1 1 l・・l 1
O
0
O
0
O
N
O
PRINT ・ Ver.40 21
3)版
on版変
PRINT ・ Ver.31 8 MAY,
ス,動可
ク明移向
ツ嘉動方
イ田白線
O
o o
ラJ2fl>O)
O
DPAGE(O)=1: DPAGE(1)=2
ELSE SMODE= 3: DPAGE(O)=1: DPAGE(1)=17
SCREEN SMODE: SCRNX=VIEW(2)+1
SCRNY=VIEW 3)+l
COLOR: COLOR 7,0,0,7 : CLS 3
APAGE=O : ASPECTR=SCRNX/SCRNY
PRINT ''日日=-日日=-HHIt
PRINT
Tr)イ アフ レーム3 Dグ
JUNE,1985
PRINT ・ Originally Code
フ六日
O
_ ^ ^ _ ^ ^ _ ^ _ ^ o g
O
N
O
c v j
O
o o
O
O
O
O
O
O
c ¥ : c ¥ ] c ^ c ^ o ^ e o
SEPT
llRINT --...-.・-l・
嗣mm^m班WESSE
GOSUB ォGET.BUHIN
STA RT
GOSUB 'GET.DAT
GOSUB ォRD.EYE
IFDATくOTHENCLS3:ENDデータファイルの読み込
IFCOURSEくOTHENCLS3:END:翌産Fo舘[p]v
T)。最芸規格化
PRINT スペースキーで一時停止します。 ′'
GOSUB ォNORMOBJ
ILOOP-0: CLS:
WHILE 1
FOR EYE=O TO EYEMAX
XE=XE(1EYE): YE=YE(IEYE): ZE=ZE(IEYE)
LE=L(IEYE): ME=M(IEYE): NE=N(IEYE)
LOCATE 60,0: PRINT IEYE
GOSUB <CP
'透視図を描く
I LOOPニILOOPり
O
c o
IF
INKEYJく>"
′′ THEN
1420
O
r o
LOCATE 0,0
PRINT ''スペースキーで再開、 E S Cヰーで終了します。 '′
OO
c o
AAIとINKEYi
IF
O
c o
c o
OO
c o
O
c o
OO
:
IF
AAS='''′ THEN
AAt=CHRS(&HIB)
1390
THEN ・START
LOCATE 0,0: PRINT '′スペースキーで-時停止します。 ′′;SPC(20);
NEXT EYE
WEND
END
′ サブルーチン
O
O
O
l
O
O
蝣GET.
BUHIN
OPEN ′'部品.DAT〝 FOR INPUT AS #1
OBJTYP=O
WHILE OBJTYP>=O
INPUT #1, TMP‡
INPUT #1, OBJTYP, TMPJ
′部品名の読み捨て
'部品のタイプ
IF OBJTYP く O THEN ォL1620
OW-y
r ^ T r ^ T r ^ ^ ^ ^ T f ^ ^ ^ サ ^ i ^
・ nU・l cvj co Tr Ln-iD t^cc(Tj o-<c¥j cn -LT5tD r--00CT)0-<C^rO Tf LO iX)C-lX CI O-"CM CO-fJ-L^tD r^OO OI O-W m^lOin iOIDNCO OI O-PC CO T l^lD t^OO CTI0--i-<CVJfO-*I'Ln tD t--OCi ai>0->CO*tf
SAVE '′透視図42.BAS〝,A
CONSOLE 0,25,0,1 : NP=999 : NL-700
'頂点の数
INPUT #1, NOP, TMPJ
NOP(OBJTYP) -NOP
FOR
Iニ1
TO
NOP
O
O
l
INPUT #1, X(OBJTYP,I), Y(OBJTYP.I), Z(OBJTYP.I)
NEXT I
O
INPUT #1, NOUOBJTYP), TMPS 辺の数
FOR l=1 TO NOL(OBJTYP)
O
INPUT #1, PNOKOBJTYP,I), PNO2(OBJTYP,I)
O
O
O
NPXT I
LI620
WEND
CLOSE #1
RETURN
O
O
・GET.
DAT
O
l ((`1
O
=r.也ユ
O
w -i PO CO
O
景景
体風風
了方内の
終立室街
O
CLS: COLOR 4
PRINT'′ヮイアフレーム3Dグラフ ィ ックスーn (視方向可変版)
COLOR 6
PRINT :PRINT
PRINT :PRINT
PRINT :PRINT
PRINT :PRINT
O
O
LOO
明
義
raiero
?
?
S
!
!
;
ォ
5
名の入力 (7)
きい。 ''; DAT
GOTO 詛GETDATA
GOTO 'GETDATA
GOTO サGETDATA
GOTO -GETDATA
2
ン.
S
i
2
"5
2
0
-
U
N
a
n
*
l
GOTO ォGETDATA
GOTO ォGETDATA
′'データファイル名
FS
:
GOTO ォGETDATA
FOR INPUT AS #1
, TMPJ
'コメントの読み捨て
, NOBJCT, TMP‡ '部品数
・
1
.
1
'
-
OL=0: PNOBASE=O
TO NOBJCT
INPUT #1 , OBJTYP, ORGX, ORGY, ORGZ, KX,KY,KZ,ROTANGLE, TMPl
'
-
z
暮ル一打HがH ・1
'
GETDATA
OPEN
NPUT
I NPUT
NOP=O
FOR I
ン フ遺体蝣--"5 * コ車N
t
IF DAT=4 THEN F
IF DAT=5 THEN F│=
IF DAT=6 THEN Ft=
IF DAT=7 THEN PRI
DAT=-1 : RETURN
(((ル下
品 イで
結 丁ん″
f
DATこ3 THEN
田
六
?
IF
コ 車 タ を 方 崖 2 -動=ー
1-動一号立部街山シ自T
山シ自デ番
l
M
O
I
(原点のX,Y,Z>
(倍率) (Z軸回りの回転角)
蝣
S
'
J
'
n
2HX.Q:
0 0 0
N
X>"N
H
+ + +
-
J
'
'
u
"
o
N
O
S
O
>
0
H
:
v
FOR ll-1 TO NOP(OBJTYP)
NOP=NOP+ 1
XT(NOP)-X(OBJTYP, I
YT(NOP)=Y(OBJTYP, I
ZT(NOP)=Z(OBJTYP, I
NEXT
FOR ll=1 TO NOL(OBJTYP)
NOL=NOL+ 1
LINK(NOL, 1 )=PNOl (OBJTYP, I I )+PNOBASE
LINK(NOL,2)=PNO2 OBJTYP, 1 1 )+PNOBASE
NEXT
PNOBASE =NOP
NEXT
CLOSE #1
RETURN
XY Z
UKK
O
"
E.5G...I
S=
化F
格式
ォc
'
のH
.s
-T
'
サ
l
"
f
'
0
'
>
0
'
N
"
"
"
NORMOBJ ′ォブジ ュク
IZE--5 、原点-重心)
FOR l=1 TO NOP:
NEXT
GOSUB 'DMNMX
GX-(DMX+DMN)/2
MXSOBJ =DMX-DMN
FOR l=1 TO NOP: TMP(I)=YT<I): NEXT I
GOSUB ォDMNMX
GY= (DMX+DMN) /2
IF (DMX-DMN) > MXSOBJ THEN MXSOBJ=DMX-DMN
FOR l=1 TO NOP: TMP(I)=ZT(I): NEXT I
GOSUB ォDMNMX
l
l
M
o
一
a
X Y Z
'J'J'J
i
ll M ll
J
TT T
XY Z
GZ=(DMX+DMN /2
IF (DMX-DMN) > MXSOBJ THEN MXSOBJ=DMX-DMN
FOR l=1 TO NOP
T TT
X>-N
l
i
o
/MXSOBJ・10
/MXSOBJ'10
/MXSOBJサ10
NEXT
RETURN
f
(L
n
:PRINT ′'
D
サ
ー
.
N
PRINT :PRINT
PRINT :PRINT
PRINT :INPUT
m
サ
回ア下
者フで
p&
f3
T酎
J調
E
進一遇
直コを
軸行号
Xt飛番
<
PRINT
JKァ
,Ne)データの読み
ス'′: COLOR 6
転、視高一定
良
戻る
IMZ
の入力
さい。 ''; COURSE
i
n
s
IF
COURSE=1
IF
COURSE=2 THEN
THEN
FS=〝cOuRSEl.DAT′':
IF
COURSE=3 THEN
FJ= COURSE2.DAT":
F‡=''COuRSE3.DAT"
H H t u p ^ り
行
PRINT :PRINT 〝 半径 25 の円周上を
I.III
-CMォ*
i
。iコ右左元名
n
COLOR 5: PRINT :PRINT :PRINT
聖回国へ
N
RD.EYE ′視点(Xe.Ye,Ze) ,祝方
向澗
o
N t > - S N N O O o O W サ C O a O M C O c O O 5 m O O > O M J i f f l a i 3 > f f i O O O O O O O O O 0 - 蝣 < c s ] c ^ c ^ C M C ¥ j c ォ j c ^ C N 3 r - i c s j f o c o c o c o c o c サ : f O f O T j ' ' < r - ォ ' ' < s - - ^ - ^ i L r t
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
PllINT :PRINT
PRINT :PRINT
PRINT :PRINT
PRINT :PRINT
PRINT :INPUT
IF DAT=1 THEN
IF DAT=2 THEN
GOTO ォRD.EYEDATA
GOTO サRD.EYEDATA
:
GOTO ォRD.EYEDATA
IF COURSE=4 THEN PRINT :
INPUT 拡張子が.DATの飛行コースファイル名"; F暮 FS-FS+".DAT′':
GOTO ォRD
EYEDATA
2510 COURSE=-1 : RETURN
2520 ォRD.
EYEDATA
2530 OPEN Ft FOR INPUT AS #1
2540 INPUT #1, TMP暮 'コメントの読み飛ばし
2550 IEYE=0: XE(0)=0
2560 ォLP1
2570 INPUT #1, TMPI
2580 IF
LEFTS
TMP暮,1)=〝′′'
THEN ォLP1
2590 IF TMPI-"9999" OR LEFT暮(TMPS,2)=''終'′ THEN ォEXT
102
三次元グラフィック・アニメーションの作り方とその応用
o o in o
O -i -i CO
to to to tn
CM CO OJ 00
XE( IEYE)-VAL(TMPS)
INPUT #1, YE(IEYE),ZE(1EYE), RE, L(IEYE), M(IEYE), N(IEYE)
'視点および視方向
0 ハ D
O
つQ-^Ln tD
xE(IEYE)-XE(
IEYE)ォTMP
YE(
IEYE)=YE(
IEYE)ォTMP
ZE(
IEYE)=ZE(
IEYE)ォTMP
L(IEYE)一2 + M(IEYE)"2 + N(IEYE)"2
E
Y
E
I
M
E
Y
E
E
Y
E
I
N
E
Y
E
O
Oi
P P P
1 1 5
T T T
E
Y
E
L
E
Y
E
.
・
.
.
・
,
;
I
TMP-SQR(
O
O
C^-OO
)
EYE= EYE+1
GOTO ォLPI
EXT
EYEMAX= EYE-1
CLOSE #1
RETURN
O
r
^
O
o
q
′透視図を描く
キCP
O
O
i
o
O
・
l
O
t
M
O
C
M
Me-三Y.Z),
R+-NSeQ-2(轡LEaォ't騨+汽M('Le,)M(3N式)は与えられているo
TIl-ME/R:12L'()式の透視変換行列
T21=-LEォN/R:T2=-MEサN/R:T23=
Ne空?聖2df讐(Xe
L
M
^
O
L
^
t
O
D
r
O
^
O
FOR=1TNP
GOSUBォCPRJ′(XTI),Y ZT(I)]からXP(I),YDを計算する
NKXT
O
O
C
T
O
J
ハ
O
o
i
o
C
S
J
o
f
O
o
l
*
o
.
L
O
o
C
D
o
r
^
IFLOP=THENGSUBォTWINDO
GOSUBォCHKXPY
APGE-1 :SCREN‥APG
GOSUB.ETWINDO:CLS2
FORNLニ1T
I-LNK(,1):J=LINK(,2)
IFZP()くOANDZP(J)くOTHEN2960
LINE(XP),-YI(XPJ),-Y
NEXTL
SCREN,‥DPAG( E)
RETUN
O
n
O
D
f
CPROJ
XAE=XT( I卜XE: YAE=YT( I主YE: ZAE=ZT(I )-ZE
f
O
l
ZP
O
(2)式
I = LEォXAE + ME'YAE + NE'ZAE
O
-
IF
i
ZP
I)く=O
THEN
ZP
I =-1:
RETURN
XP(II - ( TlいXAE +TL2ォYAE / ZP(I) (1)式
O
C
N
3
YP(I) - ( T21ォXAE +T22ォYAE +T23ォZAE ) / ZP(I) (1)式
RETURN
O
C
O
"
O
・
-3
R要
O
<
O
O
o
O
0 . 0 . 0 . 0 .
X*>-.><
O
o
z z z z
U U UI U
O
o
SSXI
hhhH
O
こXM
はみ
ての
t
・4鳩
f
くXM N
> XMAX
くYMIN
>YMAX
っ合
O
l
R 0 Rがでる
N
OCMAX
こYM
N
= YMAX
o
o
0 0 0 - - - 1 - . - - - . - 1 - - _ _ < C O
IF XP I
IF XP(I
IF YP(I
IF YP(I
NEXT
RETURN
メ C
蝣
CHKXPYP 'これがないとデー
PC9801 -N88BASI
FOR l=1 TO NOP
にの
*
C O つ O
o ハ D
o o
O
c v i
o c
e o
e s j
o o
O O O ハ 3 0 ゥ O ゥ ゥ O
e o
c o
n v
c o
A : d
r o つ o
O
GETWINDOW
FOR I =1 TO NOP: TMP(I)=XP(I): NEXT
GOSUB ォDMNMX
:
WXO=DMNォ1.5:
WXl=DMXサ1
5
FOR I =1 TO NOP: TMP(I)=YP(I): NEXT
GOSUB ォDMNMX
:
WYO=DMNォ1.5:
WYl=DMXォ1.5
IF (WX1-WXO)/ (WYトWYO)>ASPECTR THEN WYl=WXl /ASPECTR : WYO=WXO/ASPECTR
XMIN=WXOォ40:
XMAX=40サWXl
:
YMIN=-WYlォ40:
YMAX=-WYOォ40
RETURN
SETWINDOW
WINDOW (WXO,-WYl)-(WX1,-WYO)
VIEW (0,0)- SCRNX-1, SCRNY-1)
RETURN
・DMNMX '配列 TMP(1)-TMP(NOP)の最大値と最小値を求め, DMX, DMNに返す
DMN=TMP(1): DMX=TMP(1)
FOR ll=2 TO NOP
IF TMP(II)>DMX THEN DMX=TMP(II)
IF TMP(II)くDMN THEN DMN=TMP(II)
NEXT II : RETURN
′END
OF
PROGRAM
c o
o
c s
o
o
c*:co co PO co co co c*D fO fo cio co co co Po ro co cT5CO PO PO M c*:co rO fO P'D ro c*5
t--oo a>0-i n wj-w^n oo cio-i N W Tfw o oo a-<c*j m-<r ir><﹂>oo
O
O
O
O
O rOr-rO
^oo oo co oo oo oo oo oo co oo tso cD CTJ CTi Ci Oi CTi ai aj aj ai o ooo o
o o oo co
O -i CO rO^t-Lfi CM CM CM CM CM CMウシウレ2ウレ222ウシウむc^c^cxi co c^esj oo ro cM co ci m co cn fo ro
tD to cc tD iD io^D r-f^-t^t- c^r-og c¥j co cmつレCM CsJ C^OO CO CM C^CS]
IF RE=O THEN TMP=1
ELSE TMP=RE/SQR( XE(1EYE)"2 + YE(IEYE)"2 + ZE(IEYE)"2 )
o
103
六 田 嘉 明
付録2 '′部品・Ⅸr'ファイルの書式
I/mm
0, ′'部品番号〝
2, "頂点の数〝
0,0,0
1,1,1
付録3 デ」タフアイルの例('衝1′つ
-・-コメント行
//街1 ・-・コメント行
9. "BBS数-9 '′
1, -10, -2, 0,
-・頂点1の座標
・‥-頂点2の座標
0, -9, 0, 0,
0, -9, 0, 0,
1, ′'線分の数〝
1.2
0, -9, 0, 0,
-一点1と2を結ぶ
//四角形(X-Y平面)
1, 〝部品番号'′
4, "頂点の数"
0,0,0, 1,0,0, 1,1,0, 0,1,0
4, 〝線分の数"
5, 8, -4, 0,
2, 2, 4, 0 ビル1"
5, 一名 2, 0,
3, 4, 6, 0 ビル2'′
7, -7, -5, 0,
7, -4, 2, 0,
3, 3, 3, 0 とんがり良限1′'
2, 2, 8, 0 ′'とんがり良限2〝
8, -1, 2, 0,
5, 3, 5, 0 ′噸根〝
† †
1,2, 2,3, 3,4, 4,1
20, 4, 0, 0 '道〝
3, 0, 0, 0 '実印′'
1, 1, 0, 0 ′駕印"
1,-1. 0, 0 矢印"
I
† †
I
†
† †
雅完膚考X, Y, Z, KX,YX,・Z,0,コメント
(醜所) (拡大率)
//立方体
5, ′′部品番号'′
8, ′′頂点の数"
0,0,0, 1,0,0,
1 1
0 1
0 0
1 1
0 1
付録4 飛行コースファイルの例("皿だ5ei.mr')
0,0,1, 1,0,1,
12,線分の数〝
1, 0, 0, 24, -1, 0,
00
0.87, 0.50, 0, 24,
-0.87, -0.50, 0
00
r*- ^r
8,5, 2,6, 3,7,
-i
1,5, 5,6, 6,7,
11ax艦1 (30-づっ右回転、視高一定) -コメント
tt
1,2, 2,3, 3,4,
0.50, 0.87, 0, 24,
-0.50, -0.87, 0
0, 1, 0, 24,
//トンガリ屋根の建物
7, "部品番号′'
9, "頂点の数′'
0,
-0.50, 0.87, 0, 24,
0.50, -0.87, 0
-0.87, 0.50, 0, 24,
0.87, -0.50, 0
0,0,0, 1,0,0, 1,1,0, 0,1,0, 0,0,1
-1, 0, 0, 24,
1, 0,
1,0,1, 1,1,1, 0,1,1, 0.5, 0.5, 1.5
-0.87, -0.50, 0, 24,
0.87, 0.50, 0
一0.50,
0.50, 0.87, 0
to cd ai
3,7, 4,8, 5,9,
5 2 7
6,7, 7,8, 8,5,
-i Ln 05
1,2, 2,3, 3,4,
4 1 6
16, "線分の数"
-0.87, 0,
24,
0, -1, 0, 24, 0, 1,
0.50, -0.87, 0, 24, -0.50, 0.87, 0
0.87, -0.50, 0, 24, -0.87, 0.50, 0
9999, 1 1. 1. 1, 1,
† † † † † † †
Xe, Ye, Ze, Re
(Xe ,Ye ,Ze)-視点の座標(比Xe :Ye :Zeのみ有効)
Re -原点からの距離 ′
(l ,m,n) 視線の方向余弦(比1 :m:n<のみ有効)
104