三次元グラフィック・アニメーションの作り方とそ の応用
著者 六田 嘉明
雑誌名 教育実践研究指導センター研究紀要
巻 2
ページ 97‑104
発行年 1993‑03‑31
その他のタイトル 3‑Dimensional Computer Graphics Programing and It's Applicaton
URL http://hdl.handle.net/10105/4461
六 日 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‑dimension‑
al cordinates (Xp, Yp) of a projected piont on an assumed picture plane, from the three‑dimen‑
sional coordinates(x, y, z) of a point on an object and those of a view point, and the direc‑
tion 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 二次元座標を計算する大変簡単な式を導いたので、
プログラムを作る事はそれほど難しくはない。また、
立体を構成する点と線、および視点と視線の方向さ
え入力すれば、好きな位置から眺めた画像(投視図)
図1 三次元グラフィックスの原理が得られるので、応用として、多くのものが考えられる。技術科では、作品の完成予想図、結晶模 型等、家庭科では室内風景、地理では地図から実際の地形を予想する。数学では三次元図形や関数 の表示などが考えられる。プログラムの核になる部分は大変簡単であるので、あとはアイデアしだ
いである。利用していただければ、幸いである。
Ⅱ 方 法
三次元グラフィックスとは、中心投影法による立体の投影図(投視図)の事であり、立体をある 視点から、ある向きに置かれたガラス窓を通して眺めた時、窓に映る光景をコンピュータで作図す る事である。
従って、基本的には図1のように、空間上に点Aがあるとき、点Aと視点Eとを結ぶ直線(これ を投影線と呼ぶ)が画面と交わる点Apが、点Aの投影点であり、これを、立体上の全ての点につ いて求め、次に点と点を直線で結べばワイアフレームモデルの3Dグラフィックスが出来上がる。
今、適当に定めた直角座標系0で、点Aの座標を(xa va, 2a 、視点Eを(xe, ye 、視 線方向すなわち視点Eから画面に下した垂線の方向を(/, m, n)とするとき、求める投影点Apの 座標(Xp, Yp)は、次式で表される。
'X,D
‑Y.‑In,
‑ 1/r
\YJ 〝 \‑In/r ‑mri/
Zp‑l‑ (xa‑xj+m・(ya‑ye)+n・(2 ‑Ze)
・‑V l2+m2
ただし、 I, m, nはいわゆる方向余弦で、
l2+m2+n2‑1 ≠±1
) (≡三菱 (1)
(2) (3)
(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表示の核になる部分は、上に述べた通りであり、付録に掲載したプログラム中の四角で囲っ
た部分でその計算を行なっている。
Ⅲ 研究結果と議論
上で述べた3D表示のサブルーチンをもとにし て今回作成したプログラムの概要を説明すると、
(1)入力データとして、立体上のすべての点 の座標(xa, va, 2a)と、線分の両端 の点の番号を書いたファイルを読み込む。
(1230‑1250行目)
(2)次に、視点の座標(xe, ye, 2c)と、
視線方向(/,m,n)を書いたファイル を読み込む。視点と視線方向を少しづっ 変えたものをこのファイルに書き連ねて
ワィ.アフL'・‑1ム3Dグラフィックス‑Ⅲ (視方向可変版) ‑ 終了 (‑1)
立方体 (1) 室内風景1 (2) 街の風景1 (3) 街の周景2 (4) 山l L5)
シリコ二ノ結晶(6) ノ/
自動車 (7) デー一夕ファイル名の入力
詣 阜i:、'" ‑''.',一 蝣
おくと、街の中を散歩したり、結晶の中図2 立体のメニューと(1、 1、 1)方向から見た をさまよったり出来る (1260行目) シリコン結晶
(3)視点と視線方向のデータを取り出し、 (1)式の透視行列の行列要素を計算する。 (1310‑
1320, 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方向の 拡大率を書いたファイル。
付録4 飛行コースファイル:視点の座標(ズe, }le, Ze)と視線の方向余弦(/,m,n)を書き 込んだファイル。
さらに、これらのデータファイルを半自動的に生成するためのプログラムや、 3Dゲ‑ムのよう にキーボードから視点や視線方向を操作しつつ立体の内や外を回遊するプログラムも作成したが、
ここでは省略する。
図3 立方体の投視図
図4 街の風景Ⅱ
Ⅳ 結論と今後の課題
今回は、ワイアフレームにとどまったが、次回は、面に色を付けて隠線処理をするポリゴングラ フィックスへと進めたい。今回の経験からすると、 16MHzの32ビットCPUを用いた最新のパソ コン(PC9801FA)でも、 200点程度のワイヤフレームモデルを実時間で動かすのがやっとであっ た。計算式は、これ以上簡単には出来ない程簡単になったので、時間を消費する主な要因は、 BAS ICのグラフィックス処理あたりにあるように恩われる。
参考文献
1)宮本親一朗: 「AVプログラミング講座」、 ASCII, Vol.15, No.6 (1991), Na7 (1991), No.8
(1991)
0
0
ハ
D
O
O
O
O
o
O
O
O
O
0
0
・
n U
・ l
c
v j
c
o
T r
L
n ‑
i D
t
^ c
c (
T j
o
‑ <
c ¥
j
c n
ハ
3
0
0
0
0
0
0
0
バ
ー
j
c
,
<
‑
i
‑
(
‑
1 11 1 1 1 1 1 1 11‑・・・t 1 1 l・・l 1
O O O O O O O O O O O O O O O O OO O O OO O OO O O O O O OW‑y O O O O O O O O O O O O O O O O LOO O O O O0000000 ‑
L T
5 t
D
r ‑
‑ 0
0 C
T )
0 ‑
< C
^ r
O
T f
L
O
i X
) C
‑ l
X
C I
O
‑ "
C M
C
O ‑
f J
‑ L
^ t
D
r ^
O O
O
I
O ‑
W
m ^
l O
i n
i
O I
D N
C O
O
I
O ‑
P C
C
O
T
l ^
l D
t
^ O
O
C T
I 0
‑ ‑
i ‑
< C
V J
f O
‑ *
I '
L n
t
D
t ‑
‑ O
C i
a
i
̲
^
^
̲
^
^
̲
^
̲
^ o g o o N N c v j o o c
¥ : c
¥ ] c
^ c
^ o
^ e o c o c o r o c o c o c o c o r
^ T r
^ T r
^
^
^
^ T f
^
^
^ サ
^ i
^ l
l
SAVE '′透視図42.BAS〝,A
CONSOLE 0,25,0,1 : NP=999 : NL‑700 DIM XT(NP
DIM XP(NP DIM LINK(
DIM TMP 10
>
.
‑ 蝣
‑ 蝣
・‑J o Z o
YT(NP ),ZT(NP ) '点の絶対座標(点の総数‑NP) YP(NP ), ZP(NP ) 投影点の(X,Y)座標
2) '辺の両端点の番号(辺の総数‑NL) 冒:倍晋鵠1),Y(17,161),2(17,161):摘萱宍S3讃真宗鋸琵蔑o'(慧慧蒜7)
=17) DIM NOL(17) DIM PNOl(17,13
‑
・ リ E L
* 丁 , 1
M種 V M機 汀
1), PN。2(17,13日,各品賀醜。謡品禁の相対番号(辺の数=131)
NE=300
冒:;告t・.吉.ill Ml'.言1∴告蝣I]I
I'I杜,1.>,ぎー冊'.甑、相川'.ォF.ト
定剛
2)>640 THEN SMODE= 4: DPAGE(O)=1: DPAGE(1)=2 ELSE SMODE= 3: DPAGE(O)=1: DPAGE(1)=17
SCREEN SMODE: SCRNX=VIEW(2)+1 COLOR: COLOR 7,0,0,7 : CLS 3 APAGE=O : ASPECTR=SCRNX/SCRNY PRINT ''日日=‑日日=‑HHIt
Tr)イ アフ レーム3 Dグ
SCRNY=VIEW 3)+l
PRINT ・ Originally Code PRINT ・ Ver.31 8 MAY, PRINT ・ Ver.40 21 SEPT
llRINT ‑‑...‑.・‑l・
GOSUB ォGET.BUHIN
STA RT
GOSUB 'GET.DAT
GOSUB ォRD.EYE GOSUB ォNORMOBJ
o 3)版 n 版 変 ス,動可 ク明移向
ツ嘉動方 イ田白線
フ六 日
ラJ2fl>O)
JUNE,1985
嗣mm^m班WESSE
IFDATくOTHENCLS3:ENDデータファイルの読み込み IFCOURSEくOTHENCLS3:END:翌産Fo舘[p]v
T)。最芸規格化
ILOOP‑0: CLS: PRINT スペースキーで一時停止します。 ′' 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り
IF INKEYJく>" ′′ THEN 1420
LOCATE 0,0
PRINT ''スペースキーで再開、 E S Cヰーで終了します。 '′
AAIとINKEYi : IF AAS='''′ THEN 1390
IF AAt=CHRS(&HIB) THEN ・START
LOCATE 0,0: PRINT '′スペースキーで‑時停止します。 ′′;SPC(20);
NEXT EYE WEND END
′ サブルーチン
蝣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
INPUT #1, NOP, TMPJ
′部品名の読み捨て '部品のタイプ '頂点の数
NOP(OBJTYP) ‑NOP
FOR Iニ1 TO NOP
INPUT #1, X(OBJTYP,I), Y(OBJTYP.I), Z(OBJTYP.I) NEXT I
INPUT #1, NOUOBJTYP), TMPS 辺の数
FOR l=1 TO NOL(OBJTYP)
INPUT #1, PNOKOBJTYP,I), PNO2(OBJTYP,I)
NPXT I LI620 WEND CLOSE #1
RETURN
・GET. DAT
CLS: COLOR 4
PRINT'′ヮイアフレーム3Dグラフ ィ ックスーn (視方向可変版) COLOR 6
PRINT :PRINT PRINT :PRINT PRINT :PRINT PRINT :PRINT
w ‑ i P O C O
l ( (
̀ 1
= r . 也 ユ 景景
体風風 了方内の
終立室街
o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o
? f t
‑
?
? S
!
!
; ォ 5 S 2 i 2 2 0
‑ ' N n
* l
‑ 1
‑ '
‑ M O I O
‑ H N n ' ' u
"
o N O S O
>
0
‑ H : v ' '
"
サ l
"
f
‑ ' 0 '
>
0
‑ ' N
"
‑
"
"
l J i M o a i o
‑ N n f i n
<
D サ ー . N m
‑ サ i n s o
>
‑ 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
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
^
PllINT :PRINT PRINT :PRINT PRINT :PRINT PRINT :PRINT PRINT :INPUT IF DAT=1 THEN IF DAT=2 THEN
IF DATこ3 THEN
IF DAT=4 THEN F IF DAT=5 THEN F│=
IF DAT=6 THEN Ft=
IF DAT=7 THEN PRI DAT=‑1 : RETURN GETDATA
OPEN NPUT I NPUT NOP=O FOR I
z
暮ル一打HがH ・1
U
a
'
・
.
1
コ車タを方崖2
‑ 動
= ー ン フ 遺 体 蝣 ‑ ‑ " 5 * コ 車 N 品 イで 結 丁 ん ″
ン. "5FOR INPUT AS #1 , TMPJ
i e
r o
名の入力 (7)
きい。 ''; DAT
GOTO 詛GETDATA
GOTO 'GETDATA
GOTO サGETDATA
GOTO ‑GETDATA
GOTO ォGETDATA GOTO ォGETDATA
′'データファイル名
'コメントの読み捨て , NOBJCT, TMP‡ '部品数
OL=0: PNOBASE=O TO NOBJCT
FS : GOTO ォGETDATA
INPUT #1 , OBJTYP, ORGX, ORGY, ORGZ, KX,KY,KZ,ROTANGLE, TMPl
(原点のX,Y,Z>
FOR ll‑1 TO NOP(OBJTYP) NOP=NOP+ 1
XT(NOP)‑X(OBJTYP, I YT(NOP)=Y(OBJTYP, I ZT(NOP)=Z(OBJTYP, I
X >
"
N
蝣 S ' J ' J
2 H
X .
Q :
0 0 0 + + +
XY Z
U K K
(倍率) (Z軸回りの回転角)
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
NORMOBJ ′ォブジ ュク FOR l=1 TO NOP:
S=
E . 5 G . . . I
化F 格式
ォc のH .s ‑T
IZE‑‑5 、原点‑重心)
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
GZ=(DMX+DMN /2
IF (DMX‑DMN) > MXSOBJ THEN MXSOBJ=DMX‑DMN FOR l=1 TO NOP
X Y Z
' J
' J
' J
l
l
一
T T T X Y Z
ll M ll
T TT
X >
‑ N NEXT RETURN
/MXSOBJ・10
/MXSOBJ'10
/MXSOBJサ10
RD.EYE ′視点(Xe.Ye,Ze) ,祝方
COLOR 5: PRINT :PRINT :PRINT
向澗
(L ︒ i コ 右 左 元 名
PRINT :PRINT 〝 半径 25 の円周上を行
PRINT :PRINT ′'
PRINT :PRINT PRINT :PRINT PRINT :INPUT
回ア下 者フで pfTJE&3酎調 進一遇 直コを 軸行号 Xt飛番
JKァ
IMZ
聖回国へ
良
,Ne)データの読み
ス'′: COLOR 6
転、視高一定 の入力戻る
さい。 ''; COURSE
I . I I I
‑ C M ォ
*
H H t u p
^ り
IF COURSE=1 THEN FS=〝cOuRSEl.DAT′': GOTO ォRD.EYEDATA IF COURSE=2 THEN FJ= COURSE2.DAT": GOTO サRD.EYEDATA IF COURSE=3 THEN F‡=''COuRSE3.DAT" : 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
n o
CO tn 00
0 ハ D O O O O O O O O O O O
つQ‑^Ln tD C^‑OO Oi O ‑i CO rO^t‑Lfi
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 )
xE(IEYE)‑XE( IEYE)ォTMP YE( IEYE)=YE( IEYE)ォTMP ZE( IEYE)=ZE( IEYE)ォTMP
TMP‑SQR( L(IEYE)一2 + M(IEYE)"2 + N(IEYE)"2 ) 1 P P P 1
5 T T T E E E Y Y Y E E E L M N
I I
E E E Y Y Y E E E
. ・ . .
・ , ; I
EYE= EYE+1
GOTO ォLPI
EXT
EYEMAX= EYE‑1 CLOSE #1 RETURN
O O O O O O L O O O O O ハ o o o o o o o n D O O O O O O O O O O O O r
‑
^ o q O i o
・ l t M C M M
^ L
^ t D r
^ O O C T J O
‑ i C S J f O l
* . L O C D r
^ O O f f l O
‑ i C N 3 C O
"
・
* 蝣 l f t
<
O
r‑r‑r^oo oo co oo oo oo oo oo co oo tso cD CTJ CTi Ci Oi CTi ai aj aj ai o o o o o o c CM CM CM CM CM CMウシウレ2ウレ222ウシウむc^c^cxi co c^esj oo ro cM co ci m co cn fo ro
′透視図を描く キCP Ne空?聖2df讐(Xe Me‑三Ye.Ze), +Ne‑2轡a't騨汽(Le,Me,Ne)は与えられているoR‑SQR(LEォLE+ME'ME)'(3)式 TIl‑ME/R:T12‑‑LE/R'(1)式の透視変換行列 T21=‑LEォNE/R:T22=‑MEサNE/R:T23=R FOR=1TONOP GOSUBォCPROJ′(XT(I),YT(I),ZT(I)]から(XP(I),YP(D)を計算する
NKXT
IFILOOP=OTHENGOSUBォGETWINDOW GOSUBォCHKXPYP APAGE‑1‑APAGE:SCREEN‥APAGE GOSUB.SETWINDOW:CLS2 FORNLニ1TONOL I‑LINK(NL,1):J=LINK(NL,2) IFZP(I)くOANDZP(J)くOTHEN2960 LINE(XP(I),‑YP(I))‑(XP(J),‑YP(J) NEXTNL SCREEN,‥DPAGE(APAGE) RETURN
CPROJ
XAE=XT( I卜XE: YAE=YT( I主YE: ZAE=ZT(I )‑ZE
ZP I = LEォXAE + ME'YAE + NE'ZAE IF ZP I)く=O THEN ZP I =‑1: RETURN
(2)式
XP(II ‑ ( TlいXAE +TL2ォYAE / ZP(I) (1)式 YP(I) ‑ ( T21ォXAE +T22ォYAE +T23ォZAE ) / ZP(I) (1)式 RETURN
o o o o o o o o o o ハ D O O O O ハ 3 0 ゥ O ゥ ゥ O n v O A : d o o
t ‑
‑ o o a >
0 ‑ i n w j
‑ w
^ n o o c i o ‑ i N W T f w o o o a
‑ <
c * j m ‑
< r i r >
< ﹂
> o o
0 0 0
‑
‑
‑ 1
‑ .
‑
‑
‑ .
‑ 1
‑
‑
̲
̲
<
C O C O つ O o o c v i o c e o e s j o o e o c o r o つ o c o c o c s
c *
: c
o
c o
P
O
c o
c
o
c o
c
* D
f
O
f o
c
i o
c
o
c o
c
o
P o
r
o
c o
c
T 5
C O
P
O
P O
M
c
* :
c o
r
O
f O
P
' D
r
o
c
CHKXPYP 'これがないとデー PC9801 ‑N88BASI FOR l=1 TO NOP
IF XP I IF XP(I IF YP(I IF YP(I NEXT RETURN
くXM N
> XMAX くYMIN
>YMAX
メ C R要 ‑3 はみ ての っ合・4
鳩
にの
0 . 0 . 0 . 0 .
X *
> ‑ . >
<
z z z z U U U I U
SSXI hhhH
こXM N
OCMAX
こYM N
= YMAX
R 0 Rがでる
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
I/mm 0, ′'部品番号〝
2, "頂点の数〝
0,0,0 1,1,1
1, ′'線分の数〝
1.2
‑・‑コメント行
‑・頂点1の座標
・‥‑頂点2の座標
‑一点1と2を結ぶ //四角形(X‑Y平面)
1, 〝部品番号'′
4, "頂点の数"
0,0,0, 1,0,0, 1,1,0, 0,1,0
4, 〝線分の数"
1,2, 2,3, 3,4, 4,1
//立方体
5, ′′部品番号'′
8, ′′頂点の数"
0,0,0, 1,0,0, 0,0,1, 1,0,1,
12,線分の数〝
1,2, 2,3, 3,4,
0 1
1 1
0 0
0 1
1 1
1,5, 5,6, 6,7, 8,5, 2,6, 3,7,
//トンガリ屋根の建物 7, "部品番号′' 9, "頂点の数′'
‑ i 0 0 0 0
tt r*‑ ^r
0,0,0, 1,0,0, 1,1,0, 0,1,0, 0,0,1 1,0,1, 1,1,1, 0,1,1, 0.5, 0.5, 1.5
16, "線分の数"
1,2, 2,3, 3,4, 6,7, 7,8, 8,5, 3,7, 4,8, 5,9,
to cd ai
5 2 7
‑i Ln 05
4 1 6
//街1 ・‑・コメント行 9. "BBS数‑9 '′
1, ‑10, ‑2, 0, 0, ‑9, 0, 0, 0, ‑9, 0, 0, 0, ‑9, 0, 0, 5, 8, ‑4, 0, 5, 一名 2, 0, 7, ‑7, ‑5, 0, 7, ‑4, 2, 0, 8, ‑1, 2, 0,
20, 4, 0, 0 '道〝
3, 0, 0, 0 '実印′' 1, 1, 0, 0 ′駕印"
1,‑1. 0, 0 矢印"
2, 2, 4, 0 ビル1"
3, 4, 6, 0 ビル2'′
3, 3, 3, 0 とんがり良限1′' 2, 2, 8, 0 ′'とんがり良限2〝
5, 3, 5, 0 ′噸根〝
† † I † † I † † †
雅完膚考X, Y, Z, KX,YX,・Z,0,コメント
(醜所) (拡大率)
付録4 飛行コースファイルの例("皿だ5ei.mr')
11ax艦1 (30‑づっ右回転、視高一定) ‑コメント
1, 0, 0, 24, ‑1, 0, 0.87, 0.50, 0, 24,
0.50, 0.87, 0, 24, 0, 1, 0, 24,
‑0.50, 0.87, 0, 24,
‑0.87, 0.50, 0, 24,
‑1, 0, 0, 24,
‑0.87, ‑0.50, 0, 24,
一0.50, ‑0.87, 0, 24,