2010-07-06 84 views
3

此刻此刻我對此有一個總體空白。3d矢量與立方體的交點位置

我有一個由中心點和寬度,高度和深度定義的立方體(體素)。 如果我有一個從框中心起點的向量(例如(-0.7, - 0.7,-0.7))如何計算矢量與盒子外部相交的點?

編輯:框始終與軸對齊。 問題在於3d。

由於

+0

(對不起,我不理解)如果你的盒子是3D的,但你的載體是2D的,想必你永遠無法知道它是否相交的立體面。 – 2010-07-06 07:00:18

+0

我想你想要使用Liang-Barsky算法。參見: http://en.wikipedia.org/wiki/Liang%E2%80%93Barsky and http://www.siggraph.org/education/materials/HyperGraph/scanline/clipping/cliplb.htm – jts 2010-07-06 07:00:41

+0

對不起,試圖先用2D處理它,然後轉換到3D。它應該是一個3D矢量。 – paintstripper 2010-07-06 07:04:09

回答

2

你的盒子將具有的表面上的任何點的至少一個座標等於0.5或-0.5,和所有其他人將-0.5 < = C < = 0.5。

因此,找到絕對值最大的座標,然後縮放矢量使該座標等於+/- 0.5。

像這樣的東西可能會奏效:

if (fabs(x) > fabs(y) && fabs(x) > fabs(z)) 
    y *= 0.5/fabs(x) 
    z *= 0.5/fabs(x) 
    x *= 0.5/fabs(x) 
else if (fabs(y) > fabs(z)) 
    x *= 0.5/fabs(y) 
    z *= 0.5/fabs(y) 
    y *= 0.5/fabs(y) 
else 
    x *= 0.5/fabs(z) 
    y *= 0.5/fabs(z) 
    z *= 0.5/fabs(z) 
+0

這是否假設矢量被歸一化? – paintstripper 2010-07-06 07:32:08

+0

不,它不需要正常化 – 2010-07-06 07:37:31

+0

好吧,這似乎工作。好而簡單 - 謝謝,這正是我需要的。 – paintstripper 2010-07-06 07:51:05