基于点的线/平面交点

Mor*_*sen 5 math line-intersection

我在空间中有两个点,L1和L2在一条线上定义了两个点.

我在太空中有三个点,P1,P2和P3在一架飞机上有3个点.

那么根据这些输入,线在什么点与平面相交?

FX.平面方程A*x + B*y + C*z + D = 0是:

A = p1.Y * (p2.Z - p3.Z) + p2.Y * (p3.Z - p1.Z) + p3.Y * (p1.Z - p2.Z)
B = p1.Z * (p2.X - p3.X) + p2.Z * (p3.X - p1.X) + p3.Z * (p1.X - p2.X)
C = p1.X * (p2.Y - p3.Y) + p2.X * (p3.Y - p1.Y) + p3.X * (p1.Y - p2.Y)
D = -(p1.X * (p2.Y * p3.Z - p3.Y * p2.Z) + p2.X * (p3.Y * p1.Z - p1.Y * p3.Z) + p3.X * (p1.Y * p2.Z - p2.Y * p1.Z))
Run Code Online (Sandbox Code Playgroud)

但其余的呢?

bti*_*lly 8

解决这个问题的最简单(也很普遍)的方法就是说

L1 + x*(L2 - L1) = (P1 + y*(P2 - P1)) + (P1 + z*(P3 - P1))
Run Code Online (Sandbox Code Playgroud)

它给出了3个变量中的3个方程.求解x,y和z,然后替换回原始方程中的任何一个以得到答案.这可以推广到做复杂的事情,比如找到4个维度中两个平面的交点.

对于替代方法,和的叉积N(P2-P1)(P3-P1)平面成直角的矢量.这意味着该平面可以被定义为一组点P,使得的点积PN是的点积P1N.求解x这样的(L1 + x*(L2 - L1)) dot N常数就是在一个易于求解的变量中给出一个等式.如果你要与这架飞机相交很多线路,这种方法绝对值得.

明确写出这给出了:

N = cross(P2-P1, P3 - P1)
Answer = L1 + (dot(N, P1 - L1) / dot(N, L2 - L1)) * (L2 - L1)
Run Code Online (Sandbox Code Playgroud)

哪里

cross([x, y, z], [u, v, w]) = x*u + y*w + z*u - x*w - y*u - z*v
dot([x, y, z], [u, v, w]) = x*u + y*v + z*w
Run Code Online (Sandbox Code Playgroud)

请注意,该交叉产品技巧适用于3个维度,并且仅适用于您的特定平面和线条问题.