gpt4 book ai didi

ios - 具有向量的 3D 点的正射投影

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:36:23 24 4
gpt4 key购买 nike

我有 3D 点,我需要将它们进行 2D 正交投影到由原点和法线 n 定义的平面上。这个的意思基本上是从顶部看点(给定垂直向量)。我该怎么做?

我的想法是:

  1. 将点 P 投影到 3D 平面上:P - P dot n * n
  2. 从相对于法线的“背面”看 3D 平面(不确定如何定义)
  3. 使用平面中各点的最大-最小坐标进行正射投影以定义剪裁

我正在使用 iOS。

最佳答案

一种方法是:

  1. 旋转坐标系,使感兴趣的平面位于 x-y 平面内,法向量 n 与 z 轴对齐
  2. 通过将点的 z 分量设置为 0
  3. 将点投影到 x-y 平面上

设置坐标转换

这个问题有无限多的解,因为我们总是可以在 x-y 平面上旋转一个解来得到另一个有效的解。

为了解决这个问题,让我们选择一个向量 v,它位于变换后与 x 轴对齐的平面中。任何向量都可以;让我们在坐标为 x=1y=0 的平面中获取向量。

因为我们的平面与原点相交,所以它的方程是:

x*n1 + y*n2 + z*n3 = 0
z = -(x*n1 + y*n2)/n3

代入x=1y=0后,我们看到

v = [1 0 -n1/n3]

我们还需要确保 v 是规范化的,所以设置

v = v/sqrt(v1*v1 + v2*v2 + v3*v3)

编辑:上述方法在n3=0 的情况下会失败。另一种找到 v 的方法是从我们的点集中取一个随机点 P1,它不是 n< 的标量倍数 并计算 v = P1 - P1 dot n * n,这是 P1 在平面上的投影。只需继续搜索您的观点,直到找到满足 (P1 dot n/norm(n)) != P1 的观点,这保证有效。

现在我们需要一个向量 u,它在转换后将与 y 轴对齐。我们从 nv 的叉积中得到:

u = n cross v

如果 nv 被归一化,那么 u 会自动归一化。

接下来,创建矩阵

M = [ v1 v2 v3 ]
[ u1 u2 u3 ]
[ n1 n2 n3 ]

转换点

现在给定一个 3×N 的点数组P,我们只需按照上面的两个步骤

  1. P_transformed = M*P
  2. P_plane = 将 P_transformed 的第三行设置为零

P_plane 的 x-y 坐标现在是平面中的二维坐标系。

如果需要返回 3D 空间坐标,只需使用 P_space = M_transpose*P_plane 进行逆向转换即可。

关于ios - 具有向量的 3D 点的正射投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30128892/

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