今天yogurt和大家分享的是计算机图形学里算是最基础的一个内容——二维空间里的简单矩形变换,变换方式包括平移、按比例缩放、旋转、对称和错切。下一章yogurt分享了《三维空间里的简单的长方体透视变换》http://www.cnblogs.com/to-sunshine/p/6501208.html,想要进一步学习图形的各种变换的同学可以去简单学习一下。那么,按照惯例yogurt又要给大家普及知识点啦~~
---------------------------------------------------------yogurt小课堂开课啦--------------------------------------------------
在线性代数里我们学过矩阵的基本运算,它在空间图形的变换中起着尤为关键的作用。我们把二维空间的每一个点的坐标记为(x,y,1),三维空间的每一个点的坐标记为(x,y,z,1);对于二维空间其变换矩阵是一个3X3的矩阵:;而三维空间的变换矩阵是一个4X4的矩阵:,具体的矩阵乘法怎么计算的在这里我就不讲啦。
对于二维空间来说,各种变换矩阵如下:
(1)平移:,有: * = ;
(2)按比例缩放:,有 * = ;
(3)旋转:,该点绕原点O逆时针旋转了θ角度。
(4)对称:
以X轴对称:,有 * = ;
以Y轴对称:,有 * = ;
以原点O对称:,有 * = ;
以Y=X对称:,有 * = ;
以Y=-X对称:,有 * = ;
(5)错切:,有 * = ;
-------------------------------------------------------------下课啦---------------------------------------------------------------
接下来,yogurt说一下程序的整体思路就直接上代码啦:
首先在主函数里,是用户依次输入原始矩形的四个点后,程序会将该原始矩形绘制出来;然后根据用户输入的变换需求,程序进入到不同的变换函数中。每一个变换函数会根据自己的变换性质提示用户输入控制变换的数据,然后程序生成对应的变换矩阵,将矩形的每一个点与变换矩阵做矩阵乘法即可得到每一个点在变换后的坐标。最后根据变换后的坐标画出变换后的矩阵即可。
代码如下:(我直接使用了我老师给的画图程序,"Graph.cpp”)