GAMES 101——坐标变换

228 阅读2分钟

缩放

在2D平面中,缩放就是指长和宽乘以一个非0的值,大于0则是放大,小于0则是缩小,真是废话。。。两张图完事,第一张图是正常的长宽比例计算;第二张图则是通过矩阵的写法表示缩放。

平移

略过。。。没什么好写的,

注意:平移不是线性变换

旋转

如下图,旋转可以使用矩阵的方法进行表示:

假设图片的变长为a;右下的这点初始坐标是(a,0);旋转过后为(acosθ,asinθ);左上角初始坐标是(0,a),在旋转后得到坐标(-a*sinθ,acosθ);假设旋转矩阵为,坐标乘以旋转矩阵得到坐标,则,带入两个特殊角,求的解:

齐次坐标

在坐标变换中,旋转缩放都可以通过坐标乘以一个变换矩阵获得变换后的坐标,而平移则通过相加获取,如果要对一个坐标进行线性变换后再平移,通过矩阵的写法就是,那么问题来了,人都是懒惰的,怎么可以让一个矩阵直接表示这一系列的操作,不用相乘后再加减,想通过乘以一个矩阵后就能得到我们想要的坐标。

引入一个概念,齐次坐标,我们假定这是一个3*3的矩阵,并且这个矩阵第三行是固定的(0,0,1),第三列是 完整的矩阵表示为。而我们原始的其实坐标也加个数据1,表示为,当进行矩阵乘法时,我们发现,我们把在x轴方向平移的距离和在y轴方向平移的距离都加上了,完美的用一个矩阵得到了线性变换后再平移的坐标。

注意:齐次坐标表示的必须是先线性变换后平移,在执行了线性变换后再平移也叫仿射变换或者仿射映射;

用齐次坐标表示缩放、旋转、平移:

缩放:

旋转:

平移:

当我们使用一个矩阵表示我们的坐标变换时,如果想要根据变换后的坐标求到变换之前的坐标;我们可以对矩阵求逆,通过逆矩阵的表示的变换就可以返回到矩阵变换之前的位置。

\