计算机图形学 胡事民 数字图像处理

实验五、二维图形的几何变换

2018-08-01  本文已影响20人  wangchuang2017

一.作业名称:二维图形的几何变换

二.算法分析

以下实现了二维图形的空间平移、比例缩放、旋转、对称、转位。

平移变换
| | [

image.png

旋转变换

image.png

放缩变换

image.png

l 平移变换只改变图形的位置,不改变图形的大小。

l 旋转变换不改变图形的形状

l 放缩变换引起图形形状的变化。

复合变换

的结果与变换的顺序有关(矩阵乘法不可交换)

三.算法实现

1.平移变换

void CMyView::OnTranslation()

{

// TODO: Add your command handler code here

int i,j;

CMyClass my1; //构造新的CMyClass对象

//将图形变换矩阵清零

for ( i=1;i<=3;++i)

{

for ( j=1;j<=3;++j)

my1.A[i][j]=0;

}

//给图形变换矩阵赋值

my1.A[1][1]=1;

my1.A[2][2]=1;

my1.A[3][1]=15;

my1.A[3][2]=45;

my1.A[3][3]=1;

RedrawWindow();

my1. Display ();

}

2.旋转变换

void CMyView::OnRotation()

{

// TODO: Add your command handler code here

int i,j;

CMyClass my1; //构造新的CMyClass对象

//将图形变换矩阵清零

for ( i=1;i<=3;++i)

{

for ( j=1;j<=3;++j)

my1.A[i][j]=0;

}

//给图形变换矩阵赋值

my1.A[1][1]=cos(PI*60);//旋转60度

my1.A[1][2]=sin(PI*60);

my1.A[2][1]=-sin(PI*60);

my1.A[2][2]=cos(PI*60);

my1.A[3][3]=1;

RedrawWindow();

my1. Display ();

}

3.缩放变换

void CMyView::OnScaling()

{

// TODO: Add your command handler code here

int i,j;

CMyClass my1; //构造新的CMyClass对象

//将图形变换矩阵清零

for ( i=1;i<=3;++i)

{

for ( j=1;j<=3;++j)

my1.A[i][j]=0;

}

//给图形变换矩阵赋值

my1.A[1][1]=5;

my1.A[2][2]=2;

my1.A[3][3]=1;

RedrawWindow();

my1. Display ();

}

4.关于x轴对称

void CMyView::OnMirrorX()

{

// TODO: Add your command handler code here

int i,j;

CMyClass my1; //构造新的CMyClass对象

//将图形变换矩阵清零

for ( i=1;i<=3;++i)

{

for ( j=1;j<=3;++j)

my1.A[i][j]=0;

}

//给图形变换矩阵赋值

my1.A[1][1]=1;

my1.A[2][2]=-1;

my1.A[3][3]=1;

RedrawWindow();

my1. Display ();

}

5关于y轴对称

void CMyView::OnMirrorY()

{

// TODO: Add your command handler code here

int i,j;

CMyClass my1; //构造新的CMyClass对象

//将图形变换矩阵清零

for ( i=1;i<=3;++i)

{

for ( j=1;j<=3;++j)

my1.A[i][j]=0;

}

//给图形变换矩阵赋值

my1.A[1][1]=-1;

my1.A[2][2]=1;

my1.A[3][3]=1;

RedrawWindow();

my1. Display ();

}

6.关于原点对称

void CMyView::OnMirrorO()

{

// TODO: Add your command handler code here

int i,j;

CMyClass my1; //构造新的CMyClass对象

//将图形变换矩阵清零

for ( i=1;i<=3;++i)

{

for ( j=1;j<=3;++j)

my1.A[i][j]=0;

}

//给图形变换矩阵赋值

my1.A[1][1]=-1;

my1.A[2][2]=-1;

my1.A[3][3]=1;

RedrawWindow();

my1. Display ();

}

四.效果截图

(一)三角形

Image.png

1.****平移变换

Image.png

2.****旋转变换

Image.png

3.****缩放变换

Image.png

4.****对称

(1)****关于****X****轴对称

Image.png

(2)****关于****Y****轴对称

Image.png

(3)****关于原点对称

Image.png

(二)四边形

将一四边形以原点为中心,以150为间隔旋转。

要求: 写出程序框图,程序,及运行结果.

Image.png
上一篇 下一篇

猜你喜欢

热点阅读