2013-02-20 55 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)