2011-02-14 6 views
2

子午線とパラレルを保存するための適切なモデルについて考えています。子午線と平行線は線として保持する必要があります。子午線と平行線のデータモデル

可能なモデル:

A)「トポロジー」モデル 各点ストアは、南、北と東と西のポイントをポインタ。

class Point 
{ 
    private: 
      double lat; 
      double lon; 
      Point *north; 
      Point *south; 
      Point *east; 
      Point *west; 
      ... 
}; 

class Meridian 
{ 
    private: 
      double longitude; 
      Point *start; 
      Point *end; 
      unsigned int points_total; 
}; 

class Parallel 
{ 
    private: 
      double latitude; 
      Point *start; 
      Point *end; 
      unsigned int points_total; 
}; 

長所:

  • 我々は、南北方向及びその逆に各経線を横断することができます。私たちは、東と西の方向に並行して、そしてその逆に横断することができます。
  • 各点が子午線か平行か(ポインタを使用しているか)を判断します。
  • 小型ストレージ要件...

短所:

  • すべての子午線/パラレルポイントへの唯一のシーケンシャルアクセス
  • コピーコンストラクタや演算子の問題=。ポイントのコピーは、いくつかの段階で行う必要があります:ポイントの新しいインスタンスを作成し、std :: mapを使ってポイント間の位相関係を追加し、子午線/平行の終点を変更します。

第2の欠点は、モデルを放棄するために私をリードしてきました。

B)ポイントのリスト。メリディアン/パラレルストアのポイントのリストは、トポロジカルな関係はありません。

class Point 
{ 
    private: 
      double lat; 
      double lon; 
}; 

class Meridian 
{ 
    private: 
      double longitude; 
      std::vector <Point> points; 
}; 

class Parallel 
{ 
    private: 
      double latitude; 
      std::vector <Point> points; 
}; 

長所:

  • 我々は、南北方向及びその逆に各経線を横断することができます。私たちは、東と西の方向に並行して、そしてその逆に横断することができます。コピーコンストラクタとオペレータとの
  • 問題はありません=
  • すべてのポイントにシーケンシャルおよびダイレクトアクセス。

短所:

  • 我々は、各点が(ポインタを使用して)任意の経線/パラレルに属しているか否かを判断することができません。
  • 大きな記憶域要件。
  • 私たちは子午線/パラレルの/前の次のポイントを見つけることができません任意の時点で、我々はポインタを持っていない...

最後の欠点は、モデルの放棄につながると私をリードできました

私はいくつかの空間的なシミュレーションを実行し、いくつかのcartografic予測で結果を表現しています....位相モデルの修飾された変異体について考えることなので、効率的なデータストレージは、私にとって非常に重要です。

誰かがより良いモデルを提案するかもしれません:-)。あなたの答えをありがとう...

答えて

1

地球の曲面に子午線と平行線を保存している場合、計算幾何学で使われているデータ構造のいくつかを調べて、三次元マニホールド。 quad-edgeまたはwinged-edgeのような構造は、新しいエッジの追加または削除によって簡単に更新できる方法で、特定のエッジ、ポイント、またはセクタに近いエッジ、ポイント、またはセクタを高速に検索できるように特別に設計されています。私はあなたの特定のアプリケーションでこれがどれほど役立つかはわかりませんが、彼らは良い出発点かもしれないと思います。 C++でこれらの構造体をオンラインで実装するのは確かに良いことですが、私の頭の上からはわかりません。