计算给定 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 123.