[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:002060] Re: GGraph and gpview



竹広さん

(1)をやったついでに (2),(3)もやってコミットしちゃいました。
((4)のテスト埋め込みはペンディング。今後の課題です。コミットし
たのが私なので、私への課題というつもりです。竹広さんは解放しま
す。)

> > (1) やはり unless opts['itr']==5 then ... のように相似変換と
> >     itr==5 を同一視するコーディングは変えた方がいいと思います。
> 
> そうなってましたか. そりゃまずいですね. 変えましょう. 

先ほどお送りした分を取り込みました。

> > (2) 相似変換のときは  polar_coordinate_boundaries を呼ぶという
> >     ふうにしてますが、itr=5 以外にも通用するのでしょうか。もし
> >     itr=5 限定でしたら、そのように限るべきです。そして出来れば
> >     itr=6 用のも欲しいところです。双曲線座標なので書くとして
> >     も恐らく viewport の枠ぐらいでしょうから簡単でしょう。
> >     (メソッド map 内に viewport の枠を書く例があります。)
> 
> 今のところ itr=5 限定ですね. 

similar なら polar_coordinate_boundaries を呼ぶのでなく、変換番
号が 5 なら呼ぶという風に変えました。つまり DCL.sgqtrn==5
の判断です。
  
> > (3) topology / modulo という属性の解釈は GGraph ではやりたく
> >     ないです(GGraph は GPhys クラスとは一応独立なので、出来るだけ 
> >     GPhys オブジェクトの詳細に依存させたくないです)。 今の場合、
> >     投影する座標系そのものが cyclic ということで、ここは単純に
> >     GPhys#cyclic_ext を呼ぶだけにしてください。座標系の角
> >     度の単位は度かradが仮定されてないでしょうか? となるとmoduloは
> >     自ずと決まりますね。 ちなみに、将来課題として gtool4 コンベン
> >     ションのちゃんとしたサポートをしたいと思ってます。その折りには、
> >     GPhys#cyclic_ext 内で modulo を自動取得できるようにしたいです。
> >     (その際、別のコンベンションでは topology & modulo の指定の
> >     仕方が異なるということを許容できるようにしたいです。)

これは上記のようにし、さらに polar_coordinate_boundaries の第3
引数を外して自動判定にしました。こうするメリットは、経度を限って
表示した場合にも対応できるということです。以下のようなテストを加
えました(添付)。

  # 赤道面断面 2
  GGraph.tone( gp.cut('lon'=>0..180), true, {'transpose'=>true} )
  GGraph.contour( gp.cut('lon'=>0..180), false, {'transpose'=>true} )

堀之内
#
# Test program for GGraph, implemented rectangular curvelinear coordinate. 
# (2004/01/25 S. Takehiro)
#
#  Drawing initial temperature field for dynamo benchmark test. 
#
#require "numru/ggraph"                                                      
require "./ggraph"
include NumRu

gphys = GPhys::NetCDF_IO.open('case1_initial.nc', 'temp')


# 子午面断面
gp = gphys.cut('lon'=>0.0,'t'=>0.0 )
DCL.gropn(1)
GGraph.set_fig('itr'=>5 )
GGraph.tone( gp, true, {'transpose'=>true} )
GGraph.contour( gp, false, {'transpose'=>true} )

# 子午面断面 2
if defined?(DCL::DCLVERSION) && DCL::DCLVERSION >= '5.3'
  gp = gphys.cut('lon'=>0.0,'t'=>0.0 )
  GGraph.set_fig('itr'=>5)
  GGraph.next_fig('window'=>[-0.7,1.7,-1.2,1.2])
  GGraph.tone( gp, true, {'transpose'=>true} )
  GGraph.contour( gp, false, {'transpose'=>true} )
end

# 赤道面断面
gp = gphys.cut('lat'=>0.0,'t'=>0.0 )
GGraph.set_fig('itr'=>5 )
GGraph.tone( gp, true, {'transpose'=>true} )
GGraph.contour( gp, false, {'transpose'=>true} )

# 赤道面断面 2
GGraph.tone( gp.cut('lon'=>0..180), true, {'transpose'=>true} )
GGraph.contour( gp.cut('lon'=>0..180), false, {'transpose'=>true} )

# 赤道面断面(ちょっと大きめ)
GGraph.set_fig('itr'=>5 )
GGraph.set_fig('similar'=>[0.25,-0.1,0.05] )
GGraph.tone( gp, true, {'transpose'=>true} )
GGraph.contour( gp, false, {'transpose'=>true} )

# 正射投影
gp = gphys.cut('rad'=>1.0,'t'=>0.0 )
GGraph.set_fig('itr'=>30 )
GGraph.set_fig('map_axis'=>[0,30,20] )
GGraph.tone( gp, true )
GGraph.contour( gp, false )

DCL.grcls