Mac用プロットライブラリ-7 [考え中 - プロットライブラリ]
これまでのプロットライブラリのおおまかなAPIを実現するための実装の方針を考えておく。ちょっと詰めてみて実装上無理があるようならAPIの方針も変更しよう。
Frameworkの内部構造
2次元の場合
MacOSXでは描画はNSViewのサブクラスで行われる。これは座標値がfloatのNSPointという2次元で指定され、単位はpointになっている。だからframework内部では2次元プロットは
- 受け取ったデータをprimitiveに分解
- 座標軸などの描画に必要なoptionを展開
- 描画領域を決定してスケーリングを行う
- NSViewに描画する
と言う手順となるなず。前回も考えたけどスケーリングの時点でdoubleからfloatへの変換を行う必要がある。
同じように3次元プロットでは
- 3次元データを3次元primitiveに分解
- 座標軸などの描画に必要なoptionを展開
- viewport指定に従って射影変換し2次元primitiveに変換
- 以下は2次元primitveとして描画
ということにしよう。
普通はこれを実現するために内部はレイヤ構造、パイプライン構造にするのがわかりやすい。どちらもプロットを何段階かに分けて実現すると言う意味では同じである。一つの段階をレイヤ構造ではレイヤ、パイプライン構造ではステージと呼ぶ。この二つの言葉を普通、どう使い分けてるのかな?実装の一部がハードの上に乗っているような場合(OpenGLとか)はパイプラインと言って、ソフトだけの場合はレイヤと言っているような気もする。パイプラインは処理の中間結果を残さなくて、レイヤでは残るような感じもある。まあ、どうでもええわ、名前なんか。でも名前は決めておかないといけない。プログラミングとは名前を付けることであると言った偉い人がいたけど、その通りだと思う。
これ以降レイヤ(Layer)という言葉を使うことにする。
レイヤはまず2次元では
Automatic layer | 最上位のプロットAPI | |
Primitive layer | plot objectがすべてprimitiveに展開されたもののみを持つ | |
Normalized layer | 描画領域を一旦{{0,1},{0,1}}の正方形の中におさめる | |
View layer | 実際の描画を行う |
- Plot座標系
- Normalized座標系
- View座標系
Plot座標 | APIに使われるdouble幅の座標で、ユーザが使う座標系 | |
Normalized座標 | float幅の(0,1)の間にnormalizeされた値を持つ座標 | |
View座標 | 描画領域に対応したNSPointで指定する座標 |
2008-02-04 21:44
nice!(0)
コメント(0)
トラックバック(0)
コメント 0