2013-02-20 86 views
0

進出口工作在光線跟蹤中C.我想弄清楚的射線相交平面的數學。我有光線追蹤在C,雷平面交叉口

d =((PO-LO)(點)N)/(L(點)N)

現在,如果我是正確的......

n - the planes normal ray 
Po = single point on the plane 
L = the vector that represents the ray I am shooting 
Lo = a point on the line 

我很困惑,到如何工作。如果我逐個像素地進行,線(L)上的點是否需要着陸在飛機上?如果那是真的,我不能用我正在投射什麼射線(L)的方向矢量來表示那個點嗎?

我覺得我完全過去複雜這一點,但我完全失去了對如何在我的代碼得到這個工作。

編輯:

d = a scalar in the real world domain. 

所以d需求等於零,以使平面和光線(點我看)相交?我可以使用方向矢量座標表示就行該點>

+0

d似乎是一個標量。它代表什麼? – 2013-02-20 04:56:27

+0

如果你想可能挽救自己有些頭疼,當涉及到十字路口,你可以存儲在本地座標中所有的原語(即與單元大小的由來),並保持與每一個相關聯的仿射變換(旋轉,縮放和翻譯)。當執行交叉點的邏輯,可以執行逆* *變換的射線並解決簡化相交問題,即P0 = 0,L0 =轉化的射線的來源,以及N是隻是你的座標系中的向上矢量。然後,您可以將生成的交點重新轉換爲世界座標。 – 2013-02-20 05:12:35

+0

線平面交叉口這個答案應該幫助*(它幾乎同樣的事情射線平面交叉口)*, 它引用的C代碼也http://stackoverflow.com/a/18543221/432509(和準確的參考功能https://developer.blender.org/diffusion/B/browse/master/source/blender/blenlib/intern/math_geom.c;62225057394b61c66cb7cb2ce1e9b8c62170c0d8$1262) – ideasman42 2015-10-23 05:17:09

回答

2

有關平面上任意點p,這個等式爲真:

dot(Po-p,N) = 0 

對於線路上的任何點p,該方程爲真:

p = Lo+L*d 

如果該點是要既在飛機上和上線(交叉),那麼它們都必須爲真。因此,我們可以替代:

dot(Po-(Lo+L*d),N) = 0 

做一些代數,我們可以解決d:

dot((Po-Lo)-L*d),N) = 0 
dot(Po-Lo,N) - dot(L*d,N) = 0 
dot(Po-Lo,N) - d*dot(L,N) = 0 
dot(Po-Lo,N) = d*dot(L,N) 
d = dot(Po-Lo,N)/dot(L,N)