检查矢量是否在另外两个之间

时间:2010-11-07 11:51:48

标签: java math 3d vector jmonkeyengine

我有一个由两个三维向量组成的“盒子”。一个用于前 - 左下角,一个用于后 - 右上角。

有没有简单的方法可以检查第三个三维向量是否位于此“框”内的任何位置?

首先,我写了像(伪)的simething:

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

2 个答案:

答案 0 :(得分: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.
}

更直观(但略微慢一点)的变体是在每个轴上使用min / max:

if (Math.min(a.x, b.x) <= p.x && p.x <= Math.max(a.x, b.x)) {
  // ...
}

答案 1 :(得分:0)

这是一个可能不是直角的盒子的一般解决方案,即一般的平行六面体。

这里的技巧是找到将您的盒子转换为单位立方体的转换。如果然后抛出要通过此变换测试的矢量,则只需要检查X,Y和Z是否都位于0和1之间。

考虑你的盒子上的角点是你的起源。让我们称之为K.现在构造你的三个主轴P Q R作为沿着接触这一点的三条边延伸的向量。

现在,三维空间中的任何一点都可以表示为 K + aP + bQ + cR 。而且,只有一个(a,b,c)满足。

如果你可以确定(a,b,c),你只需要检查每个是否在0和1之间。

如果有人对矩阵数学感兴趣,请给我一个铃声!