[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dennou-ruby:002798] Re: GGraph.vector
- To: dennou-ruby@xxxxxxxxxxx
- Subject: [dennou-ruby:002798] Re: GGraph.vector
- From: Takeshi Horinouchi <horinout@xxxxxxxxxxxxxxxxxx>
- Date: Tue, 03 Jul 2007 11:55:41 +0900
竹広さん
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 宇治市五ヶ庄 京都大学生存圏研究所