用六角形地图瓷砖覆盖地球

时间:2009-04-14 20:34:55

标签: math coordinates tesselation hexagonal-tiles

许多策略游戏都使用六边形拼贴。其中一个主要优点是任何瓷砖的中心与其所有相邻瓷砖之间的距离是相同的。

我想知道是否有人对将六角形瓷砖系统与传统地理系统(经度/纬度)结合起来有任何想法。我认为用六边形瓷砖覆盖地球并将地理坐标映射到瓷砖会很有趣。

之前有没有人看到任何与此相近的东西?

更新

我正在寻找一种细分球体表面的方法,以便每个分区具有相同的表面积。理想情况下,相邻子分区的中心将是等距的。

14 个答案:

答案 0 :(得分:29)

看看vraid/earthgen;它使用六边形(加上几个五边形)并包含源代码(参见planet/grid/create_grid.cpp)。

自2018年起,new version is available基于球拍。

vraid/earthgen image

答案 1 :(得分:21)

嗯,很多人都指出你不能用六边形瓷砖拼平球体 - 也许你想知道为什么。

Euler表示(并且有很多有趣且不同的证明,甚至是整本书)给出了x多边形中的球体图块,其中y边缘总数和z顶点总数(例如,立方体有6个多边形, 12个边和8个顶点)公式

  

x - y + z = 2

始终保持(记住减号)。

(顺便说一句:这是一个拓扑语句,所以立方体和球体 - 或者,确切地说,只是它们的边界 - 在这里真的是相同的)

如果您只想使用六边形来平铺球体,最后会得到x六边形,边长为6 * x。但是,每对六边形共享一条边。所以,我们只想计算它们的3 * x和6 * x顶点,但同样,它们每个都由3个六边形共享,所以最终得到2 * x边。

现在,使用公式:

  

x - 3 * x + 2 * x = 2

你最终得到了错误的陈述0 = 2 - 所以你真的不能只使用六边形。

这就是为什么古典足球看起来如此 - 当然现代足球更加花哨但基本的事实仍然存在。

答案 2 :(得分:18)

用常规瓷砖覆盖球体是不可能的(除了长而薄的“橙色切片”。因此,在给定某些约束或要求的情况下,对地图进行像素化的最佳方法实际上是一个相当困难的研究问题。

经常使用的一种平铺(在天体物理学中)是HEALPIX像素化:http://healpix.sourceforge.net/

该像素化满足等面积要求;然而,不可能使一切都等距离。

另一个像素化是“GLESP”,它有一些不同的属性(并不像一个软件包那么精致):http://www.glesp.nbi.dk/

答案 3 :(得分:16)

第一个想到的网站是Amit's Game Programming Information及其六边形网格链接集。

答案 4 :(得分:11)

你不能覆盖具有相同六边形的球体,但你可以用一个测地线覆盖它,主要是六边形,在二十面体的顶点有12个五边形,六边形稍微扭曲,使其凸出成一个球体

答案 5 :(得分:11)

阅读Kevin Sahr,Denis White和A. Jon Kimerling的“Geodesic Discrete Global Grid Systems”

你可以找到它here ...

答案 6 :(得分:9)

六角形瓷砖对于应用于地理空间用途的常规几何图形而言过于复杂。 查看HTM以获取类似于三角形的内容,或使用google查看其他来源的“Hierarchical Triangular Mesh”。

答案 7 :(得分:4)

将球体划分为由平坦表面制成的相等部分是一个棘手的问题。因此,最终会得到Geodesic shapes,其中不是由可以由相同大小的三角形组成的形状组成。将所有六边形和五边形分解成三角形,最终会得到具有不同内角的三角形,从而导致对称性的丧失。

我能给你的一个安慰是,所有的形状都会有有限数量的三角形可以被分类,这意味着对于一个小的测地线,可以重复使用5或6个三角形来描述所有六边形和五边形所需的测地线。虽然距离与每个三角形/形状的“中心”不相等,但您至少可以将每个三角形的处理划分为一个离散的情况,从而为代码中的潜在解决方案提供支持。

答案 8 :(得分:4)

老旅行者角色扮演游戏用于将行星表面映射为二十面体(在书中打开以便打印)。这会在角落的六角形产生很大的扭曲(它们必须变成五边形)。搜索GURPS Traveler时,您可能会找到一些此类材料。

答案 9 :(得分:3)

只有少数柏拉图式多面体使用单一类型的多边形来近似球体。很有用ICOSAHEDRONDODECAHEDRON。如果你愿意有一些失真和一些重叠点,你可以获得公平的结果,让游戏变得有趣。试试THIS LINK,它可以为所有瓷砖设置几乎相等的面积,并为全球各地的圆圈提供相当一致的瓷砖距离。

然而,这些都不容易映射到良好的旧的地理圆柱经度/纬度投影系统。

一种解决方案是在EQUIRECTANGULAR投影贴图上超级施加蜂窝图案,并在接近极点LIKE THIS时允许TONS失真。

祝你的研究顺利! :)

答案 10 :(得分:1)

HEAlpix是正确的,如果你的约束是在将球体分成碎片时保持相等的面积(有趣的是在天空中覆盖天空中的投影区域以及在赤道区域中相同)。您基本上按照环形或嵌套方案将球体分成4个,以满足“层次等面积”约束。部署'也非常方便。天空的FT功能((iso-latitude属性),例如研究普朗克或WMAP任务中CMB模式的温度。

它也以许多编程语言实现。

此外,我应该提到另一个(不是相同的区域),称为Q3C用于“四叉树立方体”,另一个天空分区方案具有其他优点(锥形搜索和x匹配)

原始论文:

http:// adsabs.harvard.edu/abs/2006ASPC..351..735K

答案 11 :(得分:1)

我刚刚建立了一个名为dggridR的R包,它将地球表面划分为大小相等的六边形,以便进行分箱空间分析。

Carsten在他的回答中说这个声音是不可能的,但实际上,它并非如此。通过引入12个五边形,所有其余的六边形都可以毫无问题地组合在一起。由于高分辨率网格可能有数百万个单元格,因此大多数时候都可以忘记这些五边形。

转型的数学很复杂。你可以在以下网址找到它们:

  • Crider,John E.“Fuller's Map Projection and Inverse的精确方程式。”Cartographica:国际地理信息和地理可视化期刊43.1(2008):67-72。网络

  • Snyder,John P.“多面体地球的等面积地图投影。”Cartographica:国际地理信息和地理可视化期刊29.1(1992):10-21。网络

在后台,dggridR依赖于Kevin Sahr的DGGRID软件。

您还可以找到以下有用的参考资料:

  • Gregory,Matthew J.等。 “离散全球网格系统的小区间度量比较。”计算机,环境和城市系统32.3(2008):188-203。交叉引用。幅。
  • Kimerling,Jon A.等。 “比较全球网格的几何特性。”制图学与地理信息科学26.4(1999):271-288。打印。
  • Sahr,K。“用于地理空间计算的六角形离散全球GRID系统。”Archiwum Fotogrametrii,Kartografii i Teledetekcji Vol。 22(2011):363-376。打印。
  • Sahr,凯文。 “Icosahedral Aperture 3 Hexagon离散全球网格上的位置编码。”计算机,环境与城市系统32.3(2008):174-187。交叉引用。幅。
  • Sahr,Kevin,Denis White和A. Jon Kimerling。 “Geodesic Discrete Global Grid Systems。”Cartography and Geographic Information Science 30.2(2003):121-134。打印。

答案 12 :(得分:0)

老问题,但是:

其他答案是正确的,因为不可能仅使用六边形来平铺球体。

然而,一个简单的(ish)hack是:

创建一张2d"表"六边形:

enter image description here

并将它们在原点的3D空间中偏移1.然后,对所有顶点进行标准化。

这会给你一个鼓胀的"具有漂亮球形曲线的纸张版本。问题是,只有当工作表覆盖球体的部分时,这才有效。

一种解决方案类似于用于创建无限网格底板的解决方案。当球体旋转时,当您移动半个单元格时,将球体沿相关方向旋转一次。 (对于六边形的情况,数字实际上不是半个单元格,而是与六角形图块的尺寸相关联。)这在3D中有点棘手,但是可行。

我在2D中有一个类似的问题可能会有所帮助。

https://gamedev.stackexchange.com/questions/70092/infinite-treadmilling-hexagonal-grid/70341#70341

答案 13 :(得分:0)

有一个paper处理等面积平铺(赤道周围几乎是正方形的平铺)的情况,并且相对容易地预先计算相邻的平铺,并且一组特定的坐标落在该平铺上。但是,顶点之间的距离必须相等。

在此处复制摘要:

提出了一种将球形表面划分成等面积单元格的新方法。该方法基于将一个球体划分为几个近乎恒定跨度的纬度带,并将每个带进一步划分为相等面积的单元格。它的结构简单,并且与其他等边球面等面积细分方法相比,在纬度带之间提供了更均匀的纬度步进。

(我用它的想法尝试从一长串位置中找到最接近的地理位置邻居)。