平面を指定して2次元図を貼りつける

まず, 3次元空間内で三軸に平行に置かれた立方体の表面に, 2次元の作図をし てみましょう. 作画する2次元平面をちゃんと指定すれば, これまでの描画サブルーチンがそのまま使えます.

3d04.f90
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インターフェイス名.