Mac用プロットライブラリ-6 [考え中 - プロットライブラリ]
プロットライブラリ設計の続き。
APIをどうするか、は、まあこのへんにしてあとからもうちょっと突っ込んで修正することに。
実装の方針を考えることに移ろう。その前に座標系をどうするか考えておく。
座標系
ユーザから見えるAPIはdoubleの数値の組みを座標として扱う。表示の際はデフォルトでは全体が表示領域いっぱいになるようにスケーリングする。普通のプロットライブラリはそうなっているはず。だから絶対値は描画には反映しない。
2次元はデフォルトではxは右にy上に正となるように座標軸が取られる。
3次元では左手系で、デフォルトではxは右にyは奥にzは上に正となるように取ることにする。これも普通のプロットライブラリにあわせる。OpenGLの座標の取り方(奥行きがz)と違ってしまうけどそれはしょうがないよね。
折れ線などのPlot Objectは上述の座標系で描かれるが、それと同じでは不便な場合がある。例えばText Objectのフォントサイズや座標軸のtickの長さなどである。Plotデータ以外にも描画されるべきObjectが存在してそれらの大きさも指定できる必要がある。例えば
- 座標軸
- 座標軸のラベル
- Plotのラベル
- 凡例
- 背景
なんかがある。
これらは実際に描画されたときに読める大きさでなければならないから、たとえばフォントサイズの指定に、銀河の分布をPlotするときはkpc(キロパーセク)で、水素の電子密度をPlotするときはÅ(オングストローム)で指定するのは煩わしい。これはView座標による指定でプロット範囲の大きさによらずいつも同じ大きさの文字が書かれるようにしなければいけない。こういうのは普通のプロットライブラリでは座標とは別途指定できるようになっている。
でもせっかくだからこれは混在してもいいことにしよう。つまり、線の始点をプロット座標で、終点をView座標で、というのも許す。こうしておけばプロット上のマーカのサイズ指定を別の階層で指定するような煩雑なインターフェイスにする必要は無くなる。実装は面倒になるけど。
ということは座標値は少なくとも2種類あることになる。
- プロット座標系
- View座標系
最終的な描画は全部View座標系に変換されないと描けない訳だから、当然プロット座標からView座標に変換する、と言う機能がFrameworkには必要になる。ということはこの中間の座標系(規格化座標系)もきっと挟んだ方が簡単になるよな、普通。このことはもうちょっと後で考えることにする。
とりあえず今日はここまで。
コメント 0