user2709663 @おかげで、答えを提供するための@jonathankoren:
def hexDistance(start, dest):
if (start.x == dest.x):
return abs(dest.y - start.y)
elif (start.y == dest.y):
return abs(dest.x - start.x)
else:
dx = abs(dest.x - start.x)
dy = abs(dest.y - start.y)
if start.y < dest.y:
return dx + dy - int(math.ceil(dx/2.0))
else:
return dx + dy - int(math.floor(dx/2.0))
これはヘキサ>正方形の表現を使用しています。私はあなたの答えに多くの時間を費やしますが、どちらにも問題があることがわかりました。あるいは少なくともそれらの答えに考慮されているグリッドのタイプは明確には述べられていない。しかし、私は、この問題のチュートリアルとコードの実装が非常に優れていることと、16進グリッドを管理するためのライブラリがhttp://www.redblobgames.com/grids/hexagons/(ライブラリコード:http://www.redblobgames.com/grids/hexagons/implementation.html)であることを発見しました。私はまた、次のように「奇数-Q」の垂直レイアウトの距離コードのMatlabのバージョンを実装します。ここでは
function f = offset_distance(x1,y1,x2,y2)
ac = offset_to_cube(x1,y1);
bc = offset_to_cube(x2,y2);
f = cube_distance(ac, bc);
end
function f = offset_to_cube(row,col)
%x = col - (row - (row&1))/2;
x = col - (row - mod(row,2))/2;
z = row;
y = -x-z;
f = [x,z,y];
end
function f= cube_distance(p1,p2)
a = abs(p1(1,1) - p2(1,1));
b = abs(p1(1,2) - p2(1,2));
c = abs(p1(1,3) - p2(1,3));
f = max([a,b,c]);
end
は、MathWorks社のMATLABテストコードが
ある
sx = 6;
sy = 1;
for i = 0:7
for j = 0:5
k = offset_distance(sx,sy,i,j);
disp(['(',num2str(sx),',',num2str(sy),')->(',num2str(i),',',num2str(j),')=',num2str(k)])
end
end
あなたはヘクスの中心点を参照していますか?言い換えれば、あなたは[0,0]と[3,3]の間にどれだけの数があるのかを調べようとしていますか? – ChiefTwoPencils
はい、正確に私が見つけようとしていることです – DeathorGlory9
どのように定義しますか? 2点間の16進数のセットはユニークではありません – thang