如何在计算机内存中表示球面?



正如标题所示,我的问题在于计算机内存中球体表面的一些表示。为简单起见,假设我们正在制作一款棋盘位于球体上的国际象棋游戏。如果这是一个经典的平板,那么解决方案很简单:使用一个2D的桌子。

但是我不知道我应该为一个球体选择什么样的记忆结构。也就是说,我想从这个表示中得到的是:

  • 如果我固执地朝一个方向移动一个兵,那么我应该回到我开始的地方,
  • 在这样的"旅程"中我应该在球体的另一边直接穿过一个点(我的意思是避免一个常见的"错误")。在2D游戏中,移动通过一个棋盘的边缘会将物体移动到另一个边缘,从而使棋盘成为一个环面,而不是一个真正的球体)
  • 一个电路板单元的面积应该近似等于任何其他单元
  • 一个单元应该有一个关联的经纬度坐标(我写了"associated"因为我想从这个表示中得到一些方法从一个单元格的位置得到这些坐标,而不是eg。(索引长度较长的表)

没有简单的几何解。问题的关键是,假设你在赤道处有n列,你现在在靠近北方的投票站,并且向北走。然后,方向和最上面一行的列号(以及最上面一行的第二列)的组合必须能够唯一地确定路径将穿过赤道上n个位置中的哪一个。因此,除非在顶部(或倒数第二)行中有n列,否则方向不能是整数。请注意,如果多边形有三个以上的边,那么它们必须有共同的边(三角形由于其他原因不能工作)。所以现在你有一个网格,但如果你有超过三行(即一个立方体,或其他规则的棱镜),那么横向移动第二行将无法导航到南半球。

最好的方法可能是创建一个正多面体,并将点和方向保持为浮点向量/点,并在移动时计算实际位置,并找出您降落在哪个多边形(注意,使用此方法您可能有可能移动到非相邻多边形,如果您正好降落在边缘/顶点等)。

最新更新