从平面方程计算变换矩阵
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
坐标设置为零并保持它们的 u
和 v
坐标原样。
所以我们将从一个矩阵开始,该矩阵可以从 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 = B
和 Nz = 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⁻¹
。
我跳过了两个步骤。
- 如何选择平面中的点
Q
。
- 如何为
U
和 V
选择向量
我们可以为平面的参数化定义选择任何原点,因为我们不会使用 u
或 v
坐标。
要在平面中找到一个点 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)
要为 U
和 V
选择向量(它们实际上不必是单位向量),您只需选择平面中不共线的向量。
要选择一个 U
向量,我们可以取任何向量,然后取该向量与法线的叉积。结果将是平面中的矢量。我们只需要确保这个叉积不会导致零长度向量。也就是说,我们选择的“任意向量”一定不能与法线共线。我们可以select其中之一:
X̂ = (1, 0, 0)
Ŷ = (0, 1, 0)
Ẑ = (0, 0, 1)
例如:U = N × X̂
上述选择之一将适当地与法向量不共线。在继续之前检查叉积是否不是零长度。
然后,要获得 V
向量,我们只需取 V = N × U
(叉积)。同样,这些向量中的 none 必须是单位向量,因为我们不关心 u
和 v
坐标,也不关心 n
的大小] 坐标,因为无论如何我们都要将其压缩为零。
所以构建矩阵只需要几个步骤,但希望这概述了您为获得它而必须做的所有工作。然后你可以将任何点 P
乘以矩阵以将其投影到平面上。
例如:P' = MP
希望您对使用 4x4 矩阵足够自如,当然,提供您想要以同质形式变换的向量,这是一个坐标为 (x,y,z,1)
.[=71= 的 4 向量]
我正在尝试找到平行投影矩阵以将 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
坐标设置为零并保持它们的 u
和 v
坐标原样。
所以我们将从一个矩阵开始,该矩阵可以从 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 = B
和 Nz = 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⁻¹
。
我跳过了两个步骤。
- 如何选择平面中的点
Q
。 - 如何为
U
和V
选择向量
我们可以为平面的参数化定义选择任何原点,因为我们不会使用 u
或 v
坐标。
要在平面中找到一个点 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)
要为 U
和 V
选择向量(它们实际上不必是单位向量),您只需选择平面中不共线的向量。
要选择一个 U
向量,我们可以取任何向量,然后取该向量与法线的叉积。结果将是平面中的矢量。我们只需要确保这个叉积不会导致零长度向量。也就是说,我们选择的“任意向量”一定不能与法线共线。我们可以select其中之一:
X̂ = (1, 0, 0)
Ŷ = (0, 1, 0)
Ẑ = (0, 0, 1)
例如:U = N × X̂
上述选择之一将适当地与法向量不共线。在继续之前检查叉积是否不是零长度。
然后,要获得 V
向量,我们只需取 V = N × U
(叉积)。同样,这些向量中的 none 必须是单位向量,因为我们不关心 u
和 v
坐标,也不关心 n
的大小] 坐标,因为无论如何我们都要将其压缩为零。
所以构建矩阵只需要几个步骤,但希望这概述了您为获得它而必须做的所有工作。然后你可以将任何点 P
乘以矩阵以将其投影到平面上。
例如:P' = MP
希望您对使用 4x4 矩阵足够自如,当然,提供您想要以同质形式变换的向量,这是一个坐标为 (x,y,z,1)
.[=71= 的 4 向量]