また, 等高線図やベクトル場のルーチンもそのまま使えます. 下のプログラムでは,
等高線とベクトル場を2段重ねにして表現してみました.
program sample_3d05 use dcl integer,parameter :: nx=21, ny=21 real,parameter :: xmin=-10, xmax= 10, ymin=-10, ymax= 10 real,parameter :: vxmin=0.2, vxmax=0.8, vymin=0.1, vymax=0.5 real,parameter :: zmin=0.0, zmax= 20 real,parameter :: vzmin=0.0, vzmax=0.6 real,parameter :: xvp3=-0.7, yvp3=-0.7, zvp3=1.2 real,parameter :: xfc3=(vxmax-vxmin)/2, yfc3=(vymax-vymin)/2 real,parameter :: zfc3=(vzmax-vzmin)/2 real,parameter :: dx1=1, dx2=5, dy1=1, dy2=4, dz1=1, dz2=5, pmin=0, pmax=1 integer,parameter :: kmax=5 real :: u(nx,ny), v(nx,ny), p(nx,ny) do j=1,ny do i=1,nx x = xmin + (xmax-xmin)*(i-1)/(nx-1) y = ymin + (ymax-ymin)*(j-1)/(ny-1) u(i,j) = x v(i,j) = -y p(i,j) = exp( -x**2/64 -y**2/25 ) end do end do call DclOpenGraphics() call DclNewFrame !-- x-y 平面: 下レベル ---- call DclSetWindow( xmin, xmax, ymin, ymax ) call DclSetViewPort( vxmin, vxmax, vymin, vymax ) call DclSetTransNumber( 1 ) call DclSetTransFunction call DclSet2DPlane( 1, 2, vzmin ) call DclSet3DEyePoint( xvp3, yvp3, zvp3 ) call DclSet3DObjectPoint( xfc3, yfc3, zfc3 ) call DclSet3DProjection call DclDrawAxis( 'bt', dx1, dx2 ) call DclDrawTitle( 'b', 'x-axis', 0. ) call DclDrawAxis( 'lr', dy1, dy2 ) call DclDrawTitle( 'l', 'y-axis', 0. ) call DclSetParm( 'VECTOR:rsizet', 0.014 ) call DclDrawVectors( u, v ) !-- x-y 平面: 上レベル ---- vzlev = vzmin + (vzmax-vzmin)*.6 call DclSet2DPlane( 1, 2, vzlev ) call DclSet3DProjection dp = (pmax-pmin)/kmax do k=1,kmax tlev1 = (k-1)*dp tlev2 = tlev1 + dp ipat = 600 + k - 1 call DclSetShadeLevel( tlev1, tlev2, ipat ) end do call DclShadeContour( p ) call DclSetParm( 'CONTOUR:lmsg' , .false. ) call DclSetContourLevel( p, 0.1 ) call DclDrawContour( p ) call DclDrawViewPortFrame( 1 ) !-- x-z 平面 ---- call DclSetWindow( xmin, xmax, zmin, zmax ) call DclSetViewPort( vxmin, vxmax, vzmin, vzmax ) call DclSetTransNumber( 1 ) call DclSetTransFunction call DclSet2DPlane( 1, 3, vymax ) call DclSet3DProjection call uzinit call DclDrawAxis( 'l', dz1, dz2 ) call DclDrawTitle( 'l', 'z-axis', 0. ) call DclCloseGraphics end program |
|
DclSet3DEyePoint (SCSEYE) |
透視変換の視点を設定する. |
DclSet3DObjectPoint (SCSOBJ) |
透視変換の焦点を設定する. |
DclSet2DPlane (SCSPLN) |
2次元平面を3次元空間に割付る. |
DclSet3DProjection (SCSPRJ) |
透視変換を確定する. |
* 括弧の中は、対応するf77インターフェイス名.