我无法理解如何做到这一点。我有一个由三个点定义的多边形。我在太空的某个地方也有一个观点。我想将空间中的某点移动到与多边形相同的平面上。据我所知,众所周知如何做到这一点。然而,我并不为人所熟知。
我找不到任何直接的算法或如何做到这一点的可靠解释。
我一直在看这个:http://www.odeion.org/pythagoras/pythag3d.html
但这会给我距离而不是顶点的距离。我可以看到,如果多边形限制为2d,那将是多么有用,但在我的情况下,它可能有任何方向。
不幸的是,我的数学相当薄弱,但我非常愿意学习。
答案 0 :(得分:10)
第一个有用的概念步骤是确定一个点是否与描述平面的多边形中的三个点位于同一平面上。这样做的一种方法是计算平面的法向量 - 称之为 n - 并使用 n 和三个点中的一个来定义平面(调用点 r 0 )。
计算平面的法向量可以通过多种方式完成(参见here)。对于这种情况,最方便的方法是获取平面中两个矢量之间的叉积(使用定义多边形中的点找到两个矢量)。
一旦你知道 n ,你就可以测试一个点 r 是否位于 n 和向量之间的点积的平面中( r 0 - r )。有关详细说明,请参阅here。
然后,您可以在任何点上使用正交投影来获得平面上的新点。
假设我有三点:
让我们首先创建一个与这些点创建的平面垂直的向量。让
然后
这两者的法向量为方便起见,我们将 n 标准化,现在 n = [0.9701425,0,-0.24253563]。
现在我们通过 n 定义平面,让 r 0 = p 1
让我们介绍一个不在平面上的新点 r (你可以通过取 n 和( r 0 - r ):
将 r “移动”在平面上的一种方法是将其“滑动”到法线向量下,直到它在平面上(这是正交投影)。这是通过确定 n 在向量 v 3 中的多少来完成的( r 0 < / em> - r )(称为scalar projection)。在这种情况下的标量投影产生新的向量 v 3m = [-0.88235294,-3,-3.52941176]。这是通过 v 3 - n * dot( n , v 3 <计算得出的/子> 的)。您可以验证它是否在平面中,因为它与 n 正交。
我们现在可以恢复这一点:
你可以确认这一点确实在飞机上: