二维图像的几何变化
二维图形基本几何变换是指相对于坐标原点和坐标轴进行的几何变换,包括平移(Translate)、比例(Scale)、旋转(Rotate)、反射(Reflect)和错切(shear)5种变换。物体变换物体变换是通过变换物体上每一个顶点实现的,因此以点的二维基本几何变换为例讲解二维图形基本几何变换矩阵。
平移变换:
比例变换:
对称变换:
旋转变换:
错切变换:
★复合矩阵编程实例:任一图形关于任意的反射轴y=a+bx的反射变换。
解:(1)将坐标原点平移到(0,a)处
(2)将反射轴(已平移后的直线)按顺时针方向旋转θ角,使之与x轴重合
(3)图形关于x轴的反射变换
(4)将反射轴逆时针旋转θ角
(5)恢复反射轴的原始位置
因此T=T₁R(-θ)T₂R(θ)T₃
具体代码如下:
#include <GL/glut.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
GLsizei winWidth = 600, winHeight = 600;/* 初始化显示窗口大小 */
GLfloat xwcMin = 0.0, xwcMax = 250.0; /* 设置世界坐标系的显示范围 */
GLfloat ywcMin = 0.0, ywcMax = 250.0;
class wcPt2D/* 定义二维点数据结构 */
{
public:
GLfloat x, y;
};
typedef GLfloat Matrix3x3[3][3];
Matrix3x3 matComposite; //定义复合矩阵
void init(void)
{
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);//设置窗口背景颜色为白色
}
void matrix3x3SetIdentity(Matrix3x3 m) /* 构建3*3的单位矩阵 */
{
GLint i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
m[i][j] = (i == j);
}
void matrix3x3PreMultiply(Matrix3x3 a, Matrix3x3 b