你写:
我很确定他正在描述一种算法,但是我得到了 失去了他的意思“mydistance((x2,y2),(x1,y1))”等我想 他可能意味着两点之间距离的公式?
只是为了了解这一点,正如你的问题的评论所暗示的那样,但答案似乎都没有解决:
该声明 mydistance((x2,y2), (x1,y1)) 是一个 递归 调用正在定义的函数。在这种情况下,如果调用该函数 x1>x2 然后在交换点的情况下再次调用该函数。
mydistance((x2,y2), (x1,y1))
x1>x2
为了比较,这是我的计算两个六边形之间距离的代码:
/** * Hex distance calculation */ public static int distance(int x1, int y1, int x2, int y2) { int dx=x2-x1; int dy=y2-y1; if (dx*dy>0) { return Maths.abs(dx)+Maths.abs(dy); } else { return Maths.max(Maths.abs(dx),Maths.abs(dy)); } }
(x1,y1)和(x2,y2)是要计算两者之间距离的坐标的坐标。请注意,这些坐标不是像在正方形网格上那样的直角:增加x和增加y是相隔60度。
在六边形坐标系中,y轴与x轴成60度角。这避免了奇偶行的区别。六边形坐标系中的距离为:
dx = x1 - x0 dy = y1 - y0 if sign(dx) == sign(dy) abs(dx + dy) else max(abs(dx), abs(dy))
你可以转换 (x', y) 从你的坐标系到 (x, y) 在这一个使用:
(x', y)
(x, y)
x = x' - floor(y/2)
所以 dx 变为:
dx
dx = x1' - x0' - floor(y1/2) + floor(y0/2)
使用整数除法实现此操作时要小心舍入。在Java中 int y floor(y/2) 是 (y%2 ? y-1 : y)/2 。
int y
floor(y/2)
(y%2 ? y-1 : y)/2