许多策略游戏使用六边形图块。主要优点之一是任何瓦片的中心与其所有相邻瓦片的距离相同。
我想知道是否有人对将六边形瓷砖系统与传统地理系统(经度/纬度)结合起来有任何想法。我认为用六边形瓷砖覆盖地球并能够将地理坐标映射到瓷砖会很有趣。
以前有没有人看到过任何接近这个的东西?
更新
我正在寻找一种方法来细分球体的表面,以便每个部分都具有相同的表面积。理想情况下,相邻细分的中心是等距的。
许多策略游戏使用六边形图块。主要优点之一是任何瓦片的中心与其所有相邻瓦片的距离相同。
我想知道是否有人对将六边形瓷砖系统与传统地理系统(经度/纬度)结合起来有任何想法。我认为用六边形瓷砖覆盖地球并能够将地理坐标映射到瓷砖会很有趣。
以前有没有人看到过任何接近这个的东西?
更新
我正在寻找一种方法来细分球体的表面,以便每个部分都具有相同的表面积。理想情况下,相邻细分的中心是等距的。
看看vraid/earthgen;它使用六边形(加上一些五边形)并包含源代码(请参阅planet/grid/create_grid.cpp)。
截至 2018 年,基于球拍的新版本可用。
好吧,很多人都指出你不能用六边形瓷砖来平铺球体——也许你想知道为什么。
欧拉说(并且有很多有趣和不同的证明,甚至是一整本书),给定一个球体在 x Polygons 中,总共 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
- 所以你真的不能只使用六边形。
这就是为什么经典足球看起来如此 - 当然现代足球更花哨,但基本事实仍然存在。
用规则的瓷砖覆盖球体是不可能的(除了长而薄的“橙色切片”。因此,在给定某些约束或要求的情况下,像素化地图的最佳方法实际上是一个非常困难的研究问题。
一种经常使用的平铺(在天体物理学中)是 HEALPIX 像素化:http: //healpix.sourceforge.net/
这种像素化满足等面积要求;然而,不可能使一切都等距。
另一个像素化是“GLESP”,它具有一些不同的属性(并且没有像软件包那样完善):http ://www.glesp.nbi.dk/
想到的第一个网站是Amit 的游戏编程信息及其六边形网格上的链接集合。
你不能用相等的六边形覆盖球体,但你可以用测地线覆盖它,它主要是六边形,在二十面体的顶点有 12 个五边形,六边形稍微扭曲以使其凸出成一个球体。
六边形瓷砖对于应用于地理空间用途的规则几何来说太复杂了。使用三角形查看HTM以获取类似的东西,或者查看其他来源的“分层三角形网格”的谷歌。
阅读 Kevin Sahr、Denis White 和 A. Jon Kimerling 的“测地线离散全球网格系统”
你可以在这里找到它...
我刚刚构建了一个名为dggridR的 R 包,它将地球表面划分为大小相等的六边形,用于分箱空间分析。
Carsten 在他的回答中使这听起来不可能,但实际上并非如此。通过引入 12 个五边形,所有其余的六边形都可以毫无问题地组合在一起。由于您可能有数以百万计的单元格用于高分辨率网格,因此大多数时候您可以忘记那些五边形。
转换的数学很复杂。你可以在...里找到它们:
Crider, John E. “Fuller's Map Projection and Inverse 的精确方程。” 制图:国际地理信息和地理可视化杂志 43.1 (2008):67–72。网络。
Snyder, John P. “多面体地球的等面积地图投影”。制图:国际地理信息和地理可视化杂志 29.1 (1992):10-21。网络。
在后台 dggridR 依赖于 Kevin Sahr 的DGGRID软件。
您可能还会发现以下参考资料很有用:
将球体分成由平坦表面制成的相等部分是一个棘手的问题。因此,您最终会得到测地线形状,它们不是由可以反过来由相同大小的三角形组成的形状组成的。将所有六边形和五边形分解成三角形,最终得到的三角形具有不同的内角,从而导致对称性丧失。
我能给你的一个安慰是,所有的形状都有有限数量的三角形可以分类,这意味着对于一个小测地线,可以重复使用 5 或 6 个三角形来描述所有的六边形和五边形测地线所需的。虽然距离每个三角形/形状的“中心”不相等,但您至少可以将每个三角形的处理划分为一个离散的情况,从而在代码中提供潜在的解决方法。
旧的旅行者角色扮演游戏用于将行星表面绘制为二十面体(切开打印在书中)。这在角六角形处产生了很大的变形(它们必须变成五边形)。在搜索 GURPS Traveller 时,您可能会找到一些此类材料。
只有少数柏拉图多面体使用单一类型的多边形来近似球体。著名的二十面体和十二面体。如果你愿意有一点失真和一些重叠点,你可以获得公平的结果,让游戏变得有趣。试试THIS LINK,它设法使所有图块的面积几乎相等,而全球圆的图块距离也相当一致。
然而,这些都不是很容易映射到古老的地理圆柱经度/纬度投影系统上。
一种解决方案是将蜂窝图案叠加到EQUIRECTANGULAR投影图上,并在您接近像这样的两极时允许大量失真。
祝你的研究好运!:)
如果您的约束是在将球体分成几块时保持相等的面积,那么HEAlpix是正确的(有趣的是,在两极和赤道地区覆盖天空中的投影区域相同)。您基本上每次都按照环形或嵌套方案将球体分成 4 份来满足分层等面积约束。在天空中“部署” FT 函数((等纬度属性)也非常方便,例如研究普朗克或 WMAP 任务中 CMB 模式的温度。
它也在许多编程语言中实现。
此外,我应该提到另一个(虽然面积不相等),称为“四树立方体”的 Q3C,另一种具有其他优势(锥搜索和 x 匹配)的天空分区方案
原纸:
http://adsabs.harvard.edu/abs/2006ASPC..351..735K
老问题,但是:
其他回答是正确的,因为不可能仅使用六边形来平铺球体。
然而,一个简单的(ish)黑客是:
创建六边形的二维“表”:
并将它们在 3D 空间中从原点偏移 1。然后,对所有顶点进行归一化。
这将为您提供具有良好球面曲线的“凸出”版本的板材。问题在于,这仅在纸张覆盖球体的一部分时才有效。
一种解决方案类似于用于创建无限网格地板的解决方案。随着球体旋转,当您移动半个单元格时,将球体沿相关方向旋转一次单元格。(对于六边形,数字并不是真正的半个单元格,而是与六边形图块的尺寸相关联。)这在 3D 中有点棘手,但可行。
不久前我在 2D 中有一个类似的问题,这可能会有所帮助。
https://gamedev.stackexchange.com/questions/70092/infinite-treadmilling-hexagonal-grid/70341#70341
有一篇论文处理了等面积平铺的情况(赤道周围几乎是方形的平铺),并且相对容易预先计算相邻的平铺以及一组特定坐标落在哪个平铺上。它与虽然要求顶点之间的距离相等。
在此复制摘要:
提出了一种将球面划分为等面积单元的新方法。该方法基于将一个球体划分为几个近乎恒定跨度的纬度带,并将每个带进一步划分为等面积的单元。它的构造简单,并且与其他球面的等纬度等面积镶嵌方法相比,在纬度带之间提供了更均匀的纬度步长。
(我已经使用它的想法试图从一长串位置中找到最近的地理位置邻居)。