图形学:Transform矩阵(3维 2维) 平移,旋转,缩放

0. 简介

在图形学领域中,Transform矩阵(变换矩阵)是一种表示图形对象在二维或三维空间中的位置、方向和大小变化的数学工具。它们用于执行各种图形变换,如平移、旋转、缩放。Transform矩阵通常表示为一个二维或三维矩阵,具体形式取决于空间的维度。

0.1 二维变换矩阵

  • 在二维图形学中,通常使用3x3的矩阵表示变换,其中最后一行通常是[0, 0, 1],因为二维变换不影响z轴。这个矩阵可以表示平移、旋转、缩放和剪切。
  • 例如,一个简单的二维平移矩阵可以写成:
css 复制代码
   [ 1  0  tx ]
   [ 0  1  ty ]
   [ 0  0  1  ]

其中txty是平移的水平和垂直距离。

0.2 三维变换矩阵

  • 在三维图形学中,通常使用4x4的矩阵表示变换,其中最后一列通常是[0, 0, 0, 1]。这种矩阵可以表示平移、旋转、缩放以及更复杂的变换。
  • 一个简单的三维平移矩阵可以写成:
css 复制代码
   [ 1  0  0  tx ]
   [ 0  1  0  ty ]
   [ 0  0  1  tz ]
   [ 0  0  0  1  ]

其中txtytz是平移的xyz轴距离。

不管是二维变换矩阵还是三维变换矩阵,它的最后一行都是齐次坐标,通常是[0, ... , 1]用于处理齐次坐标,使得可以用矩阵乘法来同时处理旋转和平移。

1. 举个例子

1.1 平移

给定的初始 Transform 矩阵如下:

css 复制代码
[ 1  0  0  tx ]
[ 0  1  0  ty ]
[ 0  0  1  tz ]
[ 0  0  0  1  ]

希望在 x 轴增加 2 个单位,y 轴增加 1 个单位,z 轴减小 3 个单位。

1.1.1 计算过程

  1. 对 x 轴进行增加 2 个单位: 可以将 tx(原始平移量)增加 2 个单位。
  2. 对 y 轴进行增加 1 个单位: 将 ty(原始平移量)增加 1 个单位。
  3. 对 z 轴进行减小 3 个单位: 要使物体沿 z 轴负方向移动,需要将 tz 减小 3 个单位。

1.1.2 计算结果

css 复制代码
[ 1  0  0  tx + 2 ]
[ 0  1  0  ty + 1 ]
[ 0  0  1  tz - 3 ]
[ 0  0  0     1   ]

这个新的矩阵表示了对原始物体进行了所需的平移操作。

1.2 旋转

1.2.1 2维旋转矩阵

css 复制代码
```css
[ cos(θ)   -sin(θ) ]
[ sin(θ)    cos(θ) ]

1.2.1 3维旋转矩阵

  • 绕x轴旋转矩阵
css 复制代码
[ 1     0        0      0 ]
[ 0  cos(θ)   -sin(θ)   0 ]
[ 0  sin(θ)    cos(θ)   0 ]
[ 0     0        0      1 ]
  • z轴旋转
css 复制代码
[ cos(θ)  -sin(θ)   0   0 ]
[ sin(θ)   cos(θ)   0   0 ]
[    0       0      1   0 ]
[    0       0      0   1 ]
  • 绕y轴旋转
css 复制代码
[ cos(θ)   0   sin(θ)   0 ]
[    0     1      0     0 ]
[-sin(θ)   0   cos(θ)   0 ]
[    0     0      0     1 ]

原始的Transform矩阵T与旋转矩阵R相乘,得到新的Transform矩阵 T'
T' = T * R

1.3 缩放

1.3.1 缩放矩阵

css 复制代码
[ sx  0   0   0 ]
[ 0   sy  0   0 ]
[ 0   0   sz  0 ]
[ 0   0   0   1 ]

原始的Transform矩阵T与缩放矩阵S相乘,得到新的Transform矩阵 T'
T' = T * S

相关推荐
星沁城2 小时前
240. 搜索二维矩阵 II
java·线性代数·算法·leetcode·矩阵
幼儿园园霸柒柒15 小时前
第七章: 7.3求一个3*3的整型矩阵对角线元素之和
c语言·c++·算法·矩阵·c#·1024程序员节
星沁城20 小时前
73. 矩阵置零
java·算法·矩阵
jndingxin1 天前
OpenCV视觉分析之目标跟踪(11)计算两个图像之间的最佳变换矩阵函数findTransformECC的使用
opencv·目标跟踪·矩阵
pen-ai2 天前
【机器学习】21. Transformer: 最通俗易懂讲解
人工智能·神经网络·机器学习·矩阵·数据挖掘
会写代码的饭桶2 天前
【C++刷题】力扣-#566-重塑矩阵
c++·leetcode·矩阵
君臣Andy2 天前
【矩阵的大小和方向的分解】
线性代数·矩阵
勤劳的进取家2 天前
利用矩阵函数的导数公式求解一阶常系数微分方程组的解
线性代数
武子康2 天前
大数据-207 数据挖掘 机器学习理论 - 多重共线性 矩阵满秩 线性回归算法
大数据·人工智能·算法·决策树·机器学习·矩阵·数据挖掘
玛卡巴卡(努力学习版)2 天前
矩阵特殊打印方式
c++·算法·矩阵