gpt4 book ai didi

c++ - 经线和纬线的数据模型

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:35:34 25 4
gpt4 key购买 nike

我正在考虑一些合适的模型来存储经线和平行线。经线和纬线应保持为直线。

可能的模型:

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 添加点之间的拓扑关系,更改子午线/平行线的端点......它相当慢......

第二个缺点导致我放弃了该模型。

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;
};

优点:

  • 我们可以沿南北方向遍历每条子午线,反之亦然。我们可以沿东西方向遍历每条平行线,反之亦然。
  • 复制构造函数和运算符没有问题=
  • 顺序和直接访问每个点。

缺点:

  • 我们无法确定每个点是否属于任何子午线/平行线(使用指针)。
  • 更大的存储要求。
  • 在任何时候我们都无法找到子午线/平行线的上一个/下一个点,我们没有指针...

最后一个缺点可能会导致模型的放弃,并让我想到拓扑模型的修改变体....

我正在执行一些空间模拟并在多个制图投影中表示结果,因此高效的数据存储对我来说非常重要。

也许有人可以提出一个更好的模型 :-)。感谢您的回答...

最佳答案

如果您要存储地球曲面上的经线和纬线,您可能有兴趣查看计算几何中用于表示封闭二维流形的一些数据结构。类似 quad-edge 的结构或 winged-edge专门设计用于快速查找靠近给定边、点或扇区的边、点或扇区,这种方式可以通过添加或删除新边轻松更新。我不确定这对您的特定应用程序有多大用处,但我认为它们可能是一个很好的起点。当然,这些结构在 C++ 中有很好的在线实现,尽管我不知道有什么不对的。

关于c++ - 经线和纬线的数据模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4992342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com