2

我有一张六边形地图,但我意识到我的坐标系不适合使用某些 findpath 算法,所以我想对其进行改造。我选择了一个完全满足我的系统。你可以在这里找到它。但是在引用的示例中,整个地图的旋转方式与我需要的不同。

我的旧版地图在这里: http ://dark-project.cz/wesnoth/map-view/1

我的问题是如何在 HTML 中渲染我的地图,使其拥有与现在相同的地图,但使用新的坐标系?

(我使用 PHP 循环渲染它。对于每个字段,我都有以下信息:坐标、字段类型(草、村庄……)和字段图像的尺寸)

谢谢您的回答!

PS:我认为这可以通过使用 HTML5 Canvas 来完成,但我想要良好的浏览器支持,并且我没有任何使用 HTML5 的经验(但如果它速度快并且有良好的浏览器支持,我不会在客户端渲染)所以我更喜欢服务器端(PHP)解决方案!

4

1 回答 1

2

您的坐标系与算法演示中使用的坐标系不兼容。

我认为你最好的选择是改变你发现的算法来使用你的坐标系。

AFAIK你基本上必须改变:

  • 采用给定坐标并确定 6 个相邻坐标的部分。
  • 确定给定坐标是否在地图边界内的函数。
  • (某种)计算成本/距离的函数

我注意到演示代码如下:

function hex_distance(x1,y1,x2,y2) {
    dx = Math.abs(x1-x2);
    dy = Math.abs(y2-y1);
    return Math.sqrt((dx*dx) + (dy*dy));
}

但这是一个不准确的估计,因为轴不垂直。它可能会产生非最佳结果 - A* 搜索中的分数函数的要求是产生不高于实际成本的值。此功能可能违反该规则。

您的坐标系实际上会使该功能更准确,但您也可以只使用曼哈顿距离:

function hex_distance(x1,y1,x2,y2) {
    return abs(x2-x1) + abs(y2-y1);
}

如果我没记错的话,它计算出从 (x1,y1) 到 (x2,y2) 所需的平铺步数。

于 2012-04-09T15:25:19.840 回答