SSブログ

Mac用プロットライブラリ-5 [考え中 - プロットライブラリ]

めちゃ久しぶりにプロットライブラリの設計の続き。
じじいはゆっくりやりまひょ。

前回にPrimitiveをどうするか、を考えた。その続きのもうちょっと便利なデータ形式を考える。

その他の専用データ形式


2次元や3次元の一点のデータだけもそのarrayやさらにarrayのarrayを使用すれば高次のデータを表現できるが、それでは不便な場合があるので他のデータ形式も用意する。

elevation map


3次元にはその他にelevation mapというデータ構造を用意する。これは2次元平面上のメッシュの上の高さで、

@interface CPElevationMap : NSObject {
    MeshDimension    meshDimension;
    MeshSize         meshSize;
    double         *heights;
}
...
@end
MeshDimensionはマップ全体のx-y平面内の大きさでMeshSizeは縦と横のポイント数である。heightsは縦×横の大きさの配列である。曲線のデータにNSArrayを使ったのでもうちょっとスマートな形式にした方がいいかも。 これはユーザから受け取ったらすぐ3次元primitiveの集合に展開してしまう。またCPContourPlotとCPDensityPlotにelevation mapを渡すとすぐ2次元primitiveに展開される。

Surface

任意の3次元Polygonは扱いが難しく実装が大変になるのでOpenGLに使われるstripも用意する。Polygonも有効にはするが頂点が同一平面上の凸多角形だけに制限する。stripは頂点が必ずしも同一平面上にない多角形を三角形の集合として定義する事に対するsyntax sugarである。
@interface CPStripSurface {
    NSArray    *stripPoints;
    NSDictionary    *options;
}
...
@end
@interface CPFanSurface {
    NSArray    *stripPoints;
    NSDictionary    *options;
}
...
@end
それぞれ図-1を参照のこと。CPStripSurfaceはopenGLのGL_TRIANGLE_STRIP(あるいはGL_QUAD_STRIP)と、CPFanSurfaceはGL_TRIANGLE_FANの定義と同様である。どちらも自己交差は許さない(自己交差がある場合、エラーにするか?放ったらかしてでたらめな表示になったままにするか)。これらもすぐ三角形primitveに分解してしまうことにする。 う〜ん、他には?
nice!(0)  コメント(0)  トラックバック(1) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 1

献立01/21献立01/22 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。