问题标签 [hexagonal-tiles]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
14 回答
54974 浏览

math - 用六角地图瓷砖覆盖地球

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

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

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

更新

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

0 投票
2 回答
3507 浏览

wpf - WPF“十六进制网格”组件

进入 WPF 自定义控件的世界,想知道设计 HexGrid 控件的最佳方法是什么?想想你最喜欢的桌面战争游戏;或者,同样有可能,您最喜欢的电子游戏从令人自豪的桌面战争游戏历史中窃取设计。

底层模型公开了一个重要的方法,作为 Map 类的一部分:

十六进制包含所有相关数据(目前,将 1:1 映射到背景颜色的地形枚举;从小开始......)。

可能相关的约束:
地图的大小不变,十六进制数据在非常可预测的时间发生变化(总是直接响应用户操作)。

理想情况下,组件将扩展以干净地填充其容器,并且可以直接在 XAML 中声明。

我正在寻找的是我需要做些什么来构建它的粗略轮廓,而不是一个现成的组件。

*虽然我对这个寻址方案很聪明,但显然我迟到了

0 投票
2 回答
7294 浏览

wpf - 创建六边形网格

我必须像这样做一个“网格”:

谐波表 谐波表

我正在尝试创建一个列表ListViewItemsSource="List<Note>"每个奇怪的音符都移动到底部的位置...

ListView正确的控制吗?

如何绘制一个靠近下一个对象的面的精确六边形?

编辑:六边形绘图已解决......这是xaml:

0 投票
2 回答
4815 浏览

flash - 在 Flash 中绘制十六进制网格?

用算法绘制六角网格的最简单方法是什么?我应该如何在数据中呈现它们?

例如,在方形网格中,我可以只保存 xy 坐标..

0 投票
2 回答
386 浏览

sql - 在六边形区域中选择相邻单元格

想象一下具有 3 个维度的六边形空间。

每个图块都有坐标 XYZ。我需要在同一平面上选择给定的单元格邻居。使用 SQL,它看起来像:

但是,我不喜欢这种方式。也许有人知道更优化的算法?谢谢!

0 投票
5 回答
15437 浏览

math - 生成三角/六角坐标 (xyz)

我正在尝试提出一个迭代函数,为六边形网格生成 xyz 坐标。使用起始十六进制位置(为简单起见,例如 0,0,0),我想计算每个连续的六边形“环”的坐标,如下所示:

到目前为止,我想出的只是这个(javascript中的示例):

我知道每个环包含比前一个多六个点,并且每个 120° 向量包含一个从中心开始的每一步的额外点。我也知道x + y + z = 0所有的瓷砖。但是如何生成遵循以下顺序的坐标列表?

0 投票
6 回答
4352 浏览

php - 在六角场上通过螺旋创建细胞的算法

帮助找到在六角场上通过螺旋创建细胞的算法。

看图片:

替代文字

让我们想象一个无量纲的二维数组。X 轴是蓝线,Y 是水平线,螺旋线是红色。

我需要从中心点 x0y0 到点 N 通过螺旋添加单元格

请告诉我解决问题的方法。谢谢!

0 投票
1 回答
28849 浏览

math - 六边形网格坐标到像素坐标

我正在使用六边形网格。我选择使用这个坐标系是因为它非常优雅。

网格

这个问题谈论的是自己生成坐标,非常有用。我现在的问题是将这些坐标与实际像素坐标进行转换。我正在寻找一种简单的方法来找到坐标为 x,y,z 的六边形的中心。假设像素坐标中的 (0,0) 位于十六进制坐标中的 (0,0,0) 处,并且每个六边形都有一条长度为 s 的边。在我看来,x、y 和 z 应该每个都将我的坐标沿轴移动一定距离,但它们以一种奇怪的方式相互关联,我无法完全理解它。

如果您可以转到另一个方向并将像素坐标中的任何 (x,y) 点转换为该点所属的十六进制,则可以加分。

0 投票
2 回答
1123 浏览

algorithm - 3D hex-like tile maps 上的光线追踪 (LoS)

问候,

我正在开发一个使用 3D 六边形瓷砖地图变体的游戏项目。瓷砖实际上是立方体,而不是六边形,但布局就像六边形一样(因为可以将正方形变成立方体以从 2D 外推到 3D,但没有 3D 版本的十六进制)。这里没有详细的描述,而是一个 4x4x4 地图的示例:

(我已经突出显示了一个任意图块(绿色)及其相邻的图块(黄色),以帮助描述整个事情应该如何工作;但邻接函数不是问题,这已经解决了。)

我有一个结构类型来表示瓦片,地图表示为瓦片的 3D 数组(包装在一个Map类中以添加一些实用方法,但这不是很相关)。每个图块都应该代表一个完美的立方空间,并且它们的大小完全相同。此外,相邻“行”之间的偏移量正好是图块大小的一半。

这已经足够了。我的问题是:
给定两个点的坐标A和,我如何生成一个瓷砖列表(或者,更确切地说,它们的坐标),它们之间的B直线会交叉?AB

这稍后将用于各种目的,例如确定视线、充电路径合法性等。

顺便说一句,这可能很有用:我的地图使用 (0,0,0) 作为参考位置。地图的“锯齿状”可以定义为将每个图块((y+z) mod 2) * tileSize/2.0从其在“正常”笛卡尔系统上的位置向右偏移。对于非锯齿行,产生 0;对于(y+z) mod 2为 1 的行,它会产生 0.5 个图块。

我正在开发针对 .Net Framework 4.0 的 C#4;但我真的不需要特定的代码,只需要解决奇怪的几何/数学问题的算法。我已经尝试了几天来解决这个问题,但无济于事;并试图在纸上画出整个东西以“可视化”它也无济于事:(。

提前感谢您的任何回答

0 投票
5 回答
1390 浏览

c++ - 使用类 C++ 递归创建的链表

我正在使用 C++ 递归地制作六边形网格(使用多重链表样式)。我已经将它设置为可以轻松创建相邻的图块,但是因为我是递归地执行它,所以我只能为给定的图块创建所有 6 个邻居。显然,这会导致创建重复的瓷砖,我正试图以某种方式摆脱它们。因为我正在使用一个类,所以检查空指针似乎不起作用。它要么无法从我的 Tile 类转换为 int,要么以某种方式转换它但没有正确执行。我在创建时明确地将所有指针设置为 NULL,当我检查它是否仍然存在时,它说它不是即使我自初始化以来从未接触过它。有没有我应该这样做的特定方式?如果没有某种 NULL,我什至无法遍历网格

这是我的一些相关代码。是的,我知道这很尴尬。

瓦片类头:

瓷砖初始化:

相邻瓦片的创建:

最后,遍历网格:

关键是“if(inputTile->neighbor[x])”,无论我是“if(inputTile->neighbor[x]==NULL)”还是我做的任何事情,它都没有正确处理它。哦,我也知道我还没有完全设置列表。现在只有一个方向。