假设您要查找平面中任意点的坐标,以坐标 (u,v) 表示...
如果点 [x0,y0,z0] 在平面上,那么我们知道
dot([a,b,c],[x0,y0,z0]) = -d
其中 dot 是两个向量之间的点积。这只是重写平面方程。
诀窍是找到两个跨越平面子空间的向量。为此,我们选择一个长度为 3 的随机向量。称之为 V0。我叫平面法向量
N = [a,b,c]
接下来,使用法线向量 N 与 V0 的叉积。
V1 = cross(N,V0)
这个向量将与法线向量正交,除非我们非常不幸并且 N 和 V0 共线。在这种情况下,只需选择另一个随机向量 V0。我们可以判断这两个向量是否共线,因为 V1 将是向量 [0 0 0]。
因此,如果 V1 不是零向量,则将每个元素除以 V1 的范数。向量的范数就是元素平方和的平方根。
V1 = V1/norm(V1)
接下来,我们选择与 N 和 V1 都正交的第二个向量 V2。同样,向量叉积也很简单。将该向量标准化为也具有单位长度。 (由于我们现在知道 V1 是具有单位范数的向量,我们可以只除以范数(N)。)
V2 = cross(N,V1)
V2 = V2/norm(V2)
平面上的任何点现在都可以简单地描述为 (u,v) 的函数,如下所示:
[x0,y0,z0] + u*V1 + v*V2
例如,当 (u,v) = (0,0) 时,显然我们得到了 [x0,y0,z0],因此我们可以将该点视为 (u,v) 坐标中的“原点” .
同样,我们可以从已知位于平面内的任何点 [x,y,z] 恢复 u 和 v,或者我们可以找到不在平面内的点的法线投影,投影到那个平面上。