子午線と緯線を格納するための次のデータ構造があります。
各地図ポイントには、次のものが格納されます。
A] 地理的および空間座標、地図作成の歪みなど。
B] 北/南/東/西ノードへのポインター。
ポイント間の関係、まず子午線/平行線への所属を保存できます...
class Node2DCart
{
protected:
//Coordinates of the point
double lat;
double lon;
double lattrans;
double lontrans;
double x;
double y;
.....
//Pointers to adjacent points in geographic network
Node2DCart *left;
Node2DCart *right;
Node2DCart *top;
Node2DCart *bottom;
.....
};
子午線のデータ構造には、子午線の経度、子午線の始点と終点、点数が格納されます。
class Meridian
{
private:
unsigned int points_count;
double longitude;
Node2DCart *start;
Node2DCart *end;
....
};
すべてのポイントはノード リストに格納されます。
typedef std::vector<Node2DCart*> TNodes2DCartList;
class Node2DCartList
{
protected:
TNodes2DCartList nodes;
...
};
しかし、Node2DList のコピー コンストラクターの作成には大きな問題があります。Meridian/Parallel と Node2Dlist の間には循環的な依存関係があります。
コピー コンストラクターはstd::map
古いポイントとリンクを使用して新しいものに置き換えますが、これは実装上の問題ではありません...ただし、クラス Meridian ポイントから古い Node2DList のポイントへのポインターの開始/終了... Node2DList コピー コンストラクターは、古いポイントを指すすべての子午線を通知する必要がありますNode2DList ポイントを変更し、すべてのポインタを新しい Node2DList ポイントに変更します。このモデルはそれを許可しません。
考えられる解決策は、子午線と平行点を指す 2 つのポインターを追加することです。
class Node2DCart
{
protected:
//Coordinates of the point
double lat;
double lon;
double lattrans;
double lontrans;
double x;
double y;
.....
//Pointers to adjacent points in geographic network
Node2DCart *left;
Node2DCart *right;
Node2DCart *top;
Node2DCart *bottom;
.....
Meridian *m;
Parallel *p;
};
残念ながら、この提案されたモデルは良くありません。2 つのクラス間の循環参照がまだあります...誰かがそれを改善するのを手伝ってくれますか? ありがとう...