2009-10-23 140 views
3

如何在3D平面中找到点与线的最小垂直距离?3D平面算法中点与线的最小垂直距离

请给我逻辑,我会尝试对自己编码。

请让我知道如何用坐标系下的x,y,z来表示它。

我发现从编码的角度来看,找到合适的解决方案很容易,有点困难。在线解决方案有点生疏的理解。所以请帮助我。

请注意线是根据三维空间方程给出的。

+0

你在哪个表单中有rect表达式? – Lopoc 2009-10-23 21:44:42

+0

以x,y,z格式表示。 – Test 2009-10-23 21:51:27

+0

一条线不是由三维空间中的一个方程确定的。你的意思是到飞机的距离?否则,该行是如何指定的? – UncleO 2009-10-23 21:56:43

回答

2

对于无限长线,最小距离是线段与通过从线开始到结束点的无限长线成直角的长度。垂线的方向由垂直于平面的单位与沿着该线的单位矢量的叉积给出,垂线的垂足由第一条线的方程的同时求解给出,点。点之间的距离是你所追求的。

对于一条有限线,只有当垂线的脚位于线段上时,才是一种解决方案;否则它是该点与该段的任一端之间的距离中较短的一个。

13

给定点A和直线,在直线(B和C)上选择两个不同的点。使用Heron's formula计算三角形ABC的面积。将区域乘以2,并用[BC]的长度除。你有你需要的结果。

+0

它是否适用于3d平面。 – Test 2009-10-23 21:50:01

+0

三点始终组成一架飞机。三角形总是一个三角形。 @Pavel:顺便说一句好话。 – 2009-10-23 21:56:58

+0

如果它们不是全部共线的,则三个点形成一个平面。 – JimN 2009-10-23 22:05:38

1

你说这条线是以3D的方程给出的,但真正的平面是由方程给出的。并且由于该线据说位于3D平面中,可能是由另一个等式给出的,该线实际上是两个平面的交点。

要获取线的方向矢量,请将法线的叉积乘以两个平面。如果你使用Pavel的方法,你不需要这个。

为了得到一个点,为x选择一些值,比如说x = 0。然后在插入该值后求解y和z的两个方程。要找到在Pavel方法中使用的另一个点,请将x设置为其他值,比如x = 1,然后再次解决该问题。

如果该行的方向错误(垂直于x轴),则x可能是一个固定值。在这种情况下,尝试将y设置为两个固定值。如果仍然不起作用,请尝试z。另外,请检查原始平面不平行,以便确实存在交叉线。

要解决没有Pavel方法的问题,用由给定点和线上找到的点组成的向量交叉线的方向。现在将这个结果与行方向交叉得到一个新的向量。使用原始点将该矢量点和线上的点再次相加。采取差异,并除以矢量的长度。

+0

+1作为线的心理图像作为3D平面。我被卡住了,直到我知道他们的交叉点实际上是这条线。 – karmanaut 2013-03-16 05:30:33

相关问题