回答を提供してくれた@user2709663と@jonathankorenに感謝します。私はあなたの答えに多くの時間を費やしていますが、両方ともいくつかの問題があることがわかりました。または、少なくともこれらの回答で考慮されるグリッドのタイプは明確に述べられていません。ただし、http: //www.redblobgames.com/grids/hexagons/(ライブラリコード:http://www.redblobgames)で、この問題の非常に優れたチュートリアルとコード実装、および六角形グリッドを管理するためのライブラリを見つけました。 .com / grids / hexagons /implementation.html)。また、次のように、「odd-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
これが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