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

[dennou-ruby:002798] Re: GGraph.vector



竹広さん

ggraph への組み込みはOKです。ただし、flow_vect を
編集するのでないほうが良い気がします。

flow_vect に組み込む場合、あとあとのメンテのために
(私があとから何かしたくなったときに、解読しやすいよう)
対応部分は別メソッドに分離して、flow_vect 本体の中には
次のようなのを加わるだけというのが理想です。

  if itr == 5
    u,v = transform_for_itr5(u,v,r,theta)
  end

ただし、これだけでうまく行くかは疑問です。flow_vect内では
flow にするため、U 座標の X,Y 方向のスケールリングが異なる
場合のための調整や、格子間隔にあわせた長さスケーリングも行っ
てます。それを極座標でうまく行くようにするには、結局大きな
範囲で場合分けすることになり、コードの見通しが悪くなるかも
しれません。

flow_vect に組み込むのでなく、むしろ全く独立なメソッドを
作るのが良いだろうと思います。そして、GGraph::vector
で呼んでるところで切り替えます。将来的にはすべての座標変換
をカバーする flow_vect が出て来うるので、今回竹広さんが
入れるものは、オプションで陽に指定しないと使われないように
してください。module GGraph の def vector の最後のほうに、
次のような部分があります。

  if opts['flow_vect']   <--- これはデフォルトでtrueになってる
    ... (flow_vect が呼ばれる)
  else
    ... (ugvectが呼ばれる)
  end

ここを次のように変えてください。

  if opts['rot_for_itr5']  <--- こういうオプションを新設. デフォルトは 
false
    ... 
  elsif opts['flow_vect']   <--- これはデフォルトでtrueになってる
    ... (flow_vect が呼ばれる)
  else
    ... (ugvectが呼ばれる)
  end


> 竹広です. 
> 
> 良く考えたら itr=5 の場合は簡単なんですね,  U 座標成分で表された
> ベクトルの N 座標成分は回転変換だけで求まります. それを ugvect へ渡すだけ.
> 
> よろしければ flow_vect あたりに組み込んでみたいと思いますが
> いかがなものでしょうか. 
> 
> #一般地図座標はさすがに荷が思いし, 自身に必要性がないのでパス. 
> 
> > 竹広さん
> > 
> > お久しぶりです。GGraph の vector は内部で、UGVECT を呼んでます。
> > UGVECT は ITR=1..4 しか対応してないので、GGraph::vector も対応
> > してません。(実質 ITR=1 と同じ ITR=10 でも使えると思いますが。)
> > 
> > もう少し詳しく書くと、GGraph::vector は、デフォルトでは
> > 同じ ggraph.rb に定義してある、DCLExt::flow_vect 経由で UGVECT
> > を呼びます。flow_vect は、U座標のスケーリングをみて、ベクトル場
> > が「流れ」である場合、矢印の方向が正しく U 座標において流れる方向
> > を指すように、ベクトル2成分の比を再スケーリングしてUGVECTに渡します。
> > よって、矢印の行く先を目の子でたどっていくと、ちゃんと流れがわかる
> > ようになってます。多くの場合、ベクトルはそういうふうに表示したいの
> > ではないでしょうか。
> > 
> > DCL のベクトルが、投影座標をサポートしてないのは、
> > 「矢印の向きをどう定義していいかわからないから」と聞いたような
> > 記憶があります。しかし、上のように向きを定義すると、局所的に
> > どういう向きにすればいいかは、地図投影でも一意に決まります。
> > 問題は長さスケーリングをどうすべきかですね。局所的な縮尺にあ
> > わせて伸び縮みさせるか、一律にするかのいずれかでしょうから、
> > 2つ作ればいい気がします。おそらく需要は、一律スケーリングの
> > 方が大ではないかと思いますが。
> > 
> > ということで、誰か本家 DCL にそういうのを作って入れてくれると
> > いいと思います。
> > 
> > # ruby コードで構わないって? 以前から時々欲しいと思うことは
> >    ありますが、当面必要に迫られてないので、私はあてにしない
> >    でください。
> > 
> > さて、GGraph::vector のソースをみると、確かに itr=5 の処理があります
> > ね。ただ、境界条件の処理や、枠の書き方に関するところなので、tone など
> > に入れた処理をそのまま vector にも持ち込んでるだけのように見えます。
> > つまり、「flow_vect が対応してくれれば、その前後の処理はする」
> > という風になっているように見えます。(作ったときのことは覚えてないの
> > で、ひとごとのような書き方ですみません。)
> > 
> > 
> > > 平面極座標においてベクトル図を描きたいのですが, 
> > > GGraph.vector は itr=5 をサポートしているのでしょうか. 
> > > 
> > > 単純に
> > > 
> > >   GGraph.set_fig( 'itr'=>5 )
> > >   GGraph.vector( gpux, gpuy, newframe=true )
> > > 
> > > なんてことをやると外枠は描かれるが矢印が描かれませんでした. 
> > > 
> > > サポートしてないならできるようにするにはどこをどのようにすれば
> > > 良いのでしょうか. ソースをちらっと眺めるに itr?5 なる文字列が
> > > 目につきましたが....
> > 
> > --
> > 堀之内 武  <horinout@xxxxxxxxxxxxxxxxxx>
> > 611-0011 宇治市五ヶ庄  京都大学生存圏研究所

--
堀之内 武  <horinout@xxxxxxxxxxxxxxxxxx>
611-0011 宇治市五ヶ庄  京都大学生存圏研究所