[英]How to get plane-vertices by a point and normal
我有一个点p
和一个正常的n
(在3d空间中)。 我想计算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
x1=0; x2=0
并从等式中提取x3
。 同样,可以将x1=0; x3=0
设置x1=0; x3=0
x1=0; x3=0
并确定x2
等
一个非常有用的工具是叉积 (来自高中解析几何)。 这将一对有序的3维向量v和w作为输入,并产生一个垂直于两者的3维向量vxw,其长度是边为v和w的平行四边形的面积,因此当v时非零和w不平行。 自己实现叉积,或在向量库中找到它,或查看此问题 。
给定n,选择一个不平行的向量v。 nxv垂直于n。 对其进行归一化以获得垂直于n的单位矢量u1。 nxu1垂直于n和u1。 归一化以获得u2。 点p + -u1,p + -u2形成一个边长为sqrt(2)的正方形,其中心为p。
想要有一种连续选择点的方法是很自然的。 即使通过毛毛球定理限制单位矢量n,这也是不可能的。 您必须允许v的不连续选择。例如,您可以使用v =(1,0,0),除非n是(1,0,0)的非零倍,然后使用v =(0,1, 0)在那里。
查找与原始矢量正交甚至不涉及转换的矢量的方法就是简单地对坐标重新排序。 对于任何向量(x,y,z),一个正交将是(y,z,x),然后(z,x,y)将与两个正交。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.