【问题标题】:Covering Earth with Hexagonal Map Tiles [closed]用六边形地图瓷砖覆盖地球[关闭]
【发布时间】:2009-04-14 20:34:55
【问题描述】:

许多策略游戏都使用六边形图块。主要优点之一是任何瓦片的中心与其所有相邻瓦片的距离相同。

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

以前有没有人看到过任何离这很近的东西?

更新

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

【问题讨论】:

  • 另外,你要记住地球远非球形。在大多数情况下,这没什么大不了的,但如果你想将瓷砖与表面相匹配,最终会出现它不是球体的事实。
  • @Gnubie:你是从Mathoverflow 来的吗? =D
  • @Vandermonde:你怎么猜的? ;-)

标签: math coordinates tesselation hexagonal-tiles


【解决方案1】:

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

截至 2018 年,new version is available 基于球拍。

【讨论】:

  • 有趣。除了阅读源代码之外,还有对算法的解释吗?有没有办法获取每个瓦片的经纬度?
  • @carrier 二十面体细分。从二十面体开始。将每个面细分为 4 个三角形。冲洗,重复。最后,无论您细分(镶嵌)多少次,您仍然只有 12 个五边形(从原始二十面体的顶点开始)。通过获取给定瓷砖的 3D 坐标并计算它们的纬度/经度来获得相对于赤道和本初子午线的角度。
  • @3Dave 这是一个很棒的建议,我已经尝试过使用它!然而,这些数字似乎并没有加起来。我从一个二十面体开始,镶嵌了 3 次。那是 20*4^3 = 1280 个面。在原始顶点生成 12 个五边形使我得到 1280 - (12*6) = 1220 个面。这个数字不能被 6 整除。我的数学错了吗?我希望我的数学是关闭的......
  • @user3249829 贡献因素:最初的 20 个面中的每一个都至少(我认为)三个五边形。我会考虑一下。同时看一个足球。 (不是开玩笑。)
  • @user3249829 所以,这样想:二十面体有 12 个顶点,因此有 12 个五边形,但只有 20 个面。
【解决方案2】:

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

Euler 说(并且有很多有趣和不同的证明,甚至是一整本书),给定一个球体在 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 - 所以你真的不能只使用六边形。

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

【讨论】:

  • 有趣。该证明的任何链接?
  • 很多取决于曲面上“六边形”的定义。您已经假设顶点必须由 3 个六边形共享。也许有些可以被哄成2或4?例如,将赤道分成六个长度。这些“边缘”对于球面来说是直的。所以两个半球将地球平铺成两个“六边形”。当然,这感觉不对,但你能想出一个不适用于半球的曲面六边形的定义吗?
【解决方案3】:

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

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

这种像素化满足等面积要求;然而,让一切都等距是不可能的。

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

【讨论】:

  • 我从来没有听说过那个。非常棒。
  • 非常好,以前没听说过
  • 愚蠢的提问时间:这就是为什么我们看到 Geodesics 在大学 campi (校园的主格复数)中流行的原因 - 它被认为是无法解决或已知无法解决的,这导致了 Geodesics 中的已知解决方案.. . ( ? ) 我一直想知道那些能够解决这个问题并希望确定“相当困难的研究问题”的建筑师学生,以避免在没有解决方案的浪费时间的情况下进行深度偏移。
【解决方案4】:

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

【讨论】:

  • 来自 Amit 的更新和更相关的文章:here
【解决方案5】:

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

【讨论】:

  • 二十面体是一个 20 面的骰子,就像 D&D 一样。每个顶点有 5 个三角形。如果你咬那个角,它将是一个五边形,每个三角形的其余部分都是一个六边形。根据需要将该六边形分成更小的六边形。
  • 或者想象一个足球:它由五边形组成,每个边都被六边形包围。或者,在这里寻找截断的二十面体:en.wikipedia.org/wiki/File:Uniform_polyhedron-53-t12.png
  • @GoatRider - 这是迄今为止,我听说过的那种网格的最佳可视化。
  • @ErickRobertson 太棒了。这是你在写的东西吗?
【解决方案6】:

六边形瓷砖对于应用于地理空间用途的常规几何图形来说过于复杂。 查看HTM 以获取与三角形类似的内容,或在谷歌中查看“分层三角形网格”以获取其他来源。

【讨论】:

  • 这不只是意味着我们需要更好的抽象才能用于地理空间目的吗?我刚刚发布了an R package,它可以很好地处理这个问题。
【解决方案7】:

阅读 Kevin Sahr、Denis White 和 A. Jon Kimerling 撰写的“测地线离散全球网格系统”

你可以找到它here...

【讨论】:

  • -1 当您的整个答案是对另一个来源的引用时,我希望您以某种方式总结该来源。告诉我为什么我要阅读那份文件。您只提供了一个链接,我认为我们可以做得更好。
【解决方案8】:

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

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

转换的数学运算很复杂。您可以在以下位置找到它们:

  • Crider, John E. “富勒地图投影和逆的精确方程”。制图:国际地理信息和地理可视化杂志 43.1(2008 年):67–72。网络。

  • Snyder, John P. “多面体地球的等面积地图投影”。制图:国际地理信息和地理可视化杂志 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. “用于地理空间计算的六角离散全球网格系统”。 Archiwum Fotogrametrii,Kartografii i Teledetekcji Vol。 22 (2011): 363–376。打印。
  • 萨尔,凯文。 “二十面体孔径 3 六边形离散全球网格上的位置编码。”计算机、环境和城市系统 32.3 (2008): 174–187。交叉参考。网络。
  • Sahr、Kevin、Denis White 和 A. Jon Kimerling。 “测地线离散全球网格系统。”制图和地理信息科学 30.2 (2003): 121–134。打印。

【讨论】:

【解决方案9】:

只有少数柏拉图多面体使用单一类型的多边形来近似球体。著名的ICOSAHEDRONDODECAHEDRON。如果你愿意有一点失真和一些重叠点,你可以获得公平的结果,让游戏变得有趣。试试THIS LINK,它设法使所有瓷砖的面积几乎相等,并且在全球范围内的瓷砖距离相当一致。

但是,这些地图都不是很容易映射到古老的地理圆柱经度/纬度投影系统上。

一种解决方案是在EQUIRECTANGULAR 投影图上叠加一个蜂窝状图案,并在您接近极点LIKE THIS 时允许大量失真。

祝您研究顺利! :)

【讨论】:

    【解决方案10】:

    老式的旅行者角色扮演游戏用于将行星表面绘制为二十面体(切开打印在书中)。这在角六角形处产生了很大的变形(它们必须变成五边形)。在搜索 GURPS Traveller 时,您可能会发现一些此类材料。

    【讨论】:

    • 是的,GURPS Space 有一个用于行星十六进制地图的标准表格。当然,它是一种抽象,非常粗糙/颗粒状。
    【解决方案11】:

    将球体分成由平面制成的相等部分是一件难事。因此,您最终会得到Geodesic shapes,它们不是由可以依次由相等大小的三角形组成的形状组成。将所有六边形和五边形分解为三角形,最终得到的三角形内角不同,从而导致对称性丧失。

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

    【讨论】:

      【解决方案12】:

      HEAlpix 是正确的,如果您的约束是在将球体分成几块时保持相等的面积(有趣的是,在两极和赤道地区覆盖天空中的投影区域相同)。您基本上每次都按照环形或嵌套方案将球体分成 4 份来满足分层等面积约束。在天空中“部署” FT 函数((等纬度属性)也非常方便,例如研究普朗克或 WMAP 任务中 CMB 模式的温度。

      它也在许多编程语言中实现。

      此外,我应该提到另一个(虽然不是相等的面积),称为 Q3C 的“四树立方体”,另一种具有其他优势(锥搜索和 x 匹配)的天空分区方案

      原论文:

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

      【讨论】:

        【解决方案13】:

        老问题,但是:

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

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

        创建一个二维的六边形“表”:

        并将它们在 3D 空间中从原点偏移 1。然后,对所有顶点进行归一化。

        这将为您提供具有良好球形曲线的“凸出”版本的工作表。问题在于,这仅在工作表覆盖球体的部分时才有效。

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

        不久前我在 2D 中遇到过类似的问题,可能会有所帮助。

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

        【讨论】:

        • 这确实是一个有趣的 hack。虽然它对于持久性世界并不是很有用,其中十六进制应该持久地存在于相同的坐标上。我希望我错了:D
        【解决方案14】:

        有一个paper 处理等面积平铺的情况(赤道周围几乎是方形平铺),并且相对容易预先计算相邻平铺以及特定坐标集落在哪个平铺上。它没有' t 很好地满足了顶点之间距离相等的要求。

        将摘要复制到这里:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-10
          • 2015-03-16
          • 1970-01-01
          • 2017-08-18
          • 1970-01-01
          相关资源
          最近更新 更多