我正在使用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
我很困惑这是如何工作的。如果我逐像素地移动线(Lo)上的点是否需要降落在平面上?如果那是真的我不能用我正在投射的射线(L)的方向向量来表示那个点吗?
我觉得我完全过于复杂,但我完全迷失了如何在我的代码中使用它。
编辑:
d = a scalar in the real world domain.
所以d需要等于零,以便平面和光线(在我正在看的点)相交?我可以使用方向向量坐标来表示该行上的那个点>
答案 0 :(得分:3)
对于飞机上的任何点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)