图形转换矩阵的内在原理
我们都知道一个点的坐标矩阵左乘一个矩阵就是对这个点进行位置变化的一种转换。
- 对称矩阵
【】对一个点P(1,2)移到与起始关于y轴对称的点P'(-1,2):
[-1 0,0 1][1,2] = [-1,2]
【】对一个点P(1,2)移到与起始关于x轴对称的点P'(1,-2):
[1 0,0 -1][1,2] = [1,-2]
即:R(对称)P(x,y) = P(x',y')
- 镜像矩阵
对一个点P(1,2)移到与起始关于原点对称的点P'(-1,-2):
[-1 0,0 -1][1,2] = [-1,-2]
即:R(镜像)P(x,y) = P(x',y')
- 水平倾斜(偏移)矩阵
令一矩形ABCD的坐标为:
A(0,0)、B(0,3)、C(5,3)、D(5,0)。
对该矩形ABCD进行水平倾斜转换:
[1 a,0 1][0,0] = [0 0]
[1 a,0 1][0,3] = [3a 3]
[1 a,0 1][5,3] = [5+3a 3]
[1 a,0 1][5,0] = [5 0]
对每个点进行转换,按照原序连接起来即是转换后的图形。
x偏移了a个y'。
y无变化。
即:R(水平倾斜)P(x,y) = P(x',y')
- 纵向倾斜(偏移)矩阵
令一矩形ABCD的坐标为:
A(0,0)、B(0,3)、C(5,3)、D(5,0)。
对该矩形ABCD进行纵向倾斜转换:
[1 0,b 1][0,0] = [0 0]
[1 0,b 1][0,3] = [0 3]
[1 0,b 1][5,3] = [5 5b+3]
[1 0,b 1][5,0] = [5 5b]
对每个点进行转换,按照原序连接起来即是转换后的图形。
x无变化。
y偏移了b个x'。
即:R(纵向倾斜)P(x,y) = P(x',y')
- 缩放矩阵
令一矩形ABCD的坐标为:
A(1,1)、B(1,3)、C(5,3)、D(5,1)。
对该矩形ABCD进行缩放转换:
[a 0,0 b][1,1] = [a b]
[a 0,0 b][1,3] = [a 3b]
[a 0,0 b][5,3] = [5a 3b]
[a 0,0 b][5,1] = [5a b]
对每个点进行转换,按照原序连接起来即是转换后的图形。
x缩放a倍;y缩放b倍。
即:R(缩放)P(x,y) = P(x',y')
- 旋转矩阵
令一矩形ABCD的坐标为:
A(0,0)、B(0,3)、C(5,3)、D(5,0)。
对该矩形ABCD进行缩放转换:
[cosθ -sinθ,sinθ cosθ][0,0] = [0 0]
[cosθ -sinθ,sinθ cosθ][0,3] = [-3sinθ 3cosθ]
[cosθ -sinθ,sinθ cosθ][5,3] = [5cosθ-3sinθ 5sinθ+3cosθ]
[cosθ -sinθ,sinθ cosθ][5,0] = [5cosθ 5sisθ]
对每个点进行转换,按照原序连接起来即是转换后的图形。
x = x'缩放cosθ倍然后偏移(-sinθ)个y'的量;
y = y'缩放cosθ倍然后偏移(sinθ)个x'的量;
即:R(旋转)P(x,y) = P(x',y')
无论是一维的点还是二维的面,亦或是三维立体,其转换都是对图形的每一个点进行左乘矩阵转换的。
并且无论多复杂的图形转换矩阵,都是以下一系列矩阵合成的。
[-1 0,0 -1]:镜像矩阵
[a 0,0 b]:Scale矩阵
[1 0,0 -1]:X轴对称矩阵
[-1 0,0 1]:Y轴对称矩阵
[1 a,0 1]:水平倾斜矩阵
[1 0,a 1]:纵向倾斜矩阵
[cosθ -sinθ,sinθ cosθ]:旋转矩阵
重点:
通过以上例子可以发现:
- 矩阵的对角线系数是沿着坐标轴对我们的对象进行缩放。
- 其他位置的系数是对该轴进行在其它轴上的偏移(扭曲)。
- 旋转矩阵是以上两条的合成体。
- 最基本的转换应该是:伸缩矩阵、倾斜(偏移)矩阵、对称矩阵、镜像矩阵。