格子点の値が欠損値のときでも, 欠損値処理の指定をすることによって,
2次元量表示サブルーチンでも欠損値処理を して作図できます.
下のプログラムの例では, 格子点値の一部分を欠損値MISSING_REAL
(この値はDclGetParm ルーチンで設定されている実数欠損値を
参照しました)として, 欠損値処理の指定をおこなって作画しています. 欠損
値処理の指定は, やはり DclSetParm ルーチンによって内部変数 'INTERPRET_MISSING_VALUE' を .TRUE. とすることによっておこないます. この実行結果
からもわかるように, 欠損値のまわりの格子点を境界としてコンターやトーン
が描かれません.
2次元ベクトル場を作画する DclDrawVectors でも, 同様の欠損値処理を行ないます. DclDrawVectors ルーチンでは, ベクトルの少なくとも1成分が欠損値の時にはベ クトルを描きません. DclSetParm ルーチンで内部変数 'ENABLE_MISS_VECTOR_MARKER' を .TRUE. にすると, 欠損値ベクトルの格子点にマーカー×を描きます. この印のマーカータイプやマーカーサイズは, やはり, DclSetParmルーチンでそれぞれ対応する内部変数 'MISS_VECTOR_MARKER_TYPE', 'MISS_VECTOR_MARKER_SIZE' を設定することにより変更できます.
program miss02
use dcl
integer,parameter :: nx=36, ny=36
real,parameter :: xmin=0, xmax=360, ymin=-90, ymax=90
real,parameter :: pi=3.14159, drad=pi/180
real :: p(0:nx,0:ny)
call DclGetParm( 'MISSING_REAL', rmiss )
call DclSetParm( 'INTERPRET_MISSING_VALUE', .true. )
do j=0,ny
alat = ( ymin + (ymax-ymin) * j/ny ) * drad
slat = sin(alat)
do i=0,nx
alon = ( xmin + (xmax-xmin) * i/nx ) * drad
p(i,j) = 3*sqrt(1-slat**2)*slat*cos(alon) - 0.5*(3*slat**2-1)
if( i==6 .and. j==6 ) then
p(i,j) = rmiss
end if
if( ( 8 <= i .and. i <= 24) .and. j==30 ) then
p(i,j) = rmiss
end if
if( (22 <= i .and. i <= 30) .and. (12 <= j .and. j <= 20) ) then
p(i,j) = rmiss
end if
end do
end do
call DclOpenGraphics()
call DclNewFrame
call DclSetWindow( xmin, xmax, ymin, ymax )
call DclSetViewPort( 0.2, 0.8, 0.2, 0.8 )
call DclSetTransFunction
call DclShadeContour( p )
call DclDrawScaledAxis
call DclDrawContour( p )
call DclCloseGraphics
end program
|
![]() |