基于Matlab的交互式图形变换教学方法研究

2019-06-12 01:13刘晓婷
实验室研究与探索 2019年5期
关键词:主程序调用轴对称

朱 斌,刘晓婷,曲 孟

(长安大学 公路养护装备国家工程实验室,西安 710064)

0 引 言

图形变换是将几何图形按照某种法则或规律变成另一种几何图形的过程,它是CAD/CAM和计算机图形学等课程的重要教学内容[1-4],也是学生学习和理解CAD基本原理的基础,其算法具有广泛的工业应用[5-8]。该内容兼顾理论性和实践性,在传统的图形变换教学中,矩阵运算是其主要内容,教师在授课过程中经常需要把大量的时间花费在矩阵的各种推导和计算上,而对图形变换的原理和变换过程无法直观演示,缺少必要的软件实验环节,学生难以领会和掌握图形变换的算法和实现技巧[9]。

为使学生深入理解图形变换的基本原理和实现方法,课题组经多年教学探索和实践,提出了基于模块化程序设计思想和Matlab软件的图形变换教学方法,并开发了相应的Matlab程序,该程序可直观、形象地展示平移、旋转、比例等基本几何变换和更为复杂的复合变换。学生通过上机实验,可交互式完成各种图形变换。此外,在此基础上学生还可以结合自己的学习兴趣进行多种拓展练习,形成理论与实践互动。实践表明,该方法的应用有助于提高学习积极性、培养学习兴趣,深入理解和掌握图形变换的基本原理和实现方法。

1 Matlab图形变换原理与流程

Matlab是美国MathWorks公司于1984年推出的商业数学软件,是matrix&laboratory两个词的组合,即矩阵实验室。该软件具有强大的数值分析、矩阵运算等功能,已成为大学教学和科研中必不可少的工具之一[10-11]。采用Matlab软件实现图形变换的流程介绍如下。

1.1 图形变换基本原理

图形变换主要包括二维图形几何变换和三维图形几何变换。变换的图形可视为点的集合,变换的实质是对组成图形的各个顶点进行坐标变换[1]。二维图形的变换过程可表示为[9]:

(x,y,1)T=(x′,y′,1)

(1)

式中:(x,y,1)为变换前点的坐标;(x′,y′,1)为变换后点的新坐标;T为基本变换矩阵。

由式(1)可以看出,图形变换的关键在于变换矩阵的构造,二维图形的基本几何变换可通过图形的顶点坐标与基本变换矩阵乘积得到;而复合变换可由若干个简单的基本几何变换组合得到。其中,基本几何变换的类型主要有:比例变换、对称变换、平移变换、旋转变换等[12],如表1所示。

表1 二维图形的基本几何变换矩阵

上述变换矩阵可分为两类:①变换矩阵中不包含变换参数,即变换过程中不需要用户输入参数,如:对称变换;②变换矩阵中包含变换参数,即在变换过程中需要用户输入必要的变换参数,如:比例变换中的比例因子、旋转变换的旋转角度、平移变换中的平移量等。依据上述变换矩阵的形式,采用模块化程序设计思想,可将基本变换矩阵构造为相应的Matlab函数,在函数内部进行变换计算,程序变更也只在函数内部进行,不影响其他模块,保证程序具有一定的灵活性和开放性,有助于学生在此基础上进行各种拓展学习。

1.2 基本变换矩阵函数的构造

按照模块化设计思想,对不需要输入参数的对称变换可定义为Matlab的一个无参数函数,如对x轴对称的变换函数可定义为:

!X轴对称变换函数 Transformation_X.m

function Transformation_X()

global Points;!定义全局坐标点集矩阵;

Tsx=zeros(3,3);!定义3×3全0矩阵;

Tsx(1,1)=1;!设置(1,1)元素为1;

Tsx(2,2)=-1;!设置(2,2)元素为-1;

Tsx(3,3)=1;!设置(3,3)元素为1;

Points=(Points'*Tsx)';

!原点集与变换矩阵相乘得到新点集;

对于需要输入参数的变换,同样可在Matlab中定义为一个无参数函数,在调用该函数时,弹出提示,要求用户以交互的方式输入相应的参数,如下面的旋转变换函数:

!旋转变换函数 Transformation_R.m

function Transformation_R()

global Points;!定义全局坐标点集矩阵;

a=input('请输入旋转角度(逆时针):');

!弹出提示,输入后赋值给变量a;

T2=zeros(3,3);

T2(1,1)=cosd(a);

T2(1,2)=sind(a);

T2(2,1)=-sind(a);

T2(2,2)=cosd(a);

T2(3,3)=1;

Points=(Points'*T2)';

! 原点集与变换矩阵相乘得到新点集;

其他基本变换可以采用相同方式定义为相应的函数,并放在指定目录下供主程序调用。

1.3 图形基本变换的实现

将基本变换矩阵定义为Matlab函数后可实现各种基本变换。以三角形的基本几何变换为例,程序的处理流程如图1所示。

图1 图形基本变换处理流程

其中,画三角形函数为根据3个点的坐标值画出相应的三角形,变换前和变换后均调用该函数,定义好后同样将该函数放到指定的目录下供主程序调用。画三角形函数为:

!画三角形函数 Draw3Points.m

function Draw3Points(x1,x2,x3,y1,y2,y3)

line([x1,x2],[y1,y2]);!连接点1和点2;

line([x1,x3],[y1,y3]);!连接点1和点3;

line([x2,x3],[y2,y3]);!连接点2和点3;

text(x1,y1,'A');!标注点1为A;

text(x2,y2,'B');!标注点2为B;

text(x3,y3,'C');!标注点3为C;

在此基础上,学生可根据需要进行各种拓展练习,自行设计出任意的图形,如:T字形、任意四边形等,并写成函数形式,在主程序中直接调用。

1.4 复合变换的实现

CAD/CAM中的图形变换过程是复杂的,往往用一种基本变换不能实现,必须由两种或多种基本变换的组合才能得到所需的最终变换图形,这种复合变换所对应的变换矩阵称为复合变换矩阵[1],可表示为多个基本变换的乘积,即:

T=T1T2Tn

(2)

式中:T1,T2,…,Tn为基本变换矩阵。

根据复合变换的变换原理,在图形基本变换的基础上可通过交互的方式实现复合变换,具体流程如图2所示。

图2 图形的复合变换流程

按构成复合变换的基本变换矩阵顺序输入,如要求绕任意点A旋转α角的变换图形,按照复合变换原理,其基本变换矩阵组合为:

T=T平T转T-平

(3)

对上述变换,根据图2所示,用户按顺序输入(2,7,2),其中2、7分别表示平移变换和旋转变换,并注意以逗号分割。主程序执行时将按输入的顺序依次执行平移和旋转变换函数,并提示输入相应的平移量和旋转角度等参数值。

2 应用实例

2.1 图形基本变换应用

以三角形变换为例,在Matlab中运行主程序,当运行到需要输入变换类型时会弹出如下提示:

请输入基本变换类型,1-比例;2-平移、3-对x轴对称;4-对y轴对称;5-对+45°线对称;6-对-45°线对称;7-旋转:______。

图3为输入不同类型变换后的运行结果。

图3 输入不同类型变换后的运行结果

2.2 复合变换运行实例

由复合变换原理可知,图形的复合变换是若干个基本变换的组合,且矩阵组合顺序要符合变换规律,即基本变换矩阵应按照变换顺序输入。仍以三角形变换为例,图4所示为三角形绕点(0,3)旋转90°的变换结果。按照图2所示变换流程,复合变换矩阵T=T2T7T-2,即输入(2,7,2),主程序将循环调用平移、旋转和平移3个函数。当第1次平移变换函数被调用时,会提示输入平移变换的平移量,即:x方向平移量为0;y方向平移量为-3;第2次循环调用旋转变换函数,输入旋转角度90°,最后再次调用平移变换函数,并输入x和y方向的平移量,分别为0和3。最终变换结果见图4。图5所示为三角形沿直线x+y=2对称的变换结果,该复合变换矩阵为T=T2T7T3T-7T-2,需要依次进行平移、旋转、对称、旋转、平移共5次基本变换,对T2变换输入:x方向平移量-2,y方向平移量0;T7输入旋转角度45;T3沿x轴对称,无输入;T-7输入旋转角度-45;T-2输入x方向平移量2,y方向平移量0,最终变换结果如图5所示。

图4 绕(0,3)点旋转90°的变换结果图5 沿与直线x+y=2对称变换结果

3 拓展学习

在本文的实现思路和程序框架基础上,学生可结合自己的兴趣进一步开展以下内容学习:

(1)变换图形由三角形改变为其他图形,如:T字形、任意四边形等;按照本文提供的画三角形函数的方法,可指导学生将三角形改写为T字形、任意四边形或其他直线图形等函数形式。

(2)按照该方法的实现框架和方法可进行三维图形的几何变换[13-15];按照二维图形的几何变换思路,可指导学生进行三维图形的几何变换,将二维图形基本变换矩阵构造为4×4阶变换矩阵,掌握矩阵不同元素对变换的影响。同样写成Matlab函数形式,具体实现方法与二维相同。

(3)进行非直线图形的变换练习,如:圆、椭圆、抛物线、圆弧等。在CAD/CAM或图形学等教材中,均未介绍非直线图形的几何变换,但借助本文的思路,将画三角形函数进行适当改造,同样可以实现圆、抛物线等非直线图形的图形变换。

4 结 语

课题组多年的实践表明,该方法的应用有助于提高学习积极性、培养学习兴趣,深入理解和掌握图形变换的基本原理和实现方法。可达到以下目标:①有助于学习和掌握图形变换的基本原理和实现方法;②理解和掌握CAD软件的基本实现过程和开发方法;③通过图形变换的学习,提高Matlab软件的应用技能和解决问题的能力。

猜你喜欢
主程序调用轴对称
自动升级程序在船舶监测系统中的应用
“轴对称”单元测试题
《轴对称》巩固练习
浅谈数控铣削技术代码程序的嵌套方式研究
核电项目物项调用管理的应用研究
认识轴对称
系统虚拟化环境下客户机系统调用信息捕获与分析①
电控冰箱软件模块化设计
时光倒流 换回PotPlayer老图标
关于轴对称的几个基本概念