计算给定 4 个角的 3d 平面的变换矩阵
Calculate transformation matrix of 3d plane given 4 corners
我在世界原点有一个 3d 平面,它与世界 X/Y 平面对齐(面向 Z 轴)。然后我将一个新平面的四个 3d 顶点位置转换为 3d space 中的某个位置。
两个平面的所有 4 个顶点的缠绕顺序相同。
我可以保证 4 个角是平面的并且没有倾斜(平面可能仍然在 x/y 轴上单独缩放)。
如何根据该平面的最后 4 个角创建 4x4 变换矩阵?
假设飞机是这样的:
构造一个"local basis"的平面,具有:
- X轴平行于AD/BC
- Y轴平行于AB/CD
- Z 轴平行于法线
- 四边形中心的原点 O
变换矩阵可以分解成3个分量:
1 – 规模
由于原始四边形的尺寸为 1x1 单位,因此沿 X 和 Y 局部轴的比例因子只是边长,即分别为 AD 和 AB 的长度。忽略 Z 比例因子,因为四边形是平面的。
因此缩放分量由下式给出:
2 - 旋转
旋转分量可以直接从局部基轴X、Y、Z构造;每个向量(归一化)是矩阵的对应列。
因此旋转分量由下式给出:
3 - 翻译
这是最简单的一个;平移向量只是四边形中心 O 的绝对坐标,等于矩阵的最后一列。
因此平移分量由下式给出:
The final matrix can be obtained by multiplying the above in the following order:
i.e. the components are applied in the order 1 ⇨ 2 ⇨ 3.
我在世界原点有一个 3d 平面,它与世界 X/Y 平面对齐(面向 Z 轴)。然后我将一个新平面的四个 3d 顶点位置转换为 3d space 中的某个位置。
两个平面的所有 4 个顶点的缠绕顺序相同。
我可以保证 4 个角是平面的并且没有倾斜(平面可能仍然在 x/y 轴上单独缩放)。
如何根据该平面的最后 4 个角创建 4x4 变换矩阵?
假设飞机是这样的:
构造一个"local basis"的平面,具有:
- X轴平行于AD/BC
- Y轴平行于AB/CD
- Z 轴平行于法线
- 四边形中心的原点 O
变换矩阵可以分解成3个分量:
1 – 规模
由于原始四边形的尺寸为 1x1 单位,因此沿 X 和 Y 局部轴的比例因子只是边长,即分别为 AD 和 AB 的长度。忽略 Z 比例因子,因为四边形是平面的。
因此缩放分量由下式给出:
2 - 旋转
旋转分量可以直接从局部基轴X、Y、Z构造;每个向量(归一化)是矩阵的对应列。
因此旋转分量由下式给出:
3 - 翻译
这是最简单的一个;平移向量只是四边形中心 O 的绝对坐标,等于矩阵的最后一列。
因此平移分量由下式给出:
The final matrix can be obtained by multiplying the above in the following order:
i.e. the components are applied in the order 1 ⇨ 2 ⇨ 3.