(Tips) カンタン 2 次元描画ルーチン

作成者:辻野 智紀

概要

DCL を用いてカンタンに 2 次元等高線・ベクトルを作成するサンプルスクリプトです. 汎用性はほとんどありません.

ここでは, 2 次元等高線・ベクトルの例として, 2 次元の非圧縮・渦なしの定常流の中で, 角度 π/3 の角を回る流れについて, 流線関数・流速ベクトルの描画を行います.

私はまだ ruby の初心者なので, 間違い等が多分にあると思いますので, その点はお許し下さい.

1 次元のサンプルはすでに他の方が作成されているようですので, 2 次元描画のサンプルプログラムとして使用していただければ幸いです.

カンタン等高線ルーチン

'2d_cntr.rb' は, 前述の定常流について, 流線関数の等高線を描画したものです. 描画に関係する部分のみ以下に示します. 流線関数の値を格納した配列 'psi' は nmax x mmax 個の 2 次元配列です.

#-------- DCL による描画 ---------#

puts "WORKSTATION ID (I)  ? ;"
DCL::sgpwsn
iws = gets

DCL::gropn( iws.to_i )

DCL::grfrm
DCL::ussttl( 'X-axis', '', 'Y-axis', '' )
DCL::grswnd( xmin, xmax, ymin, ymax )
DCL::grsvpt( 0.2, 0.8, 0.2, 0.8 )
DCL::grstrn( 1 )
DCL::grstrf

DCL::usdaxs
DCL::udcntr( psi )   # カンタン等高線ルーチン

DCL::grcls

カンタンベクトルルーチン

'2d_vctr.rb' は, 前述の定常流について, 流速ベクトルを描画したものです. 描画に関係する部分のみ以下に示します. 流速ベクトルは, x 方向成分を 'u', y 方向を 'v' としてその値を格納しており, それぞれの配列は nmax x mmax 個の 2 次元配列です.

#-------- DCL による描画 ---------#

puts "WORKSTATION ID (I)  ? ;"
DCL::sgpwsn
iws = gets

DCL::gropn( iws.to_i )

DCL::grfrm
DCL::ussttl( 'X-axis', '', 'Y-axis', '' )
DCL::grswnd( xmin, xmax, ymin, ymax )
DCL::grsvpt( 0.2, 0.8, 0.2, 0.8 )
DCL::grstrn( 1 )
DCL::grstrf

DCL::usdaxs
DCL::ugvect( u, v )   # カンタンベクトルルーチン

DCL::grcls

等高線とベクトルの重ね書き

'2d_cntr_vctr.rb' は, 前述の定常流について, 流線関数の等高線と流速ベクトルを重ねて描画したものです. 描画に関係する部分のみ以下に示します. これらの重ね描きもカンタンなルーチンを呼び出すだけで可能となります.

#-------- DCL による描画 ---------#
puts "WORKSTATION ID (I)  ? ;"
DCL::sgpwsn
iws = gets

DCL::gropn( iws.to_i )

DCL::grfrm
DCL::ussttl( 'X-axis', '', 'Y-axis', '' )
DCL::grswnd( xmin, xmax, ymin, ymax )
DCL::grsvpt( 0.2, 0.8, 0.2, 0.8 )
DCL::grstrn( 1 )
DCL::grstrf

DCL::usdaxs
DCL::udcntr( psi )    # 流線関数の等高線
DCL::ugvect( u, v )   # ベクトルの描画

DCL::grcls

ここで注意していただきたのは, このような重ね描きの際, 等高線用の配列要素数とベクトル用の配列要素数は同じ値にしないほうがよいということです.

つまり, 等高線の配列が 100x100 の要素数であったとすれば, ベクトル用の配列はこれより少なくしたほうが, 図として出力した際に見栄えのよいものとなるということです.

本スクリプトは, 等高線用配列の個数として,

nmaxs = 100
mmaxs = 100

ベクトル用配列の個数として,

nmaxs = 20
mmaxs = 20

と指定し, 等高線用の配列と, ベクトル用の配列の個数を分けています.

使用法

以下のコマンドによって実行して下さい.

$ ruby 2d_cntr.rb

2d_cntr.png

$ ruby 2d_vctr.rb

2d_vctr.png

$ ruby 2d_cntr_vctr.rb

2d_cntr_vctr.png

等高線とベクトルの重ね描きの際の注意.

配列要素数が等高線 psi とベクトル u,v で同じとなるようにすると,

2d_cntr_vctr_miss.png

という形になり, 非常に見栄えが悪くなる.

これは, 等高線の描画間隔と同じ間隔でベクトルも描画されてしまうことにより発生する. 上の図では, 等高線の格子点個数が 100x100 あるので, その個数だけベクトルも表示されてしまっている.

更新履歴

  • 2010/03/21 : 始めて書いた ruby-dcl です.
  • 2010/03/30 : これで一応完成です.
更新日時:2010/03/30 12:26:29
キーワード:
参照: