子午線と緯線を保存するのに適したモデルを考えています。子午線と緯線は線として保持する必要があります。
可能なモデル:
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) ポイントのリスト。Meridian/parallel はポイントのリストを保存します。トポロジー関係はありません。
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;
};
長所:
- 各子午線を南北方向に横断でき、その逆も可能です。各緯線を東西方向に横断でき、その逆も可能です。
- コピー コンストラクターと演算子 = に問題はありません
- すべてのポイントへの順次および直接アクセス。
短所:
- 各ポイントが子午線/緯線に属しているかどうか (ポインターを使用) を判断することはできません。
- より大きなストレージ要件。
- どの時点でも、子午線/平行線の前/次のポイントを見つけることができません。ポインターがありません...
最後の欠点は、モデルの放棄につながる可能性があり、位相モデルの修正版について考えるようになります....
私はいくつかの空間シミュレーションを実行し、結果をいくつかの地図投影法で表現しているため、効率的なデータ ストレージは私にとって非常に重要です。
誰かがより良いモデルを提案できるかもしれません:-)。ご回答ありがとうございます...