まず, 3次元空間内で三軸に平行に置かれた立方体の表面に, 2次元の作図をし
てみましょう. 作画する2次元平面をちゃんと指定すれば,
これまでの描画サブルーチンがそのまま使えます.
program sample_3d04 use dcl real,parameter :: xmin= -50, xmax= 50, ymin= -50, ymax= 50 real,parameter :: vxmin=0., vxmax=0.8, vymin=0., vymax=0.8 real,parameter :: zmin= -50, zmax= 50 real,parameter :: vzmin=0., vzmax=0.8 real,parameter :: xvp3=2.5, yvp3=-1., zvp3=1.5 real,parameter :: xfc3=(vxmax-vxmin)/2, yfc3=(vymax-vymin)/2 real,parameter :: zfc3=(vzmax-vzmin)/2 call DclOpenGraphics() call DclSetParm( 'GRAPH:ifont' , 2 ) call DclNewFrame !-- x-y plane ---- call DclSetWindow( xmin, xmax, ymin, ymax ) call DclSetViewPort( vxmin, vxmax, vymin, vymax ) call DclSetTransFunction call DclSet2DPlane( 1, 2, vzmax) call DclSet3DEyePoint( xvp3, yvp3, zvp3 ) call DclSet3DObjectPoint( xfc3, yfc3, zfc3 ) call DclSet3DProjection call aplot( 1 ) !-- x-z plane ---- call DclSetWindow( xmin, xmax, zmin, zmax ) call DclSetViewPort( vxmin, vxmax, vzmin, vzmax ) call DclSetTransNumber( 1 ) call DclSetTransFunction call DclSet2DPlane( 1, 3, vymin) call DclSet3DProjection call aplot( 2 ) !-- y-z plane ---- call DclSetWindow( ymin, ymax, zmin, zmax ) call DclSetViewPort( vymin, vymax, vzmin, vzmax ) call DclSetTransNumber( 1 ) call DclSetTransFunction call DclSet2DPlane( 2, 3, vxmax) call DclSet3DProjection call aplot( 3 ) call DclCloseGraphics end program !----------------------------------------------------------------------- subroutine aplot( ijk ) use dcl integer,parameter :: nmax=40 real :: x(0:nmax), y(0:nmax) character cttl*2 call DclDrawViewPortFrame( 1 ) dt = 2.*3.14159 / nmax do n=0,nmax x(n) = 40.*sin(n*dt) y(n) = 40.*cos(n*dt) end do call DclDrawLine( x, y ) dt = 2.*3.14159 / 3 do n=0,3 x(n) = 40.*sin(n*dt) y(n) = 40.*cos(n*dt) end do call DclDrawLine( x(1:4), y(1:4) ) call DclSetTextHeight( 0.07 ) call DclDrawText( 0., 0., 'dennou' ) write(cttl(1:2), '(i2.2)') ijk call DclDrawText( 0., -30., cttl ) return end subroutine |
|
DclSet3DEyePoint (SCSEYE) |
透視変換の視点を設定する. |
DclSet3DObjectPoint (SCSOBJ) |
透視変換の焦点を設定する. |
DclSet2DPlane (SCSPLN) |
2次元平面を3次元空間に割付る. |
DclSet3DProjection (SCSPRJ) |
透視変換を確定する. |
* 括弧の中は、対応するf77インターフェイス名.