Linear transforms and translation

线性变换Linear Transforms

缩放Scale

(xy)=(s00s)(xy)

UniformScale

非均匀缩放 Scale (Non-Uniform)

(xy)=(s100s2)(xy)

NonUniformScale

反射Reflection

(xy)=(1001)(xy)

Reflection

错切Shear

(xy)=(1a01)(xy)

ShearMatrix

Shear

旋转Rotate

Rθ=(cosθsinθsinθcosθ)

Rotation

**平移Translation

平移

平移不是一个线性变换,它是一个仿射变换,因为线性变换其中的一个特性就是变换前后坐标系的原点保持不变,显然平移不满足这个特性;或者还可以说我们无法用一个矩阵去描述这个变换,不像之前的旋转缩放等变换我们都可以用一个矩阵就可以描述。再从另外一个角度来描述就是我们"无法通过只使用乘法来描述这个变换"

我们假设一个场景,在一维情景下,我们有一个数轴,还有三个点在

a=1, b=2, c=3

处,我们想要将这三个点往右移动一个单位,也就是

a=a+1; b=b+1, c=c+1

这是对这三个点都使用"+1"这个一个同样的操作我们做到了,那么我们可不可以使用乘法呢?我们观察到,a=2, a=1,要想使用乘法就需要乘以2,因为之间相差2倍,也就是a=2a,但是对于另外两个点,2b2c则不是我们想要的结果,问题我们是否可以找到一个像"+1"这么一个统一又优美的操作,使乘法也可以作用于变换呢?答案是,我们暂时找不到

所以,Translation我们需要使用这种方式来表示

(xy)=(abcd)(xy)+(txty)

可这样表示后面会多出

(txty)

使得偏偏平移变换与其它的变换不同,那有没有其它的方法呢?答案是: homogenous_coordinates 齐次坐标

变换复合

complex_transformation变换复合,很容易就理解

TR=(101010001)(cos45sin450sin45cos450001)

Here[1]

3维下

(xyz1)=(100tx010ty001tz0001)(xyz1)=(x+txy+tyz+tz1)
  1. For math render, we use \mathbf{T}\_{x} instead of \mathbf{T}_{x} , But some doesn't support. ↩︎