我有一个由两个三维向量组成的“盒子”。一个用于前 - 左下角,一个用于后 - 右上角。
有没有简单的方法可以检查第三个三维向量是否位于此“框”内的任何位置?
首先,我写了像(伪)的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
答案 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之间。
如果有人对矩阵数学感兴趣,请给我一个铃声!