1

2 つの 3 次元ベクトルから作成された「ボックス」があります。1 つは前面左下隅用、もう 1 つは背面右上隅用です。

3 番目の 3 次元ベクトルがこの「ボックス」内にあるかどうかを確認する簡単な方法はありますか?

最初に(疑似)のようなものを書きました:

p = pointToCompare;
a = frontLowerLeft;
b = backUpperRight;

if(p.x >= a.x && p.x <= b.x && p.y >= a.y ...

しかし、それはすべての座標が正の場合にのみ機能し、常にそうとは限りません。上記のようなことをする必要がありますか、またはこの計算を行うためのより良い/簡単な方法はありますか?

知りたい場合は、これが Vector であり、私が使用している方法です: http://www.jmonkeyengine.com/doc/com/jme/math/Vector3f.html

4

2 に答える 2

4

もう少し堅牢にしたい場合は、コーナーの位置に対して不変にすることができます。

if (a.x <= p.x && p.x <= b.x || b.x <= p.x && p.x <= a.x) {
  // similar to the y- and z-axes.
}

より直感的な (しかし少し遅い) バリアントは、各軸で最小/最大を使用することです。

if (Math.min(a.x, b.x) <= p.x && p.x <= Math.max(a.x, b.x)) {
  // ...
}
于 2010-11-07T12:21:33.243 に答える
0

これは、直角でさえない可能性のあるボックス、つまり一般的な平行六面体の一般的な解決策です。

ここでのコツは、ボックスを単位立方体に変換する変換を見つけることです。次に、この変換によってテストしたいベクトルを投げると、X、Y、Z がすべて 0 と 1 の間にあることを確認するだけで済みます。

箱の角を原点と考えてください。これを K と呼びましょう。3 つの主軸 PQR を、この点に接する 3 つのエッジに沿って伸びるベクトルとして作成します。

これで、3 次元空間の任意の点をK + aP + bQ + cRとして表すことができます。また、満たすのは (a, b, c) の1 つだけです。

(a, b, c)を決定できる場合は、それぞれが 0 と 1 の間にあることを確認するだけです。

行列演算に興味のある人はベルをください!

于 2010-11-08T18:49:08.470 に答える