缩放
在2D平面中,缩放就是指长和宽乘以一个非0的值,大于0则是放大,小于0则是缩小,真是废话。。。两张图完事,第一张图是正常的长宽比例计算;第二张图则是通过矩阵的写法表示缩放。
平移
略过。。。没什么好写的,
注意:平移不是线性变换
旋转
如下图,旋转可以使用矩阵的方法进行表示:
假设图片的变长为a;右下的这点初始坐标是(a,0);旋转过后为(acosθ,asinθ);左上角初始坐标是(0,a),在旋转后得到坐标(-a*sinθ,acosθ);假设旋转矩阵为,坐标
乘以旋转矩阵得到坐标
,则
,带入两个特殊角,求的解:
。
齐次坐标
在坐标变换中,旋转缩放都可以通过坐标乘以一个变换矩阵获得变换后的坐标,而平移则通过相加获取,如果要对一个坐标进行线性变换后再平移,通过矩阵的写法就是,那么问题来了,人都是懒惰的,怎么可以让一个矩阵直接表示这一系列的操作,不用相乘后再加减,想通过乘以一个矩阵后就能得到我们想要的坐标。
引入一个概念,齐次坐标,我们假定这是一个3*3的矩阵,并且这个矩阵第三行是固定的(0,0,1),第三列是
完整的矩阵表示为
。而我们原始的其实坐标也加个数据1,表示为
,当进行矩阵乘法时,我们发现
,我们把在x轴方向平移的距离和在y轴方向平移的距离都加上了,完美的用一个矩阵得到了线性变换后再平移的坐标。
注意:齐次坐标表示的必须是先线性变换后平移,在执行了线性变换后再平移也叫仿射变换或者仿射映射;
用齐次坐标表示缩放、旋转、平移:
缩放:
旋转:
平移:
当我们使用一个矩阵表示我们的坐标变换时,如果想要根据变换后的坐标求到变换之前的坐标;我们可以对矩阵求逆,通过逆矩阵的表示的变换就可以返回到矩阵变换之前的位置。
\