この質問を新しい質問の基礎として使用するという明らかな伝統に従って、私も可能な限りエレガントに解決しようとしている問題を抱えています。
私はそのように六角形の地図を実装しました:
(ここに画像を挿入したいのですが、新品のため許可されていません...上記のリンクをご覧ください)
しかし、今、これらのタイプの座標を使用して、このタイプのマップにA *を(エレガントに)実装する方法を考えています。私は典型的な正方形のグリッド(デカルトグリッドだと思いますか?)でA *を使用した経験があり、そこでの処理方法はこの座標系と互換性がないようです。
通常、バイトの2D配列を生成します。配列のインデックスはグリッド座標に対応し、そのインデックスの値はそのノードの「重み」を示します。(0は通行不能であり、数値が大きいほど、数値が小さいよりも重くなります)。
例:
sbyte[,] pathGrid = new sbyte[5, 5]
{
{0,0,1,0,0},
{9,5,1,3,0},
{9,5,1,3,0},
{9,5,1,3,0},
{0,0,1,0,0}
};
0が通行不能である場合、1は簡単にトラバースでき、数値が大きいほどトラバースに「コスト」がかかります。(フォーマットについて申し訳ありません。私はスタックオーバーフローですnewb:P)この配列は、マップの構成に基づいて生成され、パスファインディングアルゴリズムに入力されます。パスファインディングアルゴリズムは、ノードのリスト(パス)を吐き出します。または、パスが見つからなかった場合はnullを返します。
ただし、このタイプのグリッドを使用すると、負の座標(明らかに配列では機能しない)とグリッドが'と同じルールに従わないため、(少なくとも一見すると)不可能です。典型的な'グリッド。
私のA*メソッドを使用してこれを解決する方法はいくつかあると思いますが、それらはすべてかなりずさんで(グリッド座標の変換と空のノードの使用)、誰かがこれをエレガントに行う方法を考えているのではないかと思いました。
とにかく読んでくれてありがとう:)(ところで私はそれが価値があるもののためにC#/。netでこれをやっています)