matrix - 计算给定 4 个角的 3d 平面的变换矩阵
问题描述
我在世界原点有一个 3d 平面,它与世界 X/Y 平面(面向 Z 轴)对齐。然后,我有四个 3d 顶点位置,用于将新平面转换为 3d 空间中的某个位置。
两个平面对于所有 4 个顶点具有相同的缠绕顺序。
我保证 4 个角是平面的并且没有倾斜(平面可能仍然在 x/y 轴上单独缩放)。
给定该平面的最后 4 个角,如何创建 4x4 变换矩阵?
解决方案
假设飞机看起来像这样:
构建平面的“局部基础”,具有:
- X轴平行于AD/BC
- Y轴平行于AB/CD
- Z轴平行于法线
- 原点 O 在四边形的中心
变换矩阵可以分解为3 个分量:
1 – 规模
由于原始四边形的尺寸为 1x1 单位,因此沿 X 和 Y 局部轴的比例因子只是边长,即分别为 AD 和 AB 的长度。由于四边形是平面的,因此忽略 Z 比例因子。
因此,缩放分量由下式给出:
2 - 旋转
旋转分量可以直接从局部基准轴 X、Y、Z 构建;每个向量(归一化)是矩阵的对应列。
因此旋转分量由下式给出:
3 - 翻译
这是最简单的一个;平移向量就是四边形中心 O 的绝对坐标,等于矩阵的最后一列。
因此,平移分量由下式给出:
最终矩阵可以通过按以下顺序将上述相乘得到:
即按1 ⇨ 2 ⇨ 3的顺序应用组件。
推荐阅读
- ios - 如何在应用程序内部以编程方式更改语言和更新内容,而不是通过电话?IOS迅捷4
- keras - [1] 在 model.evaluate(X, Y)[1] 中是什么意思
- css - 如何更改侧边栏的背景?
- wix - 如何用 Wix+Burn 做动态命名实例
- swift - AVPlayer 和 AVAssetReader 产生具有奇数宽度 ProRes422 视频的伪影
- github - github 操作找不到 package.json
- javascript - JS xlsx-populate 解析密码保护的excel文件数据
- c - 更好地确定保存的 id
- sql - SQL Server:使用转置选择不同的数据
- visual-studio-code - 如何在 vs code 或 jupyter notebook 中为 julia 输入乳胶样式的变量