|
!こんなものが、出て来た。(再投稿?、再々・・不明)
!このアニメは、山中和義氏のガイドにより、大昔しに、作成したものです。
!スカイ・ウェイ
!-----
DIM Tr(4,4),Mv(4,4),Mp(4,4) !被写体移動、視点移動、プロジェクション変換
DIM mx(4,4),Xz(4,4),zY(4,4) !作業用、XY_Xz変換、XY_zY変換
MAT Tr=IDN
MAT Mv=IDN
!-----Y軸→Z軸 XY平面図→XZ平面図
MAT READ Xz
DATA 1,0,0,0
DATA 0,0,1,0 !Xz(2,1)=Z軸水平傾斜、Xz(2,2)=Z軸垂直傾斜
DATA 0,0,0,0
DATA 0,0,0,1 !Xz(4,2)=増設Y座標
!-----X軸→Z軸 XY平面図→ZY平面図
MAT READ zY
DATA 0,0,1,0 !zY(1,1)=Z軸水平傾斜、zY(1,2)=Z軸垂直傾斜
DATA 0,1,0,0
DATA 0,0,0,0
DATA 0,0,0,1 !zY(4,1)=増設X座標
!-----3D(X,Y,Z)→2D(X,Y)/Z プロジェクション変換 Mp(行,列)
SET WINDOW -1,1,-1,1 ! 画面スケールで、投影距離調整。
! 行列は、1に正規化した。
MAT READ Mp
DATA 1,0,0,0 !(X,Y,Z,1)→(1X,1Y,1Z,1Z) 3列目の1Z は無効。
DATA 0,1,0,0 !
DATA 0,0,1,1 ! 4列目の1Z→ 描画倍率=1/1Z で 遠近効果する。
DATA 0,0,0,0 ! (距離1への投影)
!-----
!原画_行ベクトル Tr 論理_行ベクトル
! (X,Y,0,1)|1 0 0 0| →(X,Y,Z,1)Z 座標の追加。
! |0 1 0 0|
! |0 0 1 0|
! |0 0 Z 1|
!論理_行ベクトル Mv 論理_行ベクトル
! (X,Y,Z,1)|1 0 0 0| →(X-x,Y-y,Z-z,1)視点(x,y,z)からの相対座標。
! |0 1 0 0|
! |0 0 1 0|
! |-x -y -z 1|
!論理_行ベクトル Mp 表示_行ベクトル
!(X-x,Y-y,Z-z,1)|1 0 0 0| →(X-x,Y-y,Z-z,Z-z) Z 座標を、縮小率へ転写。
! |0 1 0 0|
! |0 0 1 1|
! |0 0 0 0|
!4列目Z-z:倍率逆数(分母)= 1/{Z-z} Z座標→投影縮小率。
!-----
!等加速度運動
DEF v(t)=v0 +a*t !速度
DEF d(t)=v0*t+a*t*t/2 !移動距離 ※∫v(t)dt
LET v0=15 ! m/s 初速度
LET a=-v0^2/2/298 ! m/s^2 減速加速度, -v0^2/2/移動距離
!
LET t0=TIME !開始
DO WHILE v(t)>0 !減速、停止するまで
LET t=TIME-t0 !経過時間を得る
IF t>tb+0.15 THEN
LET tb=t
PRINT USING "時間=###.## 速度=##.## 走行距離=###.##":t,v(t),d(t)
SET DRAW mode hidden !裏ページに書く、ちらつき防止の開始
CALL Animation( d(t)) !位置d(t)の前方描画
SET DRAW mode explicit !裏ページの表示、ちらつき防止の終了
END IF
LOOP
DEF yaw(z)=10*SIN((z-2)*0.1) !カーブ、横の偏差
DEF d_yaw(z)= COS((z-2)*0.1) !カーブ、微分係数
DEF pitch(z)=5*SIN(z*0.1) !ピッチ、縦の偏差
DEF d_pitch(z)=0.5*COS(z*0.1) !ピッチ、微分係数
SUB Animation(d) !-----バス位置d の外界を描く
CLEAR
!----空
SET AREA COLOR 17
PLOT AREA:-1,0; 1,0; 1,1; -1,1
!----地
SET AREA COLOR 42
PLOT AREA:-1,0; 1,0; 1,-1; -1,-1
!----文字
SET TEXT COLOR 0
SET TEXT FONT "",90
!
!バス位置d が固定(Z=1.5m)する様に 視点dd (Z=0m)を後ろへ下げる。
!視点dd(Z=0)を中心、バス位置d(Z=1.5)を画面の枠に合わせる。投影面(Z=1.5)に射影。
!前方170m から、視点dd(Z=0)の 0.1m前方(Z=0.1)を限界に、※奥から描く
!
!----視点移動のマトリクス Mv
LET dd=d-1.5
LET Mv(4,1)=-2-yaw(d) !車道左端から2m と左右動
LET Mv(4,2)=-1.5-pitch(d) !高さ1.5m と上下動
LET Mv(4,3)=-dd !バス位置d の後方1.5m
!----
! 1 ,0 ,0 , 0|
! 0 ,1 ,0 , 0|
! 0 ,0 ,1 , 0|
!-2-yaw(d) ,-1.5-pitch(d),-dd, 1|
!----
FOR i=2.5*INT(d/2.5)+170 TO dd+0.1 STEP -2.5
! ----被写体移動のマトリクス Tr
LET Tr(4,1)=yaw(i) !左右動
LET Tr(4,2)=pitch(i) !上下動
LET Tr(4,3)=i !z座標
!----
! 1 ,0 ,0, 0|
! 0 ,1 ,0, 0|
! 0 ,0 ,1, 0|
! yaw(i) ,pitch(i) ,i, 1|
!----
MAT mx=Tr*Mv*Mp
DRAW 道路 WITH mx
IF REMAINDER(i,10) =5 THEN DRAW 街路樹 WITH mx
IF REMAINDER(i,10) =0 THEN
IF REMAINDER(i,50)=0 THEN DRAW バス停(2)WITH mx ELSE DRAW バス停(4)WITH mx !(終点=3 途中=4)
DRAW 建物(8,-9,3,3,1) WITH mx !(x,y,幅,高,奥)
DRAW 建物(-8,-9,3,3,1) WITH mx !(x,y,幅,高,奥)
END IF
NEXT i
END SUB
!パーツのサイズ。バスの位置d (Z=1.5m)で、表示倍率 1/z=1/1.5
PICTURE 建物(x,y,w,h,d1)
! ---顔面
LET zY(1,1)=d_yaw(i+w/2) !Z軸水平傾斜、カーブの微分
LET zY(1,2)=0 !d_pitch(i+w/2) !Z軸垂直傾斜、ピッチの微分
LET zY(4,1)=x !増設X軸
DRAW 前後面(y,w,h) WITH zY !元のX軸→Z軸
!---背面
LET zY(4,1)=x+d1 !増設X軸
DRAW 前後面(y,w,h) WITH zY !元のX軸→Z軸
!---屋上
LET Xz(2,1)=d_yaw(i+w/2) !Z軸水平傾斜、z軸カーブの微分
LET Xz(2,2)=0 !d_pitch(i+w/2) !Z軸垂直傾斜、z軸ピッチの微分
LET Xz(4,2)=y+h !増設Y軸
DRAW 水平面(x,w,d1) WITH Xz !元のY軸→Z軸
!---床面
LET Xz(4,2)=y !増設Y軸
DRAW 水平面(x,w,d1) WITH Xz !元のY軸→Z軸
!---側面
SET AREA COLOR 22
PLOT AREA:x,y; x+d1,y; x+d1,y+h; x,y+h
END PICTURE
!
PICTURE 前後面(y,w,h)
SET AREA COLOR 25
PLOT AREA:0,y; w,y; w,y+h; 0,y+h !(Z,Y)座標として描く。
END PICTURE
PICTURE 水平面(x,w,d1)
SET AREA COLOR 25 !26
PLOT AREA:x,0; x+d1,0; x+d1,w; x,w !(X,Z)座標として描く。
END PICTURE
PICTURE 道路
LET Xz(2,1)=d_yaw(i+2.2/2) !Z軸水平傾斜、z軸カーブの微分
LET Xz(2,2)=d_pitch(i+2.2/2) !Z軸垂直傾斜、z軸ピッチの微分
LET Xz(4,2)=0 !増設Y軸
DRAW 路面 WITH Xz !元のY軸→Z軸
!---継ぎ目線
PLOT LINES: 0,0; 2.9,0
PLOT LINES:3.1,0; 6,0
END PICTURE
PICTURE 路面
SET AREA COLOR 15
PLOT AREA:0,0; 6,0; 6,2.2; 0,2.2 !(X,Z)座標として描く。
END PICTURE
PICTURE 街路樹
SET AREA COLOR 12 !幹
PLOT AREA:-0.075,0; 0.075,0; 0.025,3; -0.025,3
SET AREA COLOR 10 !葉
FOR w=1 TO 7
DRAW disk WITH SCALE(0.3+0.05-RND*0.1)*SHIFT(0.4-RND*0.8, 2.7+0.325-RND*0.75)
NEXT W
END PICTURE
PICTURE バス停(c)
SET AREA COLOR c
PLOT AREA:-0.025,0; 0.025,0; 0.025,2; -0.025,2
DRAW disk WITH SCALE(0.5)*SHIFT(0,2)
PLOT TEXT,AT -.35,1.74,USING ">%%":STR$(i)
END PICTURE
END
|
|