3.1.2 ウインドウとビューポート

次のプログラム KIHON7 では, U-座標系でのポリラインやテキストプリ ミティブの出力結果が, ウインドウとビューポートの設定の仕方によってどの ようになるかを示しましょう.

#
# kihon7.rb

require "narray"
require "numru/advanceddcl"

include NumRu::AdvancedDCL
include NMath

def aplot
  nmax = 40
  x = NArray.sfloat(nmax+1)
  y = NArray.sfloat(nmax+1)

  #-- circle ----
  dt = 2.0*PI/nmax
  for n in 0..nmax
    x[n] = 40.0*sin(n*dt)
    y[n] = 40.0*cos(n*dt)
  end

  Plot.draw(x, y)

  #-- triangle ----
  dt = 2.0*PI/3
  for n in 0..3
    x[n] = 40.0*sin(n*dt)
    y[n] = 40.0*cos(n*dt)
  end

  Plot.draw(x, y)

  #-- string ----
  Text.draw(0.0, 0.0, 'SGTXU')
  Frame.pvpr(1)

end

#-- graph ----
Dev.open

#-- frame 1 ----
Frame.new
#        XMIN,  XMAX,   YMIN,  YMAX
Fig.window=[-100.0, 100.0, -100.0, 100.0]
Fig.viewport=[ 0.0,   1.0,    0.0,   1.0]
Fig.transnum=1

aplot

#-- frame 2 ----
Frame.new

#-- upper left ----
#        XMIN,  XMAX,   YMIN,  YMAX
Fig.viewport=[ 0.1,   0.4,    0.6,   0.9]

aplot

#-- upper right ----
#        XMIN,  XMAX,   YMIN,  YMAX
Fig.window=[-100.0, 100.0,  -40.0,  40.0]
Fig.viewport=[ 0.6,   0.9,    0.6,   0.9]

aplot

#-- lower left ----
#        XMIN,  XMAX,   YMIN,  YMAX
Fig.window=[-100.0, 100.0, -200.0,   0.0]
Fig.viewport=[   0.1,   0.4,    0.1,   0.4]

aplot
      
#-- lower right ----
#        XMIN,  XMAX,   YMIN,   YMAX
Fig.window=[-100.0, 100.0,    0.0, -200.0]
Fig.viewport=[   0.6,   0.9,    0.1,   0.4]

aplot

Dev.close

PROGRAM KIHON7

\resizebox{10cm}{!}{\includegraphics{kihon2/kihon7_001.eps}}
kihon7.rb: frame1

\resizebox{10cm}{!}{\includegraphics{kihon2/kihon7_002.eps}}
kihon7.rb: frame2

1フレームめが基本形で, まず Frame.pvpr ルーチンでビューポートの枠を 描き, U-座標系描画ルーチンの Plot.draw で円と正三角形を描き, Text.draw で文字列 'SGTXU' を描いています(メソッド aplot).

2フレームめの左上には, 同じ aplot メソッドでビューポートだけ を小さくして描いてみました. ビューポートが小さくなったのに対応して Plot.draw で描いた円と三角形は小さくなりましたが, 文字の大きさは1フ レームめと変わりません. U-座標系でのテキストプリミティブでも, 文字の 大きさはV-座標系の単位で指定するので, ビューポートの大きさが変わっても 文字の大きさは変わらないのです.

次に, ウインドウのy軸の範囲を変えてみました(右上). 範囲を40%に狭め たので, 図形は縦に引き延ばされて, 円が楕円になりました. この場合にも, 文字は変わりません.

左下の例では, ウインドウの縦横比を元に戻して, UYMIN=-200, UYMAX=0y軸負方向に平行移動させました. その結果, 設定したビュー ポートをはみ出して図形を描いています.

最後に, 右下の例はウインドウのy軸を逆転させた場合です. UYMIN=0, UYMAX=-200 として, 左下の場合と逆にしました. この 時の三角形を見れば明らかなように, 図形は上下に折り返されています. ただ し, 文字列は正立のままで折り返されません.

下の2つの例のように, 設定したビューポートをはみ出して図形を描く場合, はみ出した部分を描かないようにすることも出来ます. クリッピングに関す るパラメタ lclip.TRUE. に してやると, ビューポートをはみ出した部分はラインでも文字でも描かれませ ん.