コンター線図描画(CONT)


CONTS, CONTSO, CONTX, CONTR
1.機 能
    任意サイズの配列で格子点上に与えられたデータのコンター線図を,実線・
  破線・点線または1点鎖線で描くためのルーチン群である.コンターは主曲線と
  計曲線からなり,コンター線の密な部分は計曲線のみを描く.また,計曲線の
  両端(閉曲線となる場合は1ヶ所)にコンター値を記入する.conts/contsoル
  ーチンで,コンター線図を描く位置と大きさ等を事前に設定し,contx/contr
  ルーチンで,実際のコンター図の作画を行う.
    contx/contrルーチンでは,処理に必要なワーク用のメモリエリアを動的に
  確保する.その際,メモリ確保に失敗すると,contrx: memory allocation fail
  なるメッセージを出力して異常終了する.

2.呼出し手順と引数

      call conts(xorg, yorg, wide, high, imax, jmax, csize)
  xorg, yorg  [float] 基点(wide>0, high>0 なら左下隅)の座標値(cm単位)
  wide        [float] コンター図の横幅(cm単位,負なら基点の左側に描かれる.)
  high        [float] コンター図の高さ(cm単位,負なら基点の下側に描かれる.)
  imax, jmax  [int]   右方向,上方向の格子点数(両端ともカウントする.)
                      格子点データ2次元配列の整合寸法を規定する.
          通常(imax>0, jmax>0)は,FORTRAN での配列宣言が (imax, jmax) で
          あり,格子位置の横方向が先に変化する順序で配列要素が並ぶものと想定
          している.格子位置の縦方向が先に変化する順序で配列要素が並ぶ場合に
          は,imax,jmax とも負の値で与える.このとき,FORTRAN での配列宣言は
          (-jmax, -imax) であるとみなされる.
  csize       [float] 記入するコンター値の文字サイズ
                      (csize≦0. のときは,コンター値を記入しない.)

      call contso(x0, y0, x1, y1, x2, y2, imax, jmax)
  x0, y0      [float] 基点(データ配列の(1,1)の位置)の座標値(cm単位)
  x1, y1      [float] データ配列の(imax,1)位置の座標値(cm単位)
  x2, y2      [float] データ配列の(1,jmax)位置の座標値(cm単位)
  imax, jmax  [int]   格子点データ2次元配列の整合寸法(imax>1, jmax>1)
          (x0,y0), (x1,y1), (x2,y2) の3頂点と第4頂点 (x1+x2-x0, y1+y2-y0) で
          囲まれる一般に傾斜した斜交格子上のコンター図の作画を行うことができ
          る.但し,コンター値の記入は行わない.

      call contx(v, undef, istep, lcapt, lml, lmh, kln)
      call contr(v, undef, step, lcapt, vlml, vlmh, kln)
  v           [float] 格子点データを与える配列(要素数 imax×jmax)
  undef       [float] 格子点データが未定義であることを示す数値を与える.
  istep       [int]   コンター間隔を整数(istep>0)で指定する.
  step        [float] コンター間隔を実数(step>0.)で指定する.
  lcapt       [int]   計曲線間隔倍率m(m≠0)を指定する.コンターのm本目毎
                      に計曲線が入る. 負の値で与えると,コンター間隔が密にな
                      ってもペンアップしない.
  lml, lmh    [int]   描画するコンター値の下限・上限を整数で指定する.
                      (指定の両端値がコンター間隔の整数倍に相当するとき,
                        当該値のコンターは描かれる.)
  vlml, vlmh  [float] 描画するコンター値の下限・上限を実数で指定する.
                      (指定の両端値がコンター間隔の整数倍に相当するとき,
                        当該値のコンターを描かない.)
  kln         [int]   コンターの線種を与える.0〜16 のいずれか.
          0:実線,1:破線,2:点線,3:鎖線. 4〜6 は,1〜3 と同じ線種の指定であ
          るが,計曲線は実線で描く. 7〜9 は,計曲線を除いた主曲線のみを 1〜3 
          と同じ線種で描く. 以上の場合の線の色・太さは,すべてペン番号1 に設
          定されている色・線幅となる. 10〜16 は,0〜6 と同様であるが,計曲線
          をペン番号2 に設定されている色・線幅で描き,その他をペン番号1 の色・
          線幅で描く.いずれの場合も,終了時にはペン番号が復元される.

      conts の標準的な使用法(imax>0,jmax>0,wide>0.,high>0.)では,2次
    元配列 v の,第1要素がコンター図の左下隅の位置,第(imax*jmax)要素が右上隅
    の位置,第(imax)要素が右下隅の位置に対応するが,wide<0. とすれば,左右反
    転,high<0. とすれば,上下反転の作画が行える. 但し,その際も 基点の座標
    (xorg,yorg) は,つねに第1要素の位置である.なお,imax<0,jmax<0 の場合
    は,上下左右とも反転なしのとき,第(-jmax)要素が左上隅である.

3.使 用 例

      dimension f(151,101)
      do 100 i=1,151
        x = float(i-76)
        a = float(i-86)
        do 10 j=1,101
          y = float(j-51)
          b = float(j-31)
          r = sqrt(x*x + y*y)
          s = sqrt(a*a + b*b)
          f(i,j) = r*3. - s*2. + 17.
          if(r.gt.50.) f(i,j) = 999.
  100 continue
      call psopn('cont.ps', 'a4p')
      call plots(0., 0.)
      call wrect(2., 2., 15., 10.)
      call conts(2., 2., 15., 10., 151, 101, 0.12)
      call contx(f, 999., 1, 5,-100, -11,  0)
      call contx(f, 999., 1, 5, -10,   0, 10)
      call contx(f, 999., 1, 5,   1,  25, 11)
      call contx(f, 999., 1, 5,  26,  50, 14)
      call contx(f, 999., 1, 5,  51,  75,  2)
      call contx(f, 999., 1, 5,  76, 100, 12)
      call contx(f, 999., 1, 5, 101, 200,  3)
      call plot( 4., 15., -3)
      call plot( 7.,-2.5, 2)
      call plot(11., 0.5, 2)
      call plot( 4., 3. , 2)
      call plot( 0., 0. , 2)
      call dfcols(0)
      call dframo(0., 0., 7., -2.5, 4., 3., 151, 101)
      call contso(0., 0., 7., -2.5, 4., 3., 151, 101)
      call paintm(f, 0., 100., 999.)
      call contx(f, 999., 5, 4, -50, 150,  0)
      call plote
      call pscls
      stop
      end