2010-11-07 208 views
1

我有一個由兩個三維向量組成的「框」。一個用於左下角,另一個用於右上角。檢查一個向量是否在另外兩個之間

是否有任何簡單的方法來檢查第三個三維矢量是否在這個「盒子」內的任何地方?

首先我寫simething像(僞):

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

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

但是,如果所有的座標是積極的,他們不會永遠是,它才能正常工作。我應該做一些類似於上面的事情,還是有更好/更簡單的方法來做這個計算?

如果你想知道,這是矢量,它的方法我使用:http://www.jmonkeyengine.com/doc/com/jme/math/Vector3f.html

+2

即使對於負座標也應該使用這種方法!唯一不適用的情況是如果你的盒子座標不是真正的左下和右上。 – 2010-11-07 11:55:16

+1

這聽起來確定不了我。該盒子是否假定爲軸對齊? – 2010-11-07 11:58:57

+0

由我錯誤。所描述的方法即使在負座標下也可以工作。是的,盒子是軸對齊的。 – EClaesson 2010-11-07 12:03:23

回答

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. 
} 

更intutive(但slightliy較慢)變體將在每個軸上使用最小/最大:

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

這裏爲第盒的通用解決方案甚至可能不是直角,即一個普通的平行六面體。

這裏的訣竅是找到將您的方塊轉換爲單位立方體的轉換。如果你隨後拋出你想要通過這個轉換來測試的向量,那麼你只需要檢查X,Y和Z都在0和1之間。

考慮你的盒子上的角落點是你的起源。我們稱之爲K.現在,將三個主軸P Q R構造爲沿着觸摸這一點的三條邊延伸的向量。

現在三維空間中的任意點可以表示爲K + aP + bQ + cR。此外,只有一個滿足的(a,b,c)

如果你能確定(A,B,C),你只需要檢查每個是0和1之間

如果有人有興趣的矩陣數學,給我一個鐘!

相關問題