目录

  • 1. Why Transformation?
  • 2. 2D上的变换(通过矩阵进行变换)
  • 2.1 缩放(scaling)
  • 2.2 剪切(shearing)
  • 2.3 旋转
  • 2.4 翻转
  • 3. 平移变换(仿射变换)
  • 4. 齐次坐标
  • 定义
  • 5.复合变换
  • 以给定点为旋转中心?
  • 6. 逆变换
  • 7. 3D空间中的变换
  • 旋转
  • 绕x,y,z轴旋转。
  • 绕任意轴旋转


1. Why Transformation?

Modeling:

  • 描述摄像机的运动(最重要的是位置的移动);
  • 一个高难度运动动作(比如机器人的一个旋转动作)是由一种或多种变换组合而成
    Viewing :3D到2D的投影变换

2. 2D上的变换(通过矩阵进行变换)

2.1 缩放(scaling)

缩放变换是一种沿着坐标轴变换的一种变换方式。

缩放矩阵定义:其中sx表示横坐标x缩放的比例; sy表示纵坐标y缩放的比例

android 矩阵 缩放为何要平移 矩阵缩放变换_缩放


简单示例如下:

android 矩阵 缩放为何要平移 矩阵缩放变换_缩放_02

2.2 剪切(shearing)

shear变换直观理解就是把当前2维图像的一边进行固定,然后向某个方向拉伸,相较于缩放,剪切会改变原先图像的具体样貌

切变矩阵如下:(左边是"拉伸"x轴,右边"拉伸"y轴)

android 矩阵 缩放为何要平移 矩阵缩放变换_数学_03

以拉伸x轴为例,即水平方向的切变

android 矩阵 缩放为何要平移 矩阵缩放变换_缩放_04

2.3 旋转

在平面内的旋转,规定:
(1) 默认旋转时是绕着原点进行旋转
(2) 默认旋转时是按着逆时针旋转

对于旋转,其实图像上每个点经过的变化是相同的,所以在推导时,我们可以选用图像的几个特殊顶点来进行推导,有助于快速理解。

旋转矩阵定义:

android 矩阵 缩放为何要平移 矩阵缩放变换_缩放_05


如下图:

android 矩阵 缩放为何要平移 矩阵缩放变换_齐次坐标_06

2.4 翻转

  • 水平翻转:图像沿着y轴对称
  • 垂直翻转:图像沿着x轴对称

以水平翻转为例:

android 矩阵 缩放为何要平移 矩阵缩放变换_android 矩阵 缩放为何要平移_07

以上所有转换都是线性转换,即变换后的图像中的坐标是变换前图像坐标的一种线性组合。写成矩阵后,系数所组成的矩阵便是变换矩阵。

android 矩阵 缩放为何要平移 矩阵缩放变换_缩放_08

3. 平移变换(仿射变换)

平移变换是一类特殊的变换。它不属于线性变换,不能再通过一个 变换矩阵 来实现变换。

android 矩阵 缩放为何要平移 矩阵缩放变换_齐次坐标_09


android 矩阵 缩放为何要平移 矩阵缩放变换_平移变换_10

4. 齐次坐标

为什么要引入齐次坐标?

由上面可知,平移变换与其他变换的形式不同,那为了统一所有变换形式,引入齐次坐标概念

android 矩阵 缩放为何要平移 矩阵缩放变换_缩放_11

定义

齐次坐标就是将一个原本是n维的向量用一个n+1维向量来表示。

android 矩阵 缩放为何要平移 矩阵缩放变换_齐次坐标_12


注意其中一个点和一个向量定义的区别:最后一个维度添加的数不同。

那如何选择的1或0?

android 矩阵 缩放为何要平移 矩阵缩放变换_缩放_13

我们用三维的向量来表示我们的2维图像变换的操作:

对于平移(仿射)变换:

android 矩阵 缩放为何要平移 矩阵缩放变换_缩放_14


对于其他变换:

其中,tx,ty 都为0.

android 矩阵 缩放为何要平移 矩阵缩放变换_缩放_15


android 矩阵 缩放为何要平移 矩阵缩放变换_缩放_16

5.复合变换

把仿射变换和线性变换用齐次坐标统一之后,很多复杂的变换,我们就可以拆分成很多步简单的变换来一步一步实现。
注意:变换的顺序是非常重要的,变换的顺序决定了变换矩阵相乘的顺序,因此得到不一样的结果。
注意每次变换时变换矩阵都是添加在原矩阵的左边

android 矩阵 缩放为何要平移 矩阵缩放变换_android 矩阵 缩放为何要平移_17


先平移,再旋转(默认以原点为旋转中心)的结果如下:

android 矩阵 缩放为何要平移 矩阵缩放变换_缩放_18


先旋转,再平移的结果如下:

android 矩阵 缩放为何要平移 矩阵缩放变换_缩放_19

以给定点为旋转中心?

默认情况下旋转变换都是以原点为中心,那以一个给定点为中心该怎么做?

android 矩阵 缩放为何要平移 矩阵缩放变换_数学_20

6. 逆变换

上述变换的反操作

android 矩阵 缩放为何要平移 矩阵缩放变换_平移变换_21

7. 3D空间中的变换

类比2D空间的变换

android 矩阵 缩放为何要平移 矩阵缩放变换_齐次坐标_22


android 矩阵 缩放为何要平移 矩阵缩放变换_平移变换_23

旋转

绕x,y,z轴旋转。

注意以y轴进行旋转时的操作

android 矩阵 缩放为何要平移 矩阵缩放变换_平移变换_24

绕任意轴旋转

android 矩阵 缩放为何要平移 矩阵缩放变换_平移变换_25