ご挨拶、
六角形のタイル マップの 3D バリアントを使用するゲーム プロジェクトに取り組んでいます。タイルは実際にはヘックスではなく立方体ですが、ヘックスのように配置されます (2D から 3D に外挿するために正方形を立方体に変えることができますが、ヘックスの 3D バージョンがないため)。詳細な説明ではなく、4x4x4 マップの例を次に示します。
(任意のタイル (緑) とそれに隣接するタイル (黄色) を強調表示して、全体がどのように機能するかを説明していますが、隣接機能は問題ではなく、既に解決されています。)
タイルを表す構造体型があり、マップはタイルの 3D 配列として表されます (Map
いくつかのユーティリティ メソッドを追加するためにクラスにラップされますが、あまり関係ありません)。各タイルは完全な立方体の空間を表すと想定されており、それらはすべてまったく同じサイズです。また、隣接する「行」間のオフセットは、タイルのちょうど半分のサイズです。
コンテキストはこれで十分です。私の質問は次のとおりです。
と の 2 点の座標が与えられた場合、A
との間のB
直線が交差するタイル (または、それらの座標) のリストを生成するにはどうすればよいですか?A
B
これは後で、見通し線や充電パスの合法性などを判断するなど、さまざまな目的に使用されます。
ところで、これは役に立つかもしれません: 私のマップは (0,0,0) を参照位置として使用します。((y+z) mod 2) * tileSize/2.0
マップの「ギザギザ」は、各タイルを「正常な」デカルト座標系での位置から右にオフセットすることとして定義できます。ギザギザでない行の場合は 0 になります。が 1の行の場合(y+z) mod 2
、0.5 タイルが得られます。
私は、.Net Framework 4.0 をターゲットとする C#4 に取り組んでいます。しかし、特定のコードは本当に必要ありません。奇妙な幾何学/数学の問題を解決するためのアルゴリズムだけです。私はこれを無駄に解決するために数日間試みてきました。そして、「視覚化」するために紙に全体を描こうとしても役に立ちませんでした:( .
ご回答ありがとうございます。