如何通过点和法线获取平面顶点

How to get plane-vertices by a point and normal

我有一个点 p 和一个正常的 n(在 3d space 中)。 我想计算 4 个顶点,它们位于垂直于法线且位于点 p.

的平面上

顶点应该形成一个矩形,p 应该是这个矩形的中心。

这里有一些可以帮助您入门的内容:

平面上的每个矢量都与平面的法线正交。即,对于平面上的任意点 x,(x - p) 是一个平行于平面的向量,它与给定法线 n 的点积为零:

n*(x - p) = 0

这应该会给出平面的方程式,并允许您根据需要在平面上找到尽可能多的点。

编辑:一个例子:

n = (n1,n2,n3) ;  p = (p1,p2,p3); x = (x1,x2,x3)

n1*(x1-p1) + n2*(x2-p2) + n3*(x3-p3) = 0

现在设置例如 x1=0; x2=0 并从等式中提取 x3。同样可以设置x1=0; x3=0,确定x2,等等

一个非常有用的工具是 cross product (from high school analytic geometry). This takes as an input an ordered pair of 3-dimensional vectors v and w, and produces a 3-dimensional vector vxw perpendicular to both, whose length is the area of the parallelogram whose sides are v and w, hence which is nonzero when v and w are not parallel. Implement the cross product yourself, or find it in a vector library, or look at this question

给定n,选择一个不平行的向量v。 nxv 垂直于 n。将其归一化以获得垂直于 n 的单位向量 u1。 nxu1 垂直于 n 和 u1。将其归一化以获得 u2。点p+-u1,p+-u2构成一个正方形,边长为sqrt(2),中心为p.

很自然地想要有一种连续选择点的方法。即使您通过 Hairy Ball Theorem 限制为单位向量 n,这也是不可能的。您必须允许 v 的不连续选择。例如,您可以使用 v = (1,0,0) 除非 n 是 (1,0,0) 的非零倍数,然后使用 v = (0,1, 0) 那里。

找到与原始向量正交的甚至不涉及变换的向量的方法是简单地重新排序坐标。对于任何向量 (x,y,z),一个正交将是 (y,z,x),然后 (z,x,y) 将与两者正交。