MATLAB实现图形交互式缩放方法研究.docVIP

  • 8
  • 0
  • 约 5页
  • 2016-10-06 发布于北京
  • 举报
MATLAB实现图形交互式缩放方法研究.doc

MATLAB实现图形交互式缩放方法研究   摘要:研究了MATLAB中GUI界面下以鼠标拖放交互方式实现图形缩放问题,分析了不同条件和要求下用MATLAB实现图形缩放的方法和具体算法,阐述了在MATLAB中人机交互操作的具体实现方法。   关键词:人机交互;缩放;区域选择;图形用户接口   中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)33-7619-03   在实验中经常需要对获取的数据进行图形化分析,由于数据的时间分辨率高,绘制出来的数据细节难以观察,就需要对图形局部进行放大。实现图形用户界面下的交互式缩放就显得尤为重要。   1 MATLAB产生的图形   在使用MATLAB进行计算时,可能产生各种图形。图形数据的生成方式可分为由函数产生和由采样数据产生。由函数产生的图形数据是通过数学公式计算获得的。矢量图形的缩放不会导致图形失真,可以无限缩放。由采样数据产生的图形由于采样间隔的限制,图形放大到一定程度就会出现锯齿现象。对这类图形的缩放需要根据放大倍数分别采用不同的处理方法。MATLAB中绘图函数plot可以绘制上述两种方式产生的图形数据。如x和y是同样长度的矢量, plot(x,y)命令将绘制y元素对应于x元素的xy曲线图。   2 MATLAB提供的缩放功能   MATLAB自身提供了缩放函数zoom。zoom可以根据指定的放大倍数对图形进行缩放。在MATLAB命令创建的图形窗口中还可以工具栏中的放大缩小工具对坐标轴中的进行缩放。对于矢量图形,这样操作不会有问题。但是遇到非矢量图形,i当放大倍数达到一定值时,图形会失真。要想保证图形放大不失真,就需要进行特殊处理。   3 图形缩放算法   对于矢量图形,由于数学方程确定了坐标点,对于任意给定的x,通过数学方程f(x)获得确定的值y与之对应。对于非矢量图形,没有确切的数学方程,对于给定的x,想要知道对于的值y,就需要进行插值运算。   已知离散点上的数据集,即已知在点集X上对应的函数值Y,构造一个解析函数(其图形为一曲线)通过这些点,并能够求出这些点之间的值,这一过程称为一维插值。   MATLAB中提供了多种一维插值方法:基于多项式的插值和基于快速傅里叶的插值。   一维多项式插值,具体的插值方法有:最近邻点插值、线性插值、三次样条插值、三次多项式插值。一维多项式插值通过函数interp1()实现。interp1()的一种调用格式如下:   yi=interp1(X, Y, xi, method)   method可以下列方法之一:‘nearest’:最近邻点插值;‘spline’:三次样条插值;‘linear’:线性插值;‘cubic’:三次多项式插值。   选择插值方法时需要考虑方法的执行速度、占用内存大小和获得数据的平滑度。在速度上,Nearest最快,然后是Linear再到Cubic,最慢的是Spline.但是精度和曲线的平滑度恰好相反,Nearest甚至不连续。系统默认的插值方法的是Linear。   一维快速傅里叶插值通过函数interpft()实现。interpft()用傅立叶变换把输入数据变换到频域,再用更多点的傅立叶逆变换,变换回时域,实现时域数据采样增加。interpft()的调用格式:y=interpft(x,n)。其中n为采样数。   4 MATLAB中图形交互操作的实现   MATLAB提供图形用户界面开发工具Guide(graphical user interface development environment)。在MATLAB的命令窗口输入“guide”命令启动图形编程界面。MATLAB的Gui对象支持键盘和鼠标事件。通过对事件进行响应而实现人机交互操作。在MATLAB中交互操作具体实现需要解决一下几个问题:鼠标位置获取;计算放大范围;提取范围内数据;插值计算。交互放大操作的流程图如图1所示。   4.1鼠标位置获取   MATLAB中的ginput函数可以接受鼠标和键盘输入。在坐标轴内部点击鼠标,即可获取鼠标所在点的坐标值。ginput提供了一个十字光标使我们能更精确的选择我们所需要的位置,并返回坐标值。ginput函数调用形式为:[x,y]=ginput(n)或[x,y]=ginput或[x,y,button]=ginput(...)。其中[x,y]=ginput(n)读取n个坐标,[x,y]=ginput无限读取坐标直到按下回车键,[x,y,button]=ginput(...)返回x和y的坐标,以及button值(1=左键,2=中,3=右)或者按键的ASCII码值。下面的代码实现鼠标位置的获取,并将两个点的位置存入数组中。   for i=

文档评论(0)

1亿VIP精品文档

相关文档