0

3D システムには、[15, 32, 42] と [16, 32, 42] の 2 つの位置があります。

それらが互いに半径 1 ブロック以内にあるかどうかを確認する簡単な方法はありますか?

これは私が持っているものですが、それを行うより良い方法はありますか:

if (pos[0] == pos1[0] / 32 || pos[0] == pos1[0] + 1 || pos[0] == pos1[0] - 1)
{
    if (pos[1] == pos1[1] || pos[1] == pos1[1] - 1 || pos[1] == pos1[1] + 1)
    {
        if (pos[2] == pos1[2] || pos[2] == pos1[2] + 1 || pos[2] == pos1[2] - 1)
        {

ありがとう、デビッド

4

2 に答える 2

0

Math.abs(pos[0]-pos1[0]) <= 1同じ平面内の2つの座標が最大で1離れているかどうかを確認するために使用できます。

したがって、全体として、コードは次のようになります。

if( Math.abs(pos[0]-pos1[0]) <= 1 
    && Math.abs(pos[1]-pos1[1]) <= 1 
    && Math.abs(pos[2]-pos1[2]) <= 1 )
{
  Within a 1 block radius
}

最初の方程式を32で割った理由がわかりません。この回答には含めませんでした。

この解決策は物事をもう少し読みやすくしますが、あなたの解決策も正しいことにも注意してください。

于 2012-04-22T07:17:55.493 に答える
0

私はこれを c# では行っていませんが、Java では JTS を使用しています。http://geoapi.codeplex.com/は、C# で同じ機能を提供しているようです。次に、ポイントを Point オブジェクトとして表現し、あらゆる種類の便利な地理空間関数を使用できるようにします。

しかし、この場合、ピタゴラスである「カラスが飛ぶように」距離を探していますか、それとも、歩道の有向グラフで最短の有効なルートを見つけることを含む「歩行距離」を探していますか?

ジュリアン

于 2012-04-22T07:22:26.383 に答える