なんちゃってMathematicaを作る - その16 [なんちゃってMathematica]
ひさしぶりに「なんちゃってMathematica」に戻ることにする。これまでを思い出すと、まず全体の構造を決めた。それは
処理は下レイヤにplottableを渡すことで進める。レイヤは
automatic以外は使う座標系が違っている。automaticレイヤは数値列を受け取っていろいろなオプションや座標を展開してprimitiveレイヤに渡す。このレイヤがやることは複雑で量も多いということになる。また、automaticレイヤはプリミティブも受け取ることができる。プリミティブはそのままprimitiveレイヤに渡されるだけでいい(はずである)。
その他のレイヤについてはまたあとで考える。
また、陽にAABBをユーザが指定することで、ユーザの関心領域(ROI - Region Of Interest)の設定にも使うことにする。
ただし、normalized座標のAABBは座標軸やプロットラベルなどは含まない。ユーザが渡したplottableのみを対象にする。また、線の幅や点にうつ星印などの大きさもAABBには含まない。従ってplottableの中には[0,1]区間を超えるような座標値を持つものも存在する。
normalized座標はなくてもかまわない(plot座標から直接view座標を生成する)けど、あったほうが簡単になりそう、というのが前回の考察の結果だった。今回も一応含めることにする。
view座標系は、実際に描画するQuartz座標と同じである。
この機能は前回考えていたときの、目玉の機能の一つだった。これができれば例えば
逆に、座標系の混在をサポートしないとユーザの面倒が増える(文字のサイズをプロット領域の大きさに対する比で指定するなど)、ということになる。
ざっくりまとめると図-2のような感じ。 それぞれのレイヤは対応する座標系があるけど、自分より下のレイヤに対応する座標系を含んでいてもよいとする。
- ユーザインターフェイスはMathematicaのFront Endに似せる
- 数値計算エンジンはgslを使う
- 代数演算(式の変形)はやらない
- インタプリタはlex/yaccを使って自作する
- 2D/3Dプロットも自作する
4 内部設計
4.1 レイヤ構造
plotContainerにはレイヤ構造を持たせる。処理は下レイヤにplottableを渡すことで進める。レイヤは
- automatic
- primitive
- normalized
- view
automatic以外は使う座標系が違っている。automaticレイヤは数値列を受け取っていろいろなオプションや座標を展開してprimitiveレイヤに渡す。このレイヤがやることは複雑で量も多いということになる。また、automaticレイヤはプリミティブも受け取ることができる。プリミティブはそのままprimitiveレイヤに渡されるだけでいい(はずである)。
その他のレイヤについてはまたあとで考える。
4.2 座標系
座標系は3種類ある。- plot座標
- normalized座標
- view座標
また、陽にAABBをユーザが指定することで、ユーザの関心領域(ROI - Region Of Interest)の設定にも使うことにする。
ただし、normalized座標のAABBは座標軸やプロットラベルなどは含まない。ユーザが渡したplottableのみを対象にする。また、線の幅や点にうつ星印などの大きさもAABBには含まない。従ってplottableの中には[0,1]区間を超えるような座標値を持つものも存在する。
normalized座標はなくてもかまわない(plot座標から直接view座標を生成する)けど、あったほうが簡単になりそう、というのが前回の考察の結果だった。今回も一応含めることにする。
view座標系は、実際に描画するQuartz座標と同じである。
4.2.1 座標系の混在
ひとつのplottableのなかに異なる座標系の値が含まれることを許すことにする。この機能は前回考えていたときの、目玉の機能の一つだった。これができれば例えば
- 表示される文字の大きさをview座標(ポイントサイズ)で表して、表示位置をplot座標で指定して、折れ線の近くに文字を配置するなどができるようにする
- 座標軸の刻み(tick)は、表示位置はplot座標で、tickの長さはnormalized座標やview座標で指定する
逆に、座標系の混在をサポートしないとユーザの面倒が増える(文字のサイズをプロット領域の大きさに対する比で指定するなど)、ということになる。
ざっくりまとめると図-2のような感じ。 それぞれのレイヤは対応する座標系があるけど、自分より下のレイヤに対応する座標系を含んでいてもよいとする。
2012-02-03 22:01
nice!(0)
コメント(0)
トラックバック(0)
コメント 0