また, 等高線図やベクトル場のルーチンもそのまま使えます. 下のプログラムでは,
等高線とベクトル場を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インターフェイス名.