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

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

二.算法分析

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

平移变换
| | [

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,433评论 0 2
  • 听说神不能无处不在 所以创造了妈妈到了妈妈的年龄 妈妈仍然是妈妈的守护神妈妈这个词 只是叫一叫 都会触动心弦 -1...
    却悔阅读 819评论 0 6
  • 白 墙 青 瓦 清 色 石 巷 墨 雨 清 香 黄 色 纸 伞 红 色 衣 裳 有 位 佳 人 ……
    张兮阅读 212评论 0 17
  • 那天,有人问我说,你有谈过恋爱吗? 我说,有。 那你最后怎么样了? 分手了 朋友说为什么? 因为我们不合适 那你心...
    入戏xzk阅读 291评论 0 0
  • 抽象类 在正常定义类前面加上关键字:abstract就成为了抽象类。抽象类无法被实例化,它可以用来规范一些类的共同...
    kangyiii阅读 519评论 0 2