detvs

    視点の座標と描かれる3Dオブジェクトを含む領域 V をもとにして,pgplotで必要となるビューポートとpgxtalで3Dオブジェクトを描くunit cellの格子ベクトルを決定するルーチン.
     
     
  • サブルーチン名: detvs

  •  
  • 呼び出し方:call detvs(eye,region,copt0,theta1,theta2,slattice,xview0,xview1,yview0,yview1)

  •  
  • 引 数:
  • 引数
    意 味
    入出力の区分
    備 考
    eye(3) 視点の座標
    入力
    region(3,4) 描くべき3Dオブジェクトを内包する領域の4つの頂点の座標.
    入力
    copt0 文字型2バイト
    copt0='xy'の場合,x軸回りの回転の後でy軸回りの回転を行う.
    copt0='yx'の場合,y軸回りの回転の後でx軸回りの回転を行う.
    それ以外の場合,如何なる回転も行わない.
    入力
    theta1 1回目の回転角(単位はdegree)
    入力
    theta2 2回目の回転角(単位はdegree)
    入力
    slattice(3,4) unit cellの原点の座標と格子ベクトルa, b, c.
    出力
    xview0 ビューポートは
    {(x,y): (xview0,xview1)×(yview0,yview1)となる.
    出力
    xview1
    出力
    yview0
    出力
    yview1
    出力

  • 注 意:
    1)本ルーチンの内部では,pgxtalやpgplotライブラリに属するサブルーチンを全く呼び出していない.それ故,本ルーチンを呼び出す際には,以下の手続をしておく必要は必ずしも無いのである.
    (1)pgbeginを用いて,pgplotライブラリを初期化する.
    (2)sbfintを用いて,ソフトウェア・バッファを初期化する.

    2)本ルーチンでは,領域 V をunit cellへ変換している(アフィン変換).3次元領域内の任意点に同じアフィン変換を行うには,サブルーチンaffrcを呼び出せばよい.

    3) 本ルーチンでは,視点だけは回転しない.

  • 典型的な使用例:
      ……
      call detvs(eye,region,copt,theta1,theta2,
    &      slattice,xmin,xmax,ymin,ymax)
      call pgbegin(0,'?',1,1)
      call pgenv (xmin,xmax,ymin,ymax,1,-2)
      call sbfint (rgbbkg,16,1,1,maxbuf)
      call colint (rgbis2,49,80,0.0,1.0,1.0)
      call sbsurf (eye,slattice,dens,ndiv(2),ndiv(3),ndiv(4),dsurf2,
    &       49,80,alight,.false.)
      ……