问候,
我正在开发一个使用 3D 六边形瓷砖地图变体的游戏项目。瓷砖实际上是立方体,而不是六边形,但布局就像六边形一样(因为可以将正方形变成立方体以从 2D 外推到 3D,但没有 3D 版本的十六进制)。这里没有详细的描述,而是一个 4x4x4 地图的示例:
(我已经突出显示了一个任意图块(绿色)及其相邻的图块(黄色),以帮助描述整个事情应该如何工作;但邻接函数不是问题,这已经解决了。)
我有一个结构类型来表示瓦片,地图表示为瓦片的 3D 数组(包装在一个Map
类中以添加一些实用方法,但这不是很相关)。每个图块都应该代表一个完美的立方空间,并且它们的大小完全相同。此外,相邻“行”之间的偏移量正好是图块大小的一半。
这已经足够了。我的问题是:
给定两个点的坐标A
和,我如何生成一个瓷砖列表(或者,更确切地说,它们的坐标),它们之间的B
直线会交叉?A
B
这稍后将用于各种目的,例如确定视线、充电路径合法性等。
顺便说一句,这可能很有用:我的地图使用 (0,0,0) 作为参考位置。地图的“锯齿状”可以定义为将每个图块((y+z) mod 2) * tileSize/2.0
从其在“正常”笛卡尔系统上的位置向右偏移。对于非锯齿行,产生 0;对于(y+z) mod 2
为 1 的行,它会产生 0.5 个图块。
我正在开发针对 .Net Framework 4.0 的 C#4;但我真的不需要特定的代码,只需要解决奇怪的几何/数学问题的算法。我已经尝试了几天来解决这个问题,但无济于事;并试图在纸上画出整个东西以“可视化”它也无济于事:(。
提前感谢您的任何回答