《数据结构课程设计 图遍历的演示.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计 图遍历的演示.doc(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流数据结构课程设计 图遍历的演示.精品文档. 关于MATLAB中三维数据曲线图问题的研究(二) 摘要 MATLAB是一种高效的工程计算语言,它在数值计算、数据处理、自动控制、图像处理、神经网络、小波分析、金融分析等方面有着广泛的应用。目前,三维曲线图的应用广泛存在于各个领域,比如医学,地理学,数学研究,并对这些领域做出了许多有益的卓有成效的工作。而本文主要是针对MATLAB中的三维数据曲线图的绘制问题进行了研究,详细说明了MATLAB在这方面的使用方法和技巧,文中通过多个实例深入浅出地介绍了三维图形的绘制过程、三维图形的数学应用和数据分析以及三
2、维曲线的控制与处理,也介绍了MATLAB中三维图形在各个领域的实际应用,基本上比较全面地对MATLAB中三维曲线图的问题进行了研究和探讨。关键字:MATLAB ; 三维曲线 ;数据;研究 ;实际应用 THE STUDY ON THE PROBLEM OF THREE-DIMENSIONAL DATAS CURVE IN MATLAB(two)ABSTRACTMATLAB is a kind of effective engineering calculation language it in numerical calculation, data processing, automatic c
3、ontrol, image processing, neural network, wavelet analysis, financial analysis, and a wide range of applications. At present, the application of three-dimensional graph exist widely in various areas, such as medicine, geography, mathematics research in these fields, and make a lot of useful fruitful
4、 work. This paper is mainly aimed at MATLAB in three-dimensional graph drawing the data is discussed, the detail the MATLAB in this aspect use method and skill, in this paper, through multiple instances in 3d graphics explaining the rendering process, 3d graphics of mathematics application and data
5、analysis and 3d curves of control and processing, also introduces the MATLAB 3d graphics in various fields of applications, basically quite comprehensively on MATLAB, the three-dimensional graph of problem is studied and discussed. Key words: MATLAB;3d curves;Data; Research;Practical application 目 录
6、1 问题概述.12 三维数据曲线图.1 2.1三维数据曲线图的绘制.1 2.11三维曲线的基本绘图命令.1 2.12三维曲线的坐标轴标签和图形标题.52.2三维曲线图的数据分析与统计分析图.6 2.21三维曲线的数据分析.6 2.22三维曲线统计分析图.6 2.3三维曲线的数学应用.93 三维图形的控制.12 3.1三维图形的视点修饰.12 3.2三维图形旋转.154三维图形的动画制作.165一些特殊的三维图形的绘制.186三维图形在其他方面的应用.23参考文献.26总结 .27 1 问题概述现实生活,尤其是科学计算及工程应用领域中的很多问题都可以抽象为三维空间的问题。三维图形具有很强的数据表
7、现能力,本课程设计主要是针对在MATLAB中三维数据曲线的绘制函数、数据的分析与应用已经它的动画制作和一些特殊的三维曲线图等问题进行研究和简单的介绍。 2 三维数据曲线图三维数据曲线图是将直角坐标系上的数据点连接起来的立体图形。本节主要是对三维数据曲线图的绘制、数据分析和数学应用进行简要讨论。21 三维数据曲线图的绘制 2.11 三维曲线的基本绘图命令 使用绘图函数plot3来绘制三维曲线图形。plot3函数的使用方法与plot函数非常类似,它们之间的主要区别主要在于前者输出的是三维图形,含有z坐标轴的分量,而后者输出的二维图形,只有x和y分量。 与plot函数一样,当输入参数的形式不同时,p
8、lot3函数的形式和输出结果也不同。如果输入参数为向量(x,y,z),则plot3(x,y,z)生成一条通过各个(x,y,z)点的曲线,并且在屏幕上现实它的二维投影。例如,以下语句生成一条如图2-1所示的螺线。例2-1:t=0:pi/50:10*pi; plot3(sin(t),cos(t),t) axis square; grid on 图2-1 三维向量曲线图形 从图中可以看出,三维曲线图形的坐标轴设置方法与二维图形相同,产生的效果也类似。其实,通过将字符串传递给绘图函数,我们不但可以给每个被绘制的向量指定线型,还可以指定其标示符形状和颜色。函数调用形式如下: plot3(x,y,z,li
9、nestyle_market_color) 其中linestyle_market_color由以下几个部分组成:l 线型:例如点线、虚线等;l 标示符类型:例如叉号、星号、圆圈等;l 预定义颜色指示符:例如洋红色、蓝绿色、红色。表2-1列出了常用的特征参数。 表2-1 线型常用特征字符及其含义 线 型 特 征 标示符特征 预定义颜色 字符 含义 字符 含义 字符 含义-实心线+加号c青色 -虚线 o圆形 m洋红色 :点线 *星号 y黄色 -.点划线 x差号 r红色 none隐藏线条 s正方形 g绿色 d钻石型 b蓝色 p五角星 w白色 h六角星 k黑色 none不做记号 例如,将上题中的语句p
10、lot3(sin(t),cos(t),t)改成plot3(sin(t),cos(t),t,r+)则图2-1变为 图2-2 对图2-1的加工处理 如果输入的参数是三个维数相同的矩阵X,Y和Z,plot3(X,Y,Z)将绘制X,Y,Z每一列的数据曲线。例2-2:X,Y=meshgrid(-2:0.1:2);Z=X.*exp(-X.2-Y.2);plot3(X,Y,Z)grid on绘图结果如图2-3所示。 图2-3 三维矩阵曲线图形另一种空间曲线绘图函数为ezplot3,其调用格式为:(1)ezplot3(x,y,z)(2)ezplot3(x,y,z,a,b)(3)ezplot3(.,animat
11、e)其中x,y,z均是参数方程的表达式,第一个表示空间曲线 x =x(t), y=y(t) , z=z(t) 在区间0,2上的图形,第二个表示空间曲线x =x(t), y=y(t) , z=z(t)在区间a,b上的图形,第三个表示产生一个动画效果的空间图形,会有一个红色小球绕着曲线运动,形象地描述出了曲线的形状。例2-3 绘制三维曲线的图形以及动画效果图。程序如下:subplot(1,2,1)ezplot3(cos(t),sin(t),t,0,5*pi);subplot(1,2,2)ezplot3(cos(t),sin(t),t,0,5*pi,animate);执行结果如图2-4所示。 图2-
12、4 螺旋曲线以及带有动画效果的螺旋曲线2.12 三维曲线的坐标轴标签和图形标题为了清楚地区分两个不同的坐标轴,需要给三对坐标轴加上标签,在对三维坐标轴进行标记时要使用三个函数:xlabel、ylabel和zlabel。图形标题则用函数:title 。例如,给图2-2加上坐标轴标签和图形标题的语句如下:xlabel(x);ylabel(y);zlabel(z)title(Line in 3-D Space); 图2-5 对图2-2加上标签后的图形2.2 三维曲线图的数据分析与统计分析图 2.21 三维曲线的数据分析 在科学计算和工程应用中,经常会遇到数据分析的问题。数据分析是组织有目的地收集数据
13、、分析数据,使之成为信息的过程。在三维空间中通过对数据的描绘,能够更直观地反映数据的变化趋势,为决策者提供更与效的信息,做出更好的决策。2.22 三维曲线统计分析图在MATLAB中,三维统计分析图形很多,常见的有三维条形图、三维杆图,三维饼图,三维填充图等,所采用的函数分别是:bar3、stem3、pie3和fill3。bar3函数绘制三维条形图,常用格式为:bar3(y)bar3(x,y)第一种格式中,y的每个元素对应于一个条形。第二种格式在x指定的位置上绘制中元素的条形图。stem3函数绘制离散序列数据的三维杆图,常用格式为:stem3(z)stem3(x,y,z)第一种格式将数据序列z表
14、示为从xy平面向上延伸的杆图,x和y自动生成。第二种格式在x和y指定的位置上绘制数据序列z的杆图,x,y,z的维数必须相同。pie3函数绘制三维饼图,常用格式为:pie3(x)其中x为向量,用x中的数据绘制一个三维饼图。fill3函数等效于三维函数fill,可在三维空间内绘制出填充过的多边形,常用格式为:fill3(x,y,z,c)使用x,y,z作为多边形的顶点,而c指定了填充的颜色。例2-4 绘制三维图形。(1) 绘制魔方阵的三维条形图。(2) 以三维杆图形式绘制曲线。(3) 已知,绘制饼图。(4) 用随机的顶点坐标值画出五个黄色三角形。程序如下:subplot(2,2,1);bar3(ma
15、gic(4)subplot(2,2,2);y=2*sin(0:pi/10:2*pi);stem3(y);subplot(2,2,3);pie3(2347,1827,2043,3025);subplot(2,2,4);fill3(rand(3,5),rand(3,5),rand(3,5),y)程序执行结果如图2-6所示。图2-6 三维统计图除了以上介绍的统计图外,还有三维散点图。在科学和工程计算中,散点图用于大量数据分析分布情形的统计分析。在MATLAB中绘制三维散点图的函数为:scatter3函数。该函数的调用格式如下:scattere3(X,Y,Z,S,C)scattere3(X,Y,Z)s
16、cattere3(,markertype)scattere3(,filled)h=scattere3(,)例2-5 三维散点图 x,y,z=sphere(16); %获取球体的坐标 X=x(:);Y=y(:);Z=z(:); %矩阵的转换 C=floor(abs(Z)*255); S=floor(abs(Z)+1)*50); %定义图标大小和颜色与球体的纬度有关 scatter3(X,Y,Z,S,C,filled) %绘制三维散点图,填充图标 title(三维散点图:球体示例)结果如图2-7所示。 图2-7 三维散点图2.3 三维曲线的数学应用在数学的教学与研究中,常常会遇到各种的图形尤其是空
17、间立体图形的绘制,而这类图形往往很复杂,仅凭手工很难绘制出,尤其是遇到需要绘制准确的图形才能解决的问题(例如二重积分和三重积分的计算),用传统的方法更是无法达到我们预想的效果。华罗庚说过:数缺图时少直观,形缺数时难入微!数据对我们来说太抽象,仅从数据难以理解如果画出图形就比较容易理解。例如函数的图形很难想象,但是MATLAB能很容易地做出它的图形,便于我们了解函数的连续、可微、极值等问题。它的程序为:ezsurfc(y/(1+x2+y2),-5,5,-2*pi,2*pi,35)执行结果如图2-8所示。 图2-8 有时候在做数学分析题目计算重积分的时候需要画图,然后要求几个图形的重叠部分上的积分
18、,然而有时候想象不出两个图形重叠起来是什么样子,而要求的曲面到底是一个什么样子的曲面,而它投影到XY平面内又是一个什么图形,而此时我们就可以用MATLAB在同一个坐标系内用hold on函数绘制两个三维图形而很清楚的判断出要求的曲面。举一个较简单的例子,求某一个积分,而积分曲面为抛物面z=sqrt(x2+y2)(z为正)在柱面(x-3)2+y2=9里面的曲面,我们用Matlab的语句如下:x,y,z=cylinder(3)x=x+3mesh(x,y,z)hold ont=0:25cylinder(sqrt(t),30)得到的图形为图2-9。 图2-9 从图中可以清楚的看出,所求曲面在XY平面内
19、的投影为一个圆,这样就可以很快的求出所求积分。 3 三维图形的控制 在MATLAB中,为了表现图形的显示效果,提供了一些控制函数,有视角的控制、图形的旋转等。3.1三维图形的视点修饰 为了获得三维图形的最佳视觉效果。MATLAB提供了两种方法:一是改变观看的角度(视点),二是旋转图形。本小节主要讲解视点控制函数view.该函数调用格式如下:view(az,el)view(az,el)view(x,y,z)view(2)view(3)view(T)az,el=viewT=viewview(az,el)、view(az,el)设置三维空间图形视点的方位。方位角az与仰角el是这两个旋转角度(见图3
20、-1):做一个通过视点与z轴的平面,与XY平面有一交线,该交线与Y轴的反方向的、按逆时针方向(从z轴的方向观察)计算的、单位为度的夹角,就是视点的方位角az。若角度为负值,则按顺时针方向计算。在通过视点与z轴的平面上,用一直线连接视点与坐标原点,该直线与xy平面的夹角就是视点的仰角el。view(x,y,z) 笛卡尔坐标系中在点(x,y,z)设置视点。view(2) 设置缺省的二维形式视点。其中az=0o ,el=90o,即从z轴上方观看。view(3) 设置缺省的三维形式视点。其中az=-37.5o,el=30o。view(T) 根据转换矩阵T设置视点。其中T为4x4阶的矩阵,如同用命令vi
21、ewmtx生成的透视转换矩阵一样。az,el=view 返回当前的方位角az与仰角el。T=view 返回当前的4x4阶的转换矩阵T。 图3-1 视点设置参数例3-1从不同视点观察三维曲线。程序如下:x=linspace(0,3*pi,100);Z=sin(x);sin(2*x);sin(2*x);Y=zeros(size(x);ones(size(x)/2;ones(size(x);subplot(2,2,1)plot3(x,Y,Z)grid,xlabel(X-axis),ylabel(Y-axis),zlabel(Z-axis)title(DefaultAz=-37.5,El=30)vie
22、w(-37.5,30)subplot(2,2,2)plot3(x,Y,Z) grid,xlabel(X-axis),ylabel(Y-axis),zlabel(Z-axis)title(Az Rotated to 52.5)view(-37.5+90,30)subplot(2,2,3)plot3(x,Y,Z)grid,xlabel(X-axis),ylabel(Y-axis),zlabel(Z-axis)title(El Increased to 60)view(-37.5,60)subplot(2,2,4)plot3(x,Y,Z)grid,xlabel(X-axis),ylabel(Y-ax
23、is)title(Az=0,El=90)view(0,90)程序执行结果如图3-2示,该图充分反映了视点对图形的影响。 图3-2 不同视点图形3.2三维图形旋转 图形旋转有两个指令:ratate和rotate3d。rotate3d指令通过鼠标来旋转图形。rotate指令可以直接使对象绕方向轴旋转一定角度。rotate函数的调用格式如下: rotate(h,direction,alpha) rotate(,origin) rotate(h,direction,alpha)把图形对象旋转alpha角度,参数direction为二元或三元向量,定义了关联于原点的方向轴, rotate(,origin
24、)中参数origin为三元向量,定义了旋转方向轴。缺省的原点为坐标轴原点。例3-2 图形旋转示例 subplot(121) surf(peaks); title(旋转前图形); subplot(122) h=surf(peaks); rotate(h,1 0 1,180) title(旋转后图形);结果如图3-3所示。 图3-3 旋转图形前后比较 4 三维图形的动画制作 MATALB具有动画制作能力,它可以存储一系列各种类型的二维或三维图,然后像放电影一样把它们按次序播放出来。一种明显的动画类型是取出一幅三维图形,然后缓慢地将它旋转,这样就可以从不同角度来观察它。另一种类型是当一个参数变化时,
25、依次显示某些图形。MATLAB提供getframe、moviein和movie函数进行动画制作。1. getframe函数getframe函数截取一幅画面信息(成为动画中的一帧),一幅画面信息形成一个很大的列向量。显然,保存n幅图面就需一个大矩阵。2. moviein函数moviein(n)函数用来建立一个足够大的n列矩阵。该矩阵用来保存n幅画面的数据,以备播放。之所以要事先建立一个大矩阵,是为了提高程序运行速度。3. movie函数movie(m,n)函数播放由矩阵m所定义的画面n次,缺省时播放一次。例4-1 绘制了peaks函数曲面并且将它绕z轴旋转。程序如下X,Y,Z=peaks(30)
26、;surf(X,Y,Z)axis(-3,3,-3,3,-10,10)axis off;shading interp;colormap(hot);m=moviein(20); %建立一个20列大矩阵for i=1:20view(-37.5+24*(i-1),30) %改变视点m(:,i)=getframe; %将图形保存到m矩阵endmovie(m,2) %播放画面两次动画中的一个画面如图4-1所示。 图4-1 动画播放画面 5 一些特殊的三维图形的绘制1、 三维箭头图形三维箭头图形可以在(x,y,z)位置处显示由(u,v,w)分量组成的向量。例如,可以用一个时间函数来表明导弹发射路径:z(t)
27、=vZt+at2/2首先定义常数:vz=10;%速度a=-32;%加速度然后计算t在0到1之间以0.1为间隔变化的函数值(高度)z:t=0:.1:1z=vz*t+1/2*a*t.2;计算x和y方向的位置:vx=2;x=vx*t;vy=3;y=vy*t;计算速度向量的各个分量并使用三维箭头图形显示该向量:u=gradient(x);v=gradient(y);w=gradient(z);scale=0;quiver3(x,y,z,u,v,w,scale)axis square绘制结果如图5-1所示。 图5-1 三维箭头图形2、 三维彗星轨迹图comet3函数用于绘制三维彗星轨迹图,其调用格式为:
28、comet3(z)comet3(x,y,z)comet3(x,y,z,p)这里的彗星长为p*length(z)。例5-1 三维彗星轨迹图 a=12;b=9;T0=2*pi;%T0是轨道周期T=5*T0;dt=pi/100;t=0:dt:T;f=sqrt(a2-b2);%地球与另一焦点的距离th=12.5*pi/180;%卫星轨道与xy平面度的倾角E=exp(-t/20);%轨道收缩率x=E.*(a*cos(t)-f);y=E.*(b*cos(th)*sin(t);z=E.*(b*sin(th)*sin(t);plot3(x,y,z,g)%画全程轨线hold on sphere(20) %画地球
29、axis offtitle(卫星返回地球示例)x1=-18*T0;x2=6*R0;y1=-12*T0;y2=12*T0;z1=-6*R0;z2=6*T0;axis(x1 x2 y1 y2 z1 z2)%确定坐标范围comet3(x,y,z,0.02),hold off%画运动轨线代码运行结果如图5-2所示。 图5-2 三维彗星轨迹图(返回地球示例)3、 三维枝干图函数stem3绘制在xy平面上扩展的三维枝干图。如果该函数只有一个向量输入参数,MATLAB首先判断该向量是行向量还是列向量,然后将枝干图绘制在x=1或y=1处。下面将举例说明该函数的使用方法,假设需要对复平面单位圆上的点进行快速傅里
30、叶变换。为了清楚地描述变换后的效果。将单位圆上的点进行可视化处理。首先计算单位圆:th=(0:127)/128*2*pi;x=cos(th);y=sin(th);计算单位圆上点的fft(快速傅里叶变换)结果:f=abs(fft(ones(10,1),128);使用三维枝干图(钻石形标示符)显示计算结果:stem3(x,y,f,d,fill)view(-65 30)给图形添加标签:xlabel(Real)ylabel(Imaginary)zlabel(Amplitude)title(Magnitude Frequency Response )改变试图方向:rotate3d on绘图结果如图5-3
31、所示。 图5-3 三维枝干图联合使用曲线图和枝干图是一种非常有效的数据描述方法。下面给出一个实例来说明这一点。 使用stem3来可视化基本函数 y=e-st再指定常数s处的拉式变换:t=0:0.1:10; %时间范围s=0.1+i; %螺旋率y=exp(-s*t); %计算衰减指数以t为时间增量创建一系列高度渐增的枝干曲线,然后使用一条曲线将枝干图的顶部连接起来以便于观察:stem3(real(y),imag(y),t)hold onploy3(real(y),imag(y),t,r)hold offview(-39.5,62)添加标签:xlabel(Real)ylabel(Imaginary
32、)zlabel(Magnitude)绘图结果如图5-4所示。 图5-4 三维箭头图形 6三维图形在其他方面的应用 三维图形在实际生活中应用十分广泛,前面我们详细介绍了三维图形在数学中的应用,下面我们将介绍它在地理、工程、医学等其他方面的应用。1、 在地理学中的应用在地理、气象等学科中,我们经常需要反映地理、海流等随经纬度变化的情况,这时就需要绘制等高线。在MATLAB中提供了两类等高线绘制函数:二维等高线函数(contour、contourf)和三维等高线函数(contour3),另外contourc函数提供计算数组等高线的功能。contour函数的调用格式为:contour(X,Y,Z)co
33、ntour(X,Y,Z,n)contour(X,Y,Z,v)在函数contour(X,Y,Z)、contour(X,Y,Z,n)和contour(X,Y,Z,v)中,Z为高度矩阵,X和Y(可省略)代表x轴和y轴的取值,并且X、Y的维数与Z的维数需要匹配。参数n代表等高线的条数;参数v为一个向量,用来定义在何处绘制等高线,各个元素的取值即代表了等高线的基准值。然后绘制等高线图。例6-1 绘制等高线图。 X,Y=meshgrid(-2:.2:2,-2:.2:2); %表面网格函数Z=X.*exp(-X.2-Y.2)subplot(131)C,h=contour(X,Y,Z,8);clabel(C,
34、h) %等高线标注subplot(132)C,h=contourf(peaks,10) %绘制等高线并填充,格式与contour函数一致 caxis(-20,20) %伪色彩,设置轴参数CLim和CLimMode clabel(C,h)subplot(133)C,a=contour3(X,Y,Z,30) %绘制三维等高线,格式与contour函数类似 结果如图6-1所示。 图6-1 三维等高线图2、 在工程中的应用例如在石油地质软件开发中,经常需要将大量的模型数据以三维图形的方式显示出来,如果要自己从图形底层开发三维图形显示的组件,是件工作量很大的任务,而在MATLAB环境下建立.NET组件,
35、然后使用C#调用MATLAB组件中的功能来绘制石油地质软件中常用的等值线图、表面图和三维立体图。在一些模型设计中MATLAB也起到了很大的作用。3、 在医学上的应用 利用三维重建,依据一根血管的一组平行切片图,运用有效的数学方法,在计算机上成功再现了血管的三维图像,方便了血小板变异等很多疾病的观察与治疗。而在现在兴起的整容行业, 参考文献1 刘卫国.MATLAB程序设计教程(第2版).北京:中国水利水电出版社,2010.2 ,96-112.2 施晓红,周佳.MATLAB开发丛书之精通GUI图形界面编程.北京:北京大学出版社,2003.1,92-109.3 4 王旭东,潘广桢.MATLAB及其在
36、FPGA中的应用.北京:国防工业出版社,2006.1,81-835 王家文,曹宇.MATLAB6.5图形图像处理.北京:国防工业出版社,2004,137-138、158-160 总 结 通过一个学期对MATLAB的学习,我基本上了解了关于MATLAB的一些知识,但还是比较浅显,感觉自己并没有完全的掌握,这几天通过做课程设计,又使自己巩固了一些关于MATLAB三维图形图像的知识,像对如何绘制基本的三维图形和三维图形的一些处理这些问题进行了深入的研究,因此也对这些方面的理解能力有了提高。 通过本次课程设计,通过查阅大量的书本和网络上的资料,也让我对MATLAB中三维图形在实际中应用有所了解,以及它在数学方面的应用,因为我自己就是数学专业的学生,所以了解它在数学上的应用我认为是很重要的,同时我也知道了很多网上查资料的好网站并且知道怎么下载一些好的文章。除此之外,我也知道了很多在WORD文档编辑中的一些技巧,比如如何设置页眉和页脚,等等。总的来说,我还是很认真的独自完成了此次课程设计,但由于是第一次接触这类作业,所以还是有一些不足的地方,也不能脱离课本而熟练地运用MATLAB来处理一些图形图像问题,还大有努力的空间,所以还需要进一步地去了解和掌握它。