Mac用プロットライブラリ-5 [考え中 - プロットライブラリ]
めちゃ久しぶりにプロットライブラリの設計の続き。
じじいはゆっくりやりまひょ。
前回にPrimitiveをどうするか、を考えた。その続きのもうちょっと便利なデータ形式を考える。
その他の専用データ形式
2次元や3次元の一点のデータだけもそのarrayやさらにarrayのarrayを使用すれば高次のデータを表現できるが、それでは不便な場合があるので他のデータ形式も用意する。
elevation map
3次元にはその他にelevation mapというデータ構造を用意する。これは2次元平面上のメッシュの上の高さで、
@interface CPElevationMap : NSObjectMeshDimensionはマップ全体のx-y平面内の大きさでMeshSizeは縦と横のポイント数である。heightsは縦×横の大きさの配列である。曲線のデータにNSArrayを使ったのでもうちょっとスマートな形式にした方がいいかも。 これはユーザから受け取ったらすぐ3次元primitiveの集合に展開してしまう。またCPContourPlotとCPDensityPlotにelevation mapを渡すとすぐ2次元primitiveに展開される。{ MeshDimension meshDimension; MeshSize meshSize; double *heights; } ... @end
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に分解してしまうことにする。 う〜ん、他には?
2008-01-21 21:55
nice!(0)
コメント(0)
トラックバック(1)
コメント 0