问题标签 [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 投票
4 回答
17407 浏览

python - 在 Python 中存储三角形/六边形网格的最佳方法

我正在用六边形瓷砖制作游戏,并决定使用三角形/六边形网格。我发现这个问题帮助我生成坐标,并稍微修改了代码以将所有坐标作为键存储在字典中,其值为“。” (地板)或“X”(墙),并包含一个函数,该函数打印出地图的字符串表示形式,其中每个非空白字符代表一个六边形瓷砖。这是新代码:

使用此代码,我可以生成半径内的所有坐标,如下所示:

并访问这样的坐标:

现在这似乎工作正常,但我确信以这种方式存储地图一定有一些缺点。如果有任何缺点,您能否指出它们,并提出更好的存储地图的方法?非常感谢您的时间。

0 投票
2 回答
3801 浏览

javascript - 如何使用当前的网络技术生成六边形交互式地图

我想学习 html5/当前的网络技术,特别是创建游戏。

最初,我希望能够生成一个由六边形瓷砖组成的自上而下的 2d 地图。

这些图块将使用通常的环境图块(草地、平原、雪地、湖泊、海洋等...)随机生成

我希望能够放大/缩小。

我稍后会想让头像代表玩家/人工智能和瓷砖上的资产等......

我在哪里可以找到学习基础知识的良好起点?

0 投票
2 回答
1422 浏览

r - 使用 Spatstat 生成六边形晶格

我正在分析某些粒子的生长模式,并希望将点模式与具有相同强度(每单位面积的点数相同)的完美六边形晶格的点模式进行比较。我编写了一个函数来执行此操作,但它有一个固有的错误,我不确定它的来源。本质上,在函数运行之后,它会产生一个完美的六边形点图案,它没有正确数量的粒子——它通常偏离大约 1-4%。如果您将以下代码复制并粘贴到 R 中,您会看到这一点 - 对于这个特定示例,错误为 11.25% - 原始点图案有 71 个粒子,而生成的完美六边形点图案有 80 个粒子。这看起来很奇怪,因为代码,正如您将看到的,

以下是我编写的用于生成六角点阵的函数的代码。

六边形晶格的晶胞图

第一组点

第二组点

两组合二为一

现在,我对 R 比较陌生,所以很可能是代码中某处的语法错误导致了这个错误。或者,可能是我在这个过程中的思路有问题。但是,我认为这不太可能,因为我的结果与我一直在尝试的结果非常接近(大多数时候只有 1-4% 的错误是相当好的)。

总之,我想要帮助的是如何获取一个点图案并创建另一个具有相同窗口大小和相同数量粒子的点图案,但完美的六边形点图案。

如果您觉得有什么不清楚的地方,请不要犹豫,请我解释一下。

谢谢!

0 投票
2 回答
22222 浏览

hexagonal-tiles - 没有五边形的球体上的六边形网格

我想在球体上制作一个基于瓷砖的世界。我想用六边形的瓷砖,不过据我所知,你也需要在里面放五边形才能让它合适。

所以,我的问题是,是否可以在不使用五边形的情况下在球体上制作六边形网格?六边形不必是正六边形,如果它们都接近正则就足够了。

0 投票
1 回答
2112 浏览

c# - 截断的二十面体平铺对象

我正在尝试制作一个截断的二十面体,尽管有更多的细分(所以更多的六边形) 在此处输入图像描述 在我使用它的游戏中,每个五边形和六边形都是一个单独的对象。因此,在生成二十面体之后,我只需使用生成的点在其上放置一个五边形或一个六边形(而不是查找每个三角形的中间部分,我这样做是因为我需要它们成为单独的对象无论如何。)我对此有一些疑问,谷歌并没有真正的帮助,所以我希望这里有一些聪明的人:D

开始了:

  1. 我确定每边的长度相等吗?
  2. 由于每个六边形/五边形都是一个单独的对象,我需要旋转它们以使它们正确定位,对此有什么帮助吗?
  3. 假设我有半径为 1(一)的六边形/五边形,我必须将它们放在中间多远?(Basecly,我的六边形/五边形的半径和截断的二十面体的半径之间的关系是什么。)

这是我的第一个测试,我生成了一个二十面体,然后在每个点上放置一个五边形模型,我旋转它使其指向远离中间的方向。正如您所看到的,它们仍然需要旋转才能组合在一起(问题 2),并且它们到中间的距离也必须经过调整(问题 3)。

在此处输入图像描述

我也会继续努力,尽管所有的帮助都将不胜感激!(我是在 Unity 中使用 c# 制作的,所以如果你提供示例代码,如果你使用它会非常棒。)

非常感谢!

0 投票
1 回答
716 浏览

collision-detection - 二维六边形网格上的碰撞检测

我正在使用 Cocos2D 制作一个基于网格的休闲 2D iPhone 游戏。网格是一个“交错的”六角形网格,由大小均匀且间隔开的圆盘组成。它看起来像这样

我已将网格存储在二维数组中。我也有一个“环绕”网格单元的概念。即围绕特定单元格的六个网格单元格(边界上的网格单元格可以少于六个)。

无论如何,我正在测试一些碰撞检测,但它并没有像我计划的那样工作。以下是我目前对接近静止圆盘组的移动圆盘进行碰撞检测的方法:

  1. 使用移动单元的 xy 位置计算最接近移动单元的网格单元的 ij 坐标
  2. 使用 ij 坐标获取周围网格单元的列表
  3. 检查周围的细胞。如果它们都是空的,则没有碰撞
  4. 如果我们有一些非空的周围单元格,那么将圆盘中心之间的距离与碰撞所需的某个最小距离进行比较
  5. 如果发生碰撞,则将移动圆盘放在网格单元 ij 中

所以这行得通,但不太好。我考虑过一种可能更简单的蛮力方法,我只是在游戏循环的每个步骤中将移动圆盘与所有静止圆盘进行比较。这在性能方面可能是可行的,因为固定盘数最大为 300。如果不是,那么可以使用一些空间分区数据结构,但是感觉太复杂了。

在这样的游戏中,碰撞检测的一些常见方法和最佳实践是什么?

0 投票
1 回答
106 浏览

javascript - 对象在六边形边缘的模型放置

我有一个无间隙的六边形区域(像这样:http ://www.imec.be/ScientificReport/SR2007/html/afbeeldingen/SR030F1.jpg )

一个六边形由类表示Hexagon

我现在的问题是我想在六边形的角和边缘上“放置”某些对象。显然,将它(例如)放置在六边形的顶部边缘也需要将其设置在相邻六边形的底部边缘。

但我不想处理从不同角度代表同一位置的多个位置。

你知道更好的方法吗?

提前致谢!

狮子座

0 投票
2 回答
2416 浏览

r - ggplot2 stat_binhex():在改变绘图大小的同时保持 bin 半径

我想找到一种方法来在不手动调整 binwidth 参数的情况下在 ggplot2 中调整 hexbin 图的大小时保持正六边形(所有边的长度相等)。

为了显示:

产生至少看起来很规则的六边形:ggplot2 stat_binhex plot1

产生不规则的六边形:ggplot2 stat_binhex plot2

文档binwidth = c(1, 1000)描述了指定 bin 宽度的 binwidth 参数(例如)。我想要一个函数,当给定任何绘图大小时,它会返回正确的 binwidth 设置以创建正六边形。

0 投票
2 回答
12283 浏览

r - ggplot2 多个 stat_binhex() 在一张图像中绘制不同颜色梯度的图

我想使用 ggplot2 的 stat_binhex() 在同一个图表上同时绘制两个自变量,每个变量都有自己的颜色渐变,使用 scale_colour_gradientn()。

如果我们忽略 x 轴单位不匹配的事实,一个可重现的示例是在同一图像中绘制以下内容,同时保持单独的填充渐变。

在此处输入图像描述

在此处输入图像描述

我在 ggplot2 google groups here中找到了一些相关问题的对话。

0 投票
3 回答
405 浏览

algorithm - 将任意数量的多边形组合在一起

我有随机排列的任意数量的多边形(在这种情况下为十六进制),但它们都接触另一个十六进制。

在此处输入图像描述

每个单独的十六进制有 6 个 x,y 顶点。顶点以所有六边形而闻名。

谁能指出我将所有六边形组合成一个多边形的算法的方向?本质上,我只是在寻找一个函数,它可以吐出一组顶点位置,这些顶点位置的排序方式是,在从一个到下一个绘制线条时,它会形成多边形。

到目前为止,这是我的方法:

  1. 为所有六边形创建所有顶点的数组。
  2. 确定顶点在数组中出现的次数
  3. 如果顶点在数组中出现 3 次以上,则从数组中删除顶点。
  4. 如果顶点在数组中出现 2 次,则删除其中之一。

下一步很棘手。我正在使用画布绘制这些多边形,这实际上涉及从一个顶点到下一个顶点绘制一条线。所以最终数组中顶点的顺序很重要。不能随意排序。

另外,我不是在寻找“凸包”算法,因为它不会正确绘制多边形。

是否有任何功能可以做这样的事情?我是在正确的轨道上还是有更好更有效的方法?