从平面方程计算变换矩阵

Compute the transformation matrix from plane equation

我正在尝试找到平行投影矩阵以将 3D 任意点投影到方程 ax+by+cz+d=0 的平面。我想将我的 3D 点投影到平面上,平行于平面的法线。我知道如何以经典方式进行操作,但我听说过齐次矩阵。我找到了很多关于透视投影矩阵的信息,但我有点迷茫,不知道如何将其应用于我的问题..

有什么帮助吗?

谢谢

虽然您将从 Ax + By + Cz + D = 0 形式的平面方程开始,但您首先要定义一个允许您使用平面参数方程的局部坐标系。

我们感兴趣的平面的参数方程需要您将其写成原点 Q(平面上的任意点)加上坐标 u 乘以某个向量的形式U 在平面上,加上坐标 v 乘以某个向量 V 也在平面内,但与 U 加上坐标 n 乘以法线不共线向量 N = (A,B,C).

Q + uU + vV + nN

如果你有这些 u,v,n 坐标,你将执行将 space 中的所有点投影到平面上的操作,只需将它们的 n 坐标设置为零并保持它们的 uv 坐标原样。

所以我们将从一个矩阵开始,该矩阵可以从 u,v,n 中的 local 坐标系(平面的局部)转换到 global 坐标系中的 x,y,z 坐标。这真的很简单,可以写成 4x4 齐次矩阵。

    [ Ux Vx Nx Qx ]
G = [ Uy Vy Ny Qy ]
    [ Uz Vz Nz Qz ]
    [ 0  0  0  1  ]

(提醒 Nx = A Ny = BNz = C。)

称此矩阵为 G(表示“全局”)。逆 G⁻¹ 将从全局坐标转换回局部坐标。

我们将 n 坐标压缩为零的矩阵 F(表示“展平”)很简单:

    [ 1 0 0 0 ]
F = [ 0 1 0 0 ]
    [ 0 0 0 0 ]
    [ 0 0 0 1 ]

现在我们可以构建矩阵 M,首先使用 G⁻¹ 从全局坐标转换为局部坐标,然后使用 F 将其展平到平面,然后从局部坐标转换到 G 的全局坐标。 (请记住矩阵的顺序是相反的,因为向量在右边。)

M = GFG⁻¹

这是一个 4x4 矩阵,由 G 乘以 F 乘以 G⁻¹

我跳过了两个步骤。

  1. 如何选择平面中的点Q
  2. 如何为 UV
  3. 选择向量

我们可以为平面的参数化定义选择任何原点,因为我们不会使用 uv 坐标。

要在平面中找到一个点 Q 作为原点,我们可以找到平面与 X、Y 或 Z 轴相交的位置。 (它 击中其中之一)。只需使用法向量的任何非零坐标。这就好比把点(0,0,z)代入平面方程Ax + By + Cz + D = 0求解z。根据哪个坐标不为零,存在三个可能合适的点。

  • (0, 0, -D/C)
  • (0, -D/B, 0)
  • (-D/A, 0, 0)

要为 UV 选择向量(它们实际上不必是单位向量),您只需选择平面中不共线的向量。

要选择一个 U 向量,我们可以取任何向量,然后取该向量与法线的叉积。结果将是平面中的矢量。我们只需要确保这个叉积不会导致零长度向量。也就是说,我们选择的“任意向量”一定不能与法线共线。我们可以select其中之一:

  • X̂ = (1, 0, 0)
  • Ŷ = (0, 1, 0)
  • Ẑ = (0, 0, 1)

例如:U = N × X̂

上述选择之一将适当地与法向量不共线。在继续之前检查叉积是否不是零长度。

然后,要获得 V 向量,我们只需取 V = N × U(叉积)。同样,这些向量中的 none 必须是单位向量,因为我们不关心 uv 坐标,也不关心 n 的大小] 坐标,因为无论如何我们都要将其压缩为零。

所以构建矩阵只需要几个步骤,但希望这概述了您为获得它而必须做的所有工作。然后你可以将任何点 P 乘以矩阵以将其投影到平面上。

例如:P' = MP

希望您对使用 4x4 矩阵足够自如,当然,提供您想要以同质形式变换的向量,这是一个坐标为 (x,y,z,1).[=71= 的 4 向量]