久しぶりに、ヘックスマップ上での目的地までの最短距離を算出する話。
以前、「最短経路の方向転換ポイントを算出する」で上方向に向かう場合の最短距離(最短ルート)を算出した。
具体的には、目的地方向の六角形の二辺のどちらかから直線で進み、途中で一回だけ方向転換し、また一直線に目的地に向かうという進み方である。
ある地点から斜めに最短距離で目的地に向かうルートは算出出来るので、要はどこで方向転換するかを算出すればいいという話やね。(「?」という人は、「ヘックス」とかをキーワードに過去記事をチェックしてみてちょ)
進む方向としては、↓下の写真のように開始地点から見て6つある。マスが六角形だからな。
それぞれ A~F の名前をつけてみた。
A 方向(上方向)の計算式は前回考えたように、
<右に向かうコースの転換点の座標>X = X(A) - (Z(A) - Z(B))Y = Y(A)Z = Z(B)<左に向かうコースの転換点の座標>X = X(A) - (Y(A) - Y(B))Y = Y(B)Z = Z(A)
でOK。(A) が起点、(B) が終点の座標値だ。
起点が 15-17-18 の座標、ゴール地点が 2-8-15 の座標であれば、右方向なら 11-17-14 座標のマスへ向かい、そこで方向転換して 2-8-15 に向かうのが最短距離。
左方向なら 6-8-18 が方向転換マスの座標値だ。上の計算式で試しにやってみてほしい。
で、その他の方向の方向転換ポイント(マスの座標値)の算出方法。
出発点から右に向かって行くか、左に向かっていくか、それぞれ2つのパターンがある。
B 方向(左上方向)
<右に向かうコースの転換点の座標>X = X(B)Y = Y(A) - (X(A) - X(B))Z = Z(A)<左に向かうコースの転換点の座標>X = X(A)Y = Y(A) - (Z(B) - Z(A))Z = Z(B)
C 方向(左下方向)
<右に向かうコースの転換点の座標>X = X(A)Y = Y(B)Z = Z(A) + (Y(A) - Y(B))<左に向かうコースの転換点の座標>X = X(B)Y = Y(A)Z = Z(A) + (X(B) - X(A))
D 方向(下方向)
<右に向かうコースの転換点の座標>X = X(A) + (Z(B) - Z(A))Y = Y(A)Z = Z(B)<左に向かうコースの転換点の座標>X = X(A) + (Y(B) - Y(A))Y = Y(B)Z = Z(A)
E 方向(右下方向)
<右に向かうコースの転換点の座標>X = X(B)Y = Y(A) + (X(B) - X(A))Z = Z(A)<左に向かうコースの転換点の座標>X = X(A)Y = Y(A) + (Z(A) - Z(B))Z = Z(B)
F 方向(左上方向)
<右に向かうコースの転換点の座標>X = X(A)Y = Y(B)Z = Z(A) - (Y(B) - Y(A))<左に向かうコースの転換点の座標>X = X(B)Y = Y(A)Z = Z(A) - (X(A) - X(B))
こんな感じ。
あとは、起点から見て A~F のどの方面に終点があるかが判断できれば、どの計算式を使えばいいかがわかる。
次回は、「A~F のどの方面に終点があるか」をどうやって判断すればいいかを考えてみようか。