2010-03-10 138 views
2

这有点难以描述,因此裸露在我身边。基本上,我在三维空间中有一个由三个顶点p0,p1和p2定义的三角形。在3D空间中计算垂直于三角形的平面

我希望计算这个三维空间中的一个平面,该平面位于p0和p1上并面向第三个点p2。

该平面是要由位置和归一化方向

另外定义/沿着P0和P1卧,和面对P2,该平面也应该是垂直于由P0,P1形成的平面,并p2

我一直在为此奋斗了一段时间,任何人都可以提供的帮助非常感谢。

回答

3

您的问题不适合。对于位于p0和p1上的任何平面,该平面上的某个点将“面向”点p2。所以剩下要计算的是沿着p0和p1的一些平面。

normal = normalize(cross(p1-p0, pX-p0)) //pX is anything except p1 
planePoint = p0 

编辑:看评论

这里是我的评论解释

倍频的例子:14> P0
P0 =

八度:15> p1
p1 =

八度:16> P2
P2 =

八度:17>交叉(P1-P0,交叉(P1-P0,P2-P0 ))
ANS =

-125 0 0

你会发现,标志为w rong,按照交叉产品中参数的顺序进行操作,使其面向正确的方向。另外不要忘记正常化...但它不会影响方向。另外检查一下,以确保每个交叉产品后的标准是不接近0,否则没有独特的答案..(三角形形成一条线)

+0

啊,是的,我应该澄清。我很抱歉。除了沿着p0和p1放置,并且面向p2之外,该平面还应该垂直于由p0,p1和p2创建的平面。 – Fascia 2010-03-10 06:13:05

+1

then normal = normalize(cross(p1-p0,normalize(cross(p1-p0,p2-p0))))and planePoint is still p0。 – 2010-03-10 07:14:55

+0

工作得很好,谢谢你的帮助。现在你已经为我拼出来了,这似乎很明显。 – Fascia 2010-03-10 14:29:07

1

除非我误解了你的要求,否则从p2到p2的矢量将成为你试图定义的平面的法线。基本上,你构造了一条与p0-p1直线相交的直线,穿过p2。