在3D中找到垂直于两条相交线的点

时间:2016-03-13 12:51:33

标签: c++ math vector 3d geometry

我在3D中有两行(L1, L2)

L具有以下起点和终点坐标:P1(x1, y1, z1)P2(x2, y2, z2)

L2P3(x3, y3, z3)P2(x2, y2, z2)。请注意L1L2的{​​{1}}是如何相同的:意味着它们在此特定点相交。

现在我想在距离P2的任何距离处找到一个点P2P(x,y,z)线垂直于放置点(P,P2)的平面。

3 个答案:

答案 0 :(得分:1)

cross product将为您提供由两个其他向量描述的平面的垂直向量,伪代码:

normal = cross(normalize(P1-P2), normalize(P3-P2))

由于您已将P2定义为交叉点,因此您只需将此法线向量添加到P2即可获得垂直点。

答案 1 :(得分:1)

交叉积是计算相对于两条线的垂直度的方法。你需要制作你的线参数的矢量,简单的方法就是:

vecL1 = (x1-x2, y1-y2, z1-z2) and
vecL2 = (x3-x2, y3-y2, z3-z2)

交叉产品你可以谷歌如何计算,但在这种情况下:

//Replacing the new x,y,z's with i, j, k to avoid naming confusion.
vecL3 = vecL1 x vecL2 = (j1*k2 - j2*k1, k1*i2 - k2*i1, i1*j2 - j1*i2)

现在每个定义的叉积是一个新的向量(线),它严格垂直于你用来计算它的两条线/向量。但是矢量缺少位置,所以你需要在这个矢量上添加交点才能找到一些点。

//i3, j3, k3 being the third vector's parameters
P3(i3+x2, j3+y2, k3+z2)

PS:从P2到P3的距离是按照定义(交叉产品如何工作)到两条线所在的平行四边形区域的距离,我找到了一个链接来说明:
Cross product
归一化第3个向量将使距离等于P2。

答案 2 :(得分:0)

如果您有任何行 AB ,则任意点 C 将始终垂直于 AB IFF三角形 ABC 没有大于π/ 2的角度

这意味着 AB 上始终会有 D 点, CD AB 垂直