gpt4 book ai didi

3d - 将点投影到与多边形相同的平面上

转载 作者:行者123 更新时间:2023-12-01 08:36:48 24 4
gpt4 key购买 nike

我很难理解如何做到这一点。我有一个由三个点定义的多边形。我在太空的某个地方也有一个观点。我想将空间中的某个点移动到与多边形相同的平面上。据我所知,如何做到这一点是众所周知的。然而,它并不为我所熟知。

我找不到任何直接的算法或关于如何完成的可靠解释。

我一直在看这个:http://www.odeion.org/pythagoras/pythag3d.html

但这会给我距离而不是顶点的点。我可以看到如果多边形仅限于 2d 会有什么用处,但在我的情况下,它可能有任何方向。

不幸的是,我的数学相当薄弱,但我非常愿意学习。

最佳答案

第一个有用的概念步骤是有一种方法来确定一个点是否与描述平面的多边形中的三个点位于同一平面上。这样做的一种方法是计算平面的法向向量——称为 n——并使用 n 和三个点之一(称为点 r0)定义平面。

计算平面的法向量可以通过多种方式完成(参见 here)。对于这种情况,最方便的方法是取平面内两个向量的叉积(使用定义多边形中的点找到两个向量)。

知道 n 后,您就可以测试点 r 是否位于 n 与向量 (r0 - r) 之间的点积的平面中。见 here更多解释。

然后您可以在任何点上使用正交投影来获得平面上的新点。

例子

假设我有三点:

  • p1: [1, 1, 1]
  • p2: [1.5, 6, 3]
  • p3: [2, -1, 5]。

  • 让我们首先创建一个垂直于由这些点创建的平面的向量。让
  • v1 = p1 - p2 = [-0.5, -5, -2]
  • v2 = p1 - p3 = [-1, 2, -4]。

  • 那么这两个的法向量是
  • n = v1 x v2 = [24, 0, -6]。

  • 为了方便起见,让我们对 n 进行归一化,所以现在 n = [0.9701425, 0, -0.24253563]。

    现在我们用 n 定义平面,让 r0 = p1。

    让我们引入一个不在平面上的新点 r(您可以通过取 n 和 (r0 - r) 的点积来验证:
  • r = [4, 4, 4]

  • 将 r“移动”到平面上的一种方法是将它“滑动”到法向量上,直到它在平面上(这是正交投影)。这是通过确定向量 v3 = (r0 - r) (称为 scalar projection )中有多少 n 来完成的。在这种情况下,标量投影产生新的向量 v3m = [-0.88235294, -3, -3.52941176]。这是由 v3 - n*dot(n, v3) 计算的。您可以验证这是在平面中,因为它与 n 正交。

    我们现在可以恢复点:
  • rm = r0 - v3m = [1.88235294, 4, 4.52941176]。

  • 你可以验证这个点确实在飞机上:
  • 点(r0 - rm,n)= 0。
  • 关于3d - 将点投影到与多边形相同的平面上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8886603/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com