在新版的matlab中怎么实现ppt擦除动画式动画效果

他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)第四章 Matlab绘图 ? 强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的 考虑绘图的细节,只需要给出一些基本参数就 能得到所需图形,这类函数称为高层绘图函数。 此外,Matlab还提供了直接对图形句柄进行操 作的低层绘图操作。这些操作可以对图形中的 每一个元素单独进行修改,而不影响其他部分。 ? 本章介绍绘制二维和三维图形的高层绘图函数 以及其他图形控制函数的使用方法,在此基础 上,再介绍可以操作和控制各种图形对象的低 层绘图操作。 一、二维绘图? 二维图形是将平面坐标上的数据点连接起来的平面图形。可以采用不同的坐标系,如直 角坐标、对数坐标、极坐标等。数据点可以 使向量或矩阵的形式,类型可以是实型或复 型。二维图形的绘制是其他绘图操作的基础。 ? 一、绘制二维曲线的基本函数 ? 在Matlab中,最基本而且应用最为广泛的绘 图函数为plot,利用它可以在二维平面上绘 制出不同的曲线。 ? 1.?plot函数的基本用法plot函数用于绘制二维平面上的线性坐标曲线图,要提供一组x坐标和对应 的y坐标,可以绘制分别以x和y为横、纵坐标的二维曲线。plot函数的应用 格式?sin(2?x) , 2pi]区间,绘制曲线 y ? 2e ? 在命令窗口中输入以下命令 ? && x=0:pi/100:2* ? && y=2*exp(-0.5*x).*sin(2*pi*x); ? && plot(x,y) ? 程序执行后,打开一个图形窗口,在其中绘制 出如下曲线? 例:在[0?0.5 x?plot(x,y)其中x,y为长度相同的向量,存储x坐标和y坐标。注意:指数函数和正弦函数之间要用点乘运算,因为二者是 向量。 ? x ? t cos(3t ) , ?? ? t ? ? ? 2 ? 例:绘制曲线 ? y ? t sin t?这是以参数形式给出的曲线方程,只要给定参数向量,再分别求出x,y向量即可输出曲线:? &&t=-pi:pi/100: ? && x=t.*cos(3*t); ? && y=t.*sin(t).*sin(t); ? && plot(x,y) ? 程序执行后,打开一个图形窗口,在其中 绘制出如下曲线 ? 以上提到plot函数的自变量x,y为长度相同的向量,这是最常见、最基本的用法。实际 应用中还有一些变化。分别说明: ? (1)当x是向量,y是有一维和x同维数的矩阵 时,则绘制多条不同色彩的曲线。曲线条 数是y的另外一维数,x作为横坐标。如: ? x=linspace(0,2*pi,100); ? y=[sin(x);cos(x)] ; ? plot(x,y) ? 可在同一坐标中绘制两条曲线。 ? (2)当x,y是同维矩阵时,则以x,y的对应列元素为横、纵坐标绘制曲线,曲线条数等于列数。 ? (3)plot最简单的调用格式是只包含一个输入参数: plot(x) ? 如果x是实向量,则以该向量元素的下标为横坐 标,元素值为纵坐标绘制一条曲线(折线)。如果是 复数向量,则以该向量元素的实部和虚部分别为 横、纵坐标绘制曲线。 ? 问:下面程序可以绘制一个什么图形? ? t=0:0.02:2* ? x=exp(i*t); ? plot(x) ? 2.含多个输入参数的plot函数plot函数可以包含若干组向量对,每一组可以绘制 出一条曲线。含多个输入参数的plot函数调用格式 为:plot(x1,y1,x2,y2,…,xn,yn) ? 如下列命令可以在同一坐标中画出3条曲线。 ? x=linspace(0,2*pi,100); ? plot(x,sin(x),x,2*sin(x),x,3*sin(x))??当输入参数有矩阵形式时,配对的x,y按对应的列 元素为横坐标和纵坐标绘制曲线,曲线条数等于矩 阵的列数。 ? x=linspace(0,2*pi,100); ? y1=sin(x); ? y2=2*sin(x); ? y3=3*sin(x);? x=[x;x;x]';? y=[y1;y2;y3]'; ? plot(x,y,x,cos(x)) ? x,y都是含有3列的矩阵,它们组成输入参数对,绘制3条曲线;x和cos(x)又组成一对, 绘制一条余弦曲线。共4条曲线,如图所示。 ? 利用plot函数可以直接将矩阵的数据绘制在图形窗体中,此时plot函数将矩阵的每一列 数据作为一条曲线绘制在窗体中。如: ? A=pascal(5)? ? ? ? ? ?A= 1 1 1 1 11 2 3 4 51 1 1 3 4 5 6 10 15 10 20 35 15 35 70? plot(A) ??3.含选项的plot函数plot函数除了以上基本用法外,还可以添加选项,可以根据需要, 在绘制曲线时选取不同的线型、颜色和数据点的标记符号。选 项如下表: 线型 颜色 标记符号- 实线: 虚线b蓝色g绿色. 点o 圆圈s 方块d 菱形-. 点划线-- 双划线r红色c青色 m品红 y黄色 k黑色 w白色× 叉号+ 加号 * 星号∨朝下三角符号∧朝上三角符号 &朝左三角符号 &朝右三角符号 p 五角星 h 六角星 ? 当选项省略时,Matlab规定,线型一律用实线,颜色则根据曲线的先后顺序依次采 用上表给出的前7种颜色。含选项的plot函 数的调用格式: ? plot(x1,y1,’选项1’,x2,y2,’选项2’,…) ? 选项用单引号括起来,线型,颜色和符号 可以随意搭配使用。 ? 例:用不同的线型和颜色在同一坐标内绘制sin(2?x) 及其包络线 曲线 y ? 2e ? x=(0:pi/100:2*pi)'; ? y1=2*exp(-0.5*x)*[1,-1]; ? y2=2*exp(-0.5*x).*sin(2*pi*x); ? x1=(0:12)/2; %x1=(1:2:24)/4?? ? y3=2*exp(-0.5*x1).*sin(2*pi*x1); ? plot(x,y1,'k:',x,y2,'b--',x1,y3,'rp');?0.5 x?在该plot函数中包含了3组绘图参数,第一组用黑色虚线画 出两条包络线,第二组用蓝色双划线画出曲线y,第三组用 红色五角星离散标出数据点。 ? 4.双纵坐标函数plotyy?在Matlab中,如果需要绘制出具有不同纵坐 标标度的两个图形,可以使用plotyy函数, 它能把具有不同量纲,不同数量级的两个函 数绘制在同一个坐标中,有利于图形数据的 对比分析。使用格式为:?plotyy(x1,y1,x2,y2)x1,y1对应一条曲线,x2,y2对应另一条曲线。 横坐标的标度相同,纵坐标有两个,左边的 对应x1,y1数据对,右边的对应x2,y2。? ? 例:用不同的标度在同一坐标内绘制曲线 y1 ? esin(2?x) ,和曲线 ?0.1x y2 ? 15e sin(x)?0.5 x? 程序如下:? x1=0:pi/100:2* ? x2=0:pi/100:3* ? y1=exp(-0.5*x1).*sin(2*pi*x1); ? y2=15*exp(-0.1*x2).*sin(x2); ? plotyy(x1,y1,x2,y2); ???二、绘制图形的辅助操作绘制完图形以后,可能还需要对图形进行一些辅助操作, 以使图形意义更加明确,可读性更强。 1.图形标注 在绘制图形时,可以对图形加上一些说明,如图形的名 称、坐标轴说明以及图形某一部分的含义等,这些操作 称为添加图形标注。有关图形标注函数的调用格式为:?title('图形名称') ? xlabel ('x轴说明') ? ylabel('y轴说明') ? text (x,y,'图形说明') ? legend(’图例1’,’图例2’,…)? ? 其中,title、xlabel和ylabel函数分别用于说明图形和坐标轴的名称。text函数是在坐标 点(x,y)处添加图形说明。 legend函数 用于绘制曲线所用线型、颜色或数据点标 记图例,图例放置在空白处,用户还可以 通过鼠标移动图例,将其放到所希望的位 置。除legend函数外,其他函数同样适用 于三维图形,在三维中z坐标轴说明用 zlabel函数。 上述函数中的说明文字,除了使用标准的ASCII字符外, 还可以使用LaTex(一种流行的数学排版软件)格式 的控制字符,这样就可以在图形上添加希腊字符,数 学符号和公式等内容。在Matlab支持的LaTex字符串 中,用\bf , \it , \rm控制字符分别定义黑体、斜体和正 体字符,受LaTex字符串控制部分要加大括号{ }括起 来。例如, text(0.3,0.5,'the useful {\bf MATLAB}') , 将使MATLAB一词黑体显示。一些常用的LaTex字符 见表,各个字符可以单独使用也可以和其他字符及命 令配合使用。如text(0.3 ,0.5 ,’sin({\omega}t+{\beta})’) 将在图形窗口的(0.3,0.5)位置得到标注效果sin(ωt+β)。 ? 详细的latex字符可通过help―index―输入latex查看? ? 2.坐标控制?在绘制图形时,Matlab可以自动根据要绘制曲线 数据的范围选择合适的坐标刻度,使得曲线能够 尽可能清晰的显示出来。所以,一般情况下用户 不必选择坐标轴的刻度范围。但是,如果用户对 坐标不满意,可以利用axis函数对其重新设定。其 调用格式为:? axis([xminxmax ymin ymax zmin zmax]) ? 如果只给出前四个参数,则按照给出的x、y轴 的最小值和最大值选择坐标系范围,绘制出合 适的二维曲线。如果给出了全部参数,则绘制 出三维图形。 ? axis函数的功能丰富,其常用的用法有:equal :纵横坐标轴采用等长刻度 ? axis square:产生正方形坐标系(默认为矩形) ? axis auto:使用默认设置 ? axis off:取消坐标轴 ? axis on :显示坐标轴? axis ? 还有:给坐标加网格线可以用grid命令来控制,grid on/off命令控制画还是不画网格线,不带参 数的grid命令在两种之间进行切换。 ? 给坐标加边框用box命令控制。和grid一样用法 ?? ? ? ? ? ?例 55:绘制分段函数,并添加图形标注。x=linspace(0,10,100); ? x, 0? x?4 y=[]; ? 4? x?6 ?2, for x0=x f ?x ? ? ? if x0&=8 ?5 ? x / 2, 6 ? x ? 8 y=[y,1]; ?1 x?8 ? plot(x,y) elseif x&=6 axis([0 10 0 2.5]); %设置坐标轴 y=[y,5-x0/2] title('分段函数曲线'); %加图形标题 elseif x0&=4 xlabel('Variable X'); %加x轴说明 y=[y,2]; ylabel('Variable Y'); %加y轴说明 elseif x0&=0 y=[y,sqrt(x0)]; text(2,1.3,'y=x^{1/2}'); %在指定位置 添加图形说明 end text(4.5,1.9,'y=2') ; end text(7.3,1.5,'y=5-x/2'); text(8.5,0.9,'y=1');?? ? ??? ? ? 3.图形保持 ? 一般情况下,每执行一次绘图命令,就刷新一次当前图形窗口,图形窗口原有图形 将不复存在,如果希望在已经存在的图形 上再继续添加新的图形,可以使用图形保 持命令hold。hold on/off 命令是保持原有图 形还是刷新原有图形,不带参数的hold命令 在两者之间进行切换。 ? 例:用图形保持功能在同一坐标内绘制曲线 y ? 2e?0.5 xsin(2?x) 及其包络线。x=(0:pi/100:2*pi)'; ? y1=2*exp(-0.5*x)*[1,-1]; ? y2=2*exp(-0.5*x).*sin(2*pi*x); ? plot(x,y1,'b:'); ? axis([0 2*pi -2 2]); %设置坐标 ? %设置图形保持功能 ? plot(x,y2,'k'); ? legend('包络线','包络线','曲线y'); %加图例 ? hold off %关闭图形保持功能 ? grid %网格线控制? ? 4.图形窗口分割?在实际应用中,经常需要在一个图形窗口中绘制若干个独 立的图形,这就需要对图形窗口进行分割。分割后的图形 窗口由若干个绘图区组成,每一个绘图区可以建立独立的 坐标系并绘制图形。同一图形窗口下的不同图形称为子图。 Matlab提供了subplot函数用来将当前窗口分割成若干个绘 图区,每个区域代表一个独立的子图,也是一个独立的坐 标系,可以通过subplot函数激活某一区,该区为活动区, 所发出的绘图命令都是作用于该活动区域。调用格式:??subplot(m,n,p)该函数把当前窗口分成m×n个绘图区,m行,每行n个绘 图区,区号按行优先编号。其中第p个区为当前活动区。 每一个绘图区允许以不同的坐标系单独绘制图形。 ?? ?例:在一个图形窗口中以子图的形式同时绘制 正弦、余弦、正切、余切曲线。x=linspace(0,2*pi,60); y=sin(x); z=cos(x); t=sin(x)./(cos(x)+eps); ct=cos(x)./(sin(x)+eps); subplot(2,2,1); plot(x,y); title('sin(x)'); axis([0,2*pi,-1,1]); subplot(2,2,2); plot(x,z); title('cos(x)'); axis([0,2*pi,-1,1]); subplot(2,2,3); plot(x,t); title('tan(x)'); axis([0,2*pi,-40,40]); subplot(2,2,4); plot(x,ct); title('cotan(x)'); axis([0,2*pi,-40,40]);?? ??? ? ? ? ? ? 以上的图形窗口的分割比较规则,在实际中,还可以做更灵活的分割。如: ? subplot(2,2,1); %后面加具体的作图函数 ? subplot(2,1,2); ? subplot(4,4,3); ? subplot(4,4,4); ? subplot(4,4,7); ? subplot(4,4,8); 三、绘制二维曲线的其他函数 ? 1.其他形式的线性直角坐标图 ? 在线性直角坐标中,其他形式的图形有条形图、阶 梯图、杆图和填充图等,所采用的函数分别为: ? bar(x,y,选项) 选项放在单引号中 条形图 ? stairs(x,y,选项) 梯形图 ? stem(x,y,选项) 杆图 ? fill(x1,y1,选项1,x2,y2,选项2,…) ? 前三个函数和plot的用法相似,只是没有多输入变 量形式。fill函数按向量元素下标渐增次序依次用直 线段连接x,y对应元素定义的数据点。? ? 例:分别以条形图、填充图、阶梯图和杆图绘制曲线 y=2e-0.5x? ? ? ? ? ? ? ? ??x=0:0.35:7; y=2*exp(-0.5*x); subplot(2,2,1);bar(x,y,'g'); title('bar(x,y) ');axis([0,7,0,2]); subplot(2,2,2);fill(x,y,'r'); title(' fill(x,y)'); axis([0,7,0,2]); subplot(2,2,3);stairs(x,y,'b'); title('stairs(x,y)'); axis([0,7,0,2]); subplot(2,2,4);stem(x,y,'k'); title('stem(x,y)'); axis([0,7,0,2]); ? 2.极坐标图? polar函数用来绘制极坐标图,调用格式为:polar(theta,rho,选项) ? 其中,theta为极坐标极角,rho为极径,选 项的内容和plot函数相似。 ? ) cos(5? )的极坐标图 ? 例:绘制 ? ? sin(3 ? theta=0:0.01:2* ? rho=sin(3*theta).*cos(5*theta); ? polar(theta,rho,'r');? ? 3.对数坐标图在实际应用中,经常用到对数坐标,Matlab提供了 绘制对数和半对数坐标曲线的函数,其调用格式为: ? semilogx(x1,y1,选项1,x2,y2,选项2,…) ? semilogy(x1,y1,选项1,x2,y2,选项2,…) ? loglog(x1,y1,选项1,x2,y2,选项2,…) ? 这些函数中选项的定义和plot函数完全一样,所不同 的是坐标轴的选取。semilogx函数使用半对数坐标, x轴为常用对数刻度,而y轴仍保持线性刻度。 semilogy恰好和semilogx相反。loglog函数使用全对 数坐标,x、y轴均采用对数刻度。? ?? ? ? ? ? ?例:绘制y=10x2的对数坐标图,并与直角坐标图进行比较。x=0:0.1:10; y=10*x.*x; subplot(2,2,1); plot(x,y); title('plot(x,y)'); subplot(2,2,2); semilogx(x,y); title('semilogx(x,y)'); subplot(2,2,3); semilogy(x,y); title('semilogy(x,y)'); subplot(2,2,4); loglog(x,y); title('loglog(x,y)');?? ??? ? ? ? 二、三维绘图? 一、绘制三维曲线的基本函数 ? 最基本的三维图形函数为plot3,它将二维绘图函数plot的有关功能扩展到三维空间,可以用 来绘制三维曲线。其调用格式为: ? plot3(x1,y1,z1,’选项1’,x2,y2,z2,’选项2’,…) ? 其中每一组x,y,z组成一组曲线的坐标参数, 选项的定义和plot的选项一样。当x,y,z是同 维向量时,则x,y,z对应元素构成一条三维曲 线。当x,y,z是同维矩阵时,则以x,y,z对 应列元素绘制三维曲线,曲线条数等于矩阵的 列数。 ? x ? cost ? ? 例:绘制如下曲线: ? y ? sin t ? 什么曲线??怎么绘制? ? z ? t ?? 对参数t赋值即可 ? t=-pi:pi/200:8* ? x=cos(t);y=sin(t);z=t; ? subplot(1,2,1);plot3(x,y,z); ? subplot(1,2,2); comet3(x,y,z); ? comet3绘制是三维彗星图,还有comet二维 彗星图,用法和plot相似。 ? x ? y ? z ? 64 ? ? 例: 绘制空间曲线 ? y ? z ? 0 什么图形?? ? 把该方程转换为对应的参数方程: ? x ? 8 cost ? t=0:pi/50:2* ? ? x=8*cos(t); ? y ? 4 2 sin t 0 ? t ? 2? ? ? y=4*sqrt(2)*sin(t); ? z ? ?4 2 sin t ? z=-4*sqrt(2)*sin(t); ? plot3(x,y,z,'p'); ? title('Line in 3-D Space'); ? text(0,0,0,'origin'); ? xlabel('X');ylabel('Y');zlabel('Z');2 2 2 ? 二.三维曲面 ? 1.平面网格坐标矩阵的生成? 当绘制z=f(x,y)所代表的三维曲面图时,先要在xy平面选定一矩形区域,假定矩形区 域为D=[a,b]×[c,d],然后将[a,b]在x方向 分成m份,将[c,d]在y方向分成n份,由各划 分点做平行轴的直线,把区域D分成m×n 个小矩形,生成代表每一个小矩形顶点坐 标的平面网格坐标矩阵,最后利用有关函 数绘图。 ? 产生平面区域内的网格坐标矩阵有两种方法:? (1).利用矩阵运算生成? x=a:dx:b;y=(c:dy:d)’; ? X=ones(size(y))*x; Y=y*ones(size(x)); ? 经过上述语句执行后,矩阵X的每一行都是向量x, 行数等于向量y的元素个数,矩阵Y的每一列都是 向量y,列数等于向量x的元素个数。于是X和Y 相同位置上的元素(X(i,j),Y(i,j))恰好是区域D的(i,j) 网格点的坐标。根据每一个网格点的x,y坐标求 出函数z,就可以得到函数矩阵Z。X,Y,Z的各 列或各行所对应坐标,对应于一条空间曲线,其 集合即可构成空间曲面。 ? (2).利用meshgrid函数生成 ? x=a:dx:b;y=c:dy:d; ? [X,Y]=meshgrid(x,y); ? 所得到的网格坐标矩阵(X,Y)和上述方法一 样。当x=y时,可以写成meshgrid(x) ? 如: [X,Y]=meshgrid(-8:0.5:8,-10:0.5:10); ? 2.绘制三维曲面 ? 有了网格坐标,再根据关系求出对应的Z, 就可以进行三维绘图了。Matlab提供了 mesh函数和surf函数来绘制三维曲面图。 ? 其使用格式为:mesh (x,y,z,c) ? surf(x,y,z,c) ? mesh函数用来绘制三维网格图,在精度要 求不高的情况可以用三维网格图来表示三 维曲面。而surf用来绘制三维曲面图,各线 条之间的补面用颜色填充。 c用来指定不同 高度的颜色范围。c省略时,认为c=z,即 颜色的设定正比于图形的高度,这样就可 以得到层次分明的三维图形。? ? 例:用三维曲面图表现函数?为了便于分析三维曲面的各种特征,可以采用3种不同形式的绘图。z ? sin y cos x? x=0:0.1:2* ? [x,y]=meshgrid(x); ? z=sin(y).*cos(x); ? mesh(x,y,z);%surf(x,y,z) %plot3(x,y,z) ? xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis'); ? title('mesh'); ? 分别采用mesh、surf、plot3作图,可以查看区 别。mesh线条有颜色,线条间的补面无色。 surf线条是黑色,线条间的补面有颜色。plot3 实际上是由众多的三维曲线组合而成的图形。 例: 绘制两个直径相等的圆管相交的图形。 ? m=30; z=1.2*(0:m)/m; r=ones(size(z)); ? theta=(0:m)/m*2* ? x1=r'*cos(theta);y1=r'*sin(theta);%生成第一个圆管的 坐标矩阵 ? z1=z'*ones(1,m+1); ? x=(-m:2:m)/m; ? x2=x'*ones(1,m+1);y2=r'*cos(theta);%生成第二个圆管的?坐标矩阵z2=r'*sin(theta); ? surf(x1,y1,z1); %绘制竖立的圆管 ? hold on ? surf(x2,y2,z2); %绘制平放的圆管 ? axis equal ,axis off ? title ('两个等直径圆管的交线'); hold off? ? ? ? ? ??? ??? ? ? ? ?例: 分析由函数z=x2-2y2构成的曲面形状与平面z=a的交线。 [x,y]=meshgrid(-10:0.2:10); z1=x.^2-2*y.^2; %曲面1 a=input('a=?'); z2=a*ones(size(x)); %曲面2 subplot(1,2,1); mesh(x,y,z1);mesh(x,y,z2); %画出两个曲面 v=[-10,10,-10,10,-100,100];axis(v); %设置坐标 r0=abs(z1-z2)&=1; %求两个曲面z坐标小于1的点 xx=r0.*x; yy=r0.*y; zz=r0.*z2; %求这些点的x、y、z的坐标,即交线坐标 subplot(1,2,2); plot3(xx(r0~=0),yy(r0~=0),zz(r0~=0),'*'); %在第二个子图画出交线 axis(v); ? 此外,还有两个和mesh函数相似的函数,即带等高线的三维网格曲面函数meshc和带底 座的三维网格曲面函数meshz,其用法和 mesh类似。不同的是,meshc还在xy平面上 绘制曲面在z轴方向的等高线,meshz还在xy 平面上绘制曲面的底座。 ? surf函数也有两个类似的函数,即具有等高 线的曲面函数surfc和具有光照效果的曲面函 数surfl。 ? 例:在xy平面内绘制函数, z ? [x,y]=meshgrid(-8:0.5:8);?sin x ? y22x ?y22? z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps);? subplot(2,2,1);meshc(x,y,z);title('meshc'); ? subplot(2,2,2);meshz(x,y,z);title('meshz'); ? subplot(2,2,3);surfc(x,y,z);title('surfc'); ? subplot(2,2,4);surfl(x,y,z);title('surfl'); ? 3.标准三维曲面? Matlab提供了一些函数用于绘制标准三维曲面,这些函数可以产生相应的绘图数据,常用于三 维图形的演示。如,sphere函数和cylinder函数 分别用于绘制三维球面和柱面。sphere函数的 调用格式为: sphere(n)直接作图?[x,y,z]=sphere(n);采用这三个矩阵可以绘制出圆心位于原点、半 径为1的单位球体。若在调用该函数时不带输出 参数,则直接绘制所需球面。 n决定了球面的 圆滑程度,其默认值为20。若n值取的比较小, 则绘制出多面体的表面图。? 该函数将产生(n+1)×(n+1)矩阵x,y,z。 ? cylinder函数的调用格式为:??[x,y,z]=cylinder(R,n)其中R是一个向量,存放柱面各个等间隔高度上的半径,n表示 在圆柱圆周上有n个间隔点,默认有20个间隔点。如:cylinder(3)生成一个半径为3的圆柱, cylinder([10,0])生成一个圆锥。(一端半径为10,一 端半径为0) ? 而t=0:pi/100:4* R=sin(t); cylinder(R,30);生成一 个正弦圆柱面。 ? 另外Matlab还提供了一个peaks函数,称为多峰函 数,常用于三维曲面的演示。 ? peaks,直接画图;z=peaks(30),创建一个30*30的 矩阵z,surf(z)画曲面? 例: 绘制标准三维曲面图形 ? t=0:pi/20:2* ? [x,y,z]=cylinder(2+sin(t),30); ? subplot(1,3,1); ? surf(x,y,z); ? subplot(1,3,2); ? [x,y,z]= ? surf(x,y,z); ? subplot(1,3,3); ? [x,y,z]=peaks(30); ? meshz(x,y,z);? ? 3.其他三维图形。? 在介绍二维图形时,曾经提到条形图、杆图、饼图和填充图等特殊图形,它们还可 以以三维形式出现,其函数分别为bar3, stem3,pie3和fill3。 ? 除了上面讨论的三维图形外,常用的图形 还有瀑布图和三维曲面的等高线图。绘制 瀑布图用waterfall函数,用法和meshz函数 相似,只是它的网格线在x轴方向出现,具 有瀑布效果。等高线图分二维和三维两种 形式,分别使用函数contour和contour3绘 制。 ? 例:绘制多峰函数的瀑布图和等高线图。 ? subplot(1,2,1); ? [X,Y,Z]=peaks(30); ? waterfall(X,Y,Z); ? xlabel('XX');ylabel('YY');zlabel('ZZ'); ? subplot(1,2,2); ? contour3(X,Y,Z,12,'k');%其中12代表高度的 等级数 ? xlabel('XX');ylabel('YY');zlabel('ZZ'); 三、隐函数绘图? 如果给定了函数的显式表达式,可以先设置自变量向量,然后根据表达式计算函数向量,从而用 plot等函数绘制出图形。但是当函数采用隐函数 形式时,如:x3+y3-5xy+1/5=0 ,则很难利用上 述方法绘制图形。Matlab提供了一个ezplot函数 绘制隐函数图形。用法如下: ? 1.对于函数f=f(x),ezplot的调用格式为: ? ezplot(f),在默认区间(-2pi,2pi)绘制图形。 ? ezplot(f,[a,b]),在区间(a,b)绘制 ? 2.对于隐函数f=f(x,y),ezplot的调用格式为;? ezplot(f),在默认区间(-2pi,2pi), (-2pi, 2pi)绘制f(x,y)=0的图形。 ? ezplot(f,[xmin,xmax,ymin,ymax]);在区间 绘制图形。 ? ezplot(f,[a,b]),在区间(a,b),(a,b)绘制 ? 3.对于参数方程x=x(t),y=y(t),ezplot函数的调用格 式为: ? ezplot(x,y),在默认区间(0&t&2pi)绘制x=x(t), y=y(t)图形。 ? ezplot(x,y,[tmin,tmax]),在区间(tmin, tmax)绘制x=x(t),y=y(t)图形。 ? 例:隐函数绘图举例。 ? subplot(2,2,1); ? ezplot('x^2+y^2-9'); ? subplot(2,2,2); ? ezplot('x^3+y^3-5*x*y+1/5') ? subplot(2,2,3); ? ezplot('cos(tan(pi*x))',[0,1]); ? subplot(2,2,4); ? ezplot('8*cos(t)','4*sqrt(2)*sin(t)',[0,2*pi]); ?其他隐函数绘图还有,ezpolar,ezcontour, ezplot3,ezmesh,ezmeshc,ezsurf,ezsurfc 。?s? x ? e cost ? 如: ? ?s 0 ? t ? 5? ? y ? e sin t 0 ? s ? 8, ? z ?t ?可以使用以下命令,绘制三维曲面 ? ezsurf('exp(-s)*cos(t)','exp(-s)*sin(t)','t',[0,8,0,5*pi]) ? ezsurf('exp(-t)*cos(s)','exp(-t)*sin(s)','t',[0,8,0,5*pi])? 四、低层绘图操作在前面的绘图操作中,我们只需要提供一些参数就可 以得到所需要的图形,非常方便,这种绘图称为高层 绘图。而在有些情况下需要用户的干预,这时就需要 低层绘图操作。 ? 一、图形对象及其句柄 ? 1.图形对象 ? Matlab把构成图形的各个基本要素称为图形对象。包 括:计算机屏幕、图形窗口、用户菜单、坐标轴、用 户控件、曲线、曲面、图像、文字等部分。系统将每 一个对象安树形结构组织起来,每一个图形对象都可 以被独立的操作。? 计算机屏幕图形窗口用户菜单坐标轴用户控件曲线曲面文字图像光源区域块方框图形对象的树形结构 ? 在Matlab中,每一个具体的图形都由若干个不同的图形对象组成。每个图形中不一定包含全 部对象,但必须有计算机屏幕和图形窗口对象。 ? 计算机屏幕是产生其他对象的基础,称为根对 象。它包含一个或多个图形窗口对象。而一个 图形窗口对象有3种不同类型的子对象:坐标轴、 用户菜单和用户控件。后两类对象用于构建图 形用户界面。 ? 坐标轴对象有7种不同的子对象:曲线、曲面、 文字、图像、光源、区域块和方框。对坐标轴 及其7种子对象的操作就构成了低层绘图操作。 ? 2.图形对象句柄 ? Matlab在创建每一个图形对象时,都为该对象分配一个唯一的值,称为该图形对象的句 柄(Handle)。句柄是图形对象的唯一标识符, 不同对象的句柄不可能重复和混淆。 ? 计算机屏幕作为根对象由系统自动创建,其 句柄为0,图形窗口对象的句柄值为一个正整 数,显示在该窗口的标题栏上。其他图形对 象的句柄为浮点数。 ? 如:h1=figure (新建一个图形窗口,并返回其句柄值,是个整数)? h2=plot(sin(0:0.1:10)) (绘制一条曲线,并返回其句 柄值,是个浮点数) ? Matlab用于获取已有图形对象句柄的函数:gcf 获取当前图形窗口的句柄 ? gca 获取当前坐标轴的句柄 ? gco 获取最近被选中的图形对象的句柄 ? findobj 按照指定的属性来获取图形对象的句柄 ? 例:查看有关对象句柄的例子 ? x=linspace(0,2*pi,100); y=sin(x); ? h0=plot(x,y,’rx’) %曲线对象的句柄h0=159.0024 ? h1=gcf %图形窗口的句柄 h1=1 ? h2=gca %坐标轴的句柄 h2=158.0020 ? h3=findobj(gca,’marker’,’x’)%坐标轴上曲线的句柄h3=h0??图形对象的句柄由系统自动分配,每次分配的值不一定相同。 ? 二、图形对象属性?1.属性名与属性值 ? 每种图形对象都具有各种各样的属性,Matlab正是通 过对属性的操作来控制和改变图形对象的。为方便属性 的操作,Matlab给每种对象的每个属性规定了一个名字, 称为属性名。属性名的取值称为属性值。如:linestyle 是曲线对象的一个属性名,它的值决定着曲线的线型, 它的取值可以是‘-’,‘:’,’-.’,’- -’等。属性名的写法中不区 分字母的大小写,属性名要用单引号括起来。 ? 2.属性的操作 ? 当创建一个对象时,要对该对象的各种属性赋予必要的 属性值,否则系统将自动使用默认的属性值。可以用 set函数或get函数对属性进行相关操作。 ? set的调用格式:? set(句柄,属性名1,属性值1,属性名2,属性值2,…) ? 句柄用于指明要操作的对象,如果在调用set时省略全部属性名和值,则将显示该句柄对象的所 有允许属性。如: ? x=0:pi/10:2* h=plot(x,sin(x)) ; ? set(h,’color’,’r’,’linestyle’,’:’,’marker’,’p’); ? 先用默认属性绘制正弦曲线并保存其句柄,然后 通过改变曲线的属性来设置曲线的颜色、线型和 标记符。 ? get函数的调用格式 ? V=get(句柄,属性名) ? 将返回句柄对象指定属性名的属性值。如果省略属性名,将返回句柄对象的所有属性值。如接上 个例子: ? col=get(h,’color’),将得到曲线的颜色属性值[1 0 0],即红色。 ? 用get可以获得屏幕的分辨率: ? v=get(0,’screensize’);将返回一个1*4的向量,分 别代表左下角坐标(1,1)和屏幕的宽度和高度。有 助于依据屏幕分辨率设置窗口的大小。 ? 3.对象的公共属性? 图形对象具有各种各样的属性,有些属性是所有对象共同具备的,有些则是各个对象所特有的。 先介绍对象常用的公共属性: ? Children属性:该属性的值是该对象的所有子对 象的句柄组成的一个向量。 ? x=0:pi/10:2* h=plot(x,sin(x),x,sin(2*x),x,x.*sin(x)); %三条曲线 ? get(gca,’children’) %列出三条曲线的句柄值 ? Parent属性:该属性的值是该对象的父对象的句 柄,如图形窗口的parent属性是0. 上面例子中曲 线对象的parent属性值是坐标轴的句柄,而坐标 轴的parent属性值则是图形窗口的句柄。 Tag属性:该属性的取值是一个字符串,相当于给该对 象定义了一个标识符。 ? Type属性:表示该对象的类型,其属性值是不可改变的。 ? UserData属性:该属性取值是一个矩阵,默认为空阵。 ? Visible属性:取值为on或off。决定着该对象是否在屏幕 上显示出来。注意:是否显示与是否存在是两回事。 ? ButtonDownFcn属性:其值为一个字符串,可以是某个 M文件的文件名,或一段M程序。图形对象确定了一个 作用区域,当单击该区域时,可执行该程序。 ? CreateFcn属性,DeleteFcn属性:其值和 ButtonDownFcn相似。当创建该对象或取消该对象时自 动执行程序段。? ? 例:在同一坐标下绘制红、绿两根不同曲线,希望获得绿色曲线的句柄,并对其进行设置。 ? x=0:pi/50:2* y=sin(x); z=cos(x); ? plot(x,y,'r',x,z,'g'); ? H=get(gca,’children’);%获取两曲线句柄向量H ? for k=1:length(H) ? if get(H(k),’color’)==[0 1 0] %绿色 ? Hg=H(k); %获取绿色线条的句柄 ? end ? end ? pause ? set(Hg,’linestyle’,‘:’,’marker’,’p’);%对绿色线条进行设置 ? 三、图形对象的创建?? ??除根对象外,所有图形对象都可以由低层绘图函数创建,所 创建的对象置于适当的父对象中,当父对象不存在时, Matlab会自动创建。如:用line函数画一条曲线,假设在画 线之前,图形窗口和坐标轴都不存在,Matlab会自动创建它 们。如果已经存在了,则在当前坐标轴上画线,且不会影响 该坐标轴上已经存在的其他对象。这一点和高层绘图不同, 需注意。 1.图形窗口对象 图形窗口是Matlab中很重要的一类图形对象。一切图形图像 的输出都是在图形窗口中完成的,所以掌握图形窗口的控制 是很重要的。建立图形窗口对象使用figure函数。 句柄变量=figure(属性名1,属性值1,属性名2,属性值 2,…) ? MATLAB通过对属性的操作来改变图形窗口的形式。也可以使用figure函数按MATLAB缺省的属 性值建立图形窗口: ? figure 或 句柄变量=figure ? Matlab通过figure函数创建窗口后,还可调用 figure函数来显示该窗口,并将其设为当前窗口。 figure(窗口句柄) ? 要关闭图形窗口,使用close函数,其调用格式 为: close(窗口句柄) ? 另外,close all 命令可以关闭所有的图形窗口, clf命令则是清除当前图形窗口的内容,但不关闭 窗口。 MATLAB为每个图形窗口提供了很多属性。这些属性 及其取值控制着图形窗口对象。除公共属性外,其他常 用属性如下: ? MenuBar属性:该属性控制图形窗口是否具有菜单条, 如果为none,则没有菜单条,用户可以采用uimenu函 数加入自己的菜单条。 ? Name属性:该属性值可以是任意字符串,这个字符串 作为图形窗口的标题。 ? NumberTitle属性:取值为on或off,决定图形窗口标题 中是否以“Figure No. 1”形式显示。 ? Resize属性:决定图形窗口是否可以用鼠标改变窗口的 大小。属性值为on或off。 ? Position属性:该属性值为一个由4个元素构成的向量, 其形式为[x,y,w,h]。决定图形窗口对象在屏幕上的位置 和大小。? Units属性:取值可以为pixel(像素,为默认值), normalized(相对单位),inches(英寸), centimeters(厘米)和points(磅)。 ? Color属性:该属性取值为一个颜色值,用于色丁图形 窗口背景颜色。 ? 还有对键盘和鼠标响应属性,Matlab允许对按下键盘按 键和鼠标键的动作进行响应。类似的函数有: KeyPressFcn(键盘键按下响应)、WindowButtonDownFcn(鼠 标键按下响应)、WindowButtonMotionFcn(鼠标移动响应)及 WindowButtonUpFcn(鼠标键释放响应)等,这些属性所对应 的属性值可以为matlab的函数名或文件名,表示一旦键 盘按键或鼠标键按下后,将自动调用给出的函数或命令。 ? 详细介绍可查阅相关资料。? ? 建立一个图形窗口。hf=figure('color',[0,1,0],'position',[1,1,300,150],... ? 'name','图形窗口示例','numbertitle','off', 'menubar‘ , 'none',... ? 'keypressfcn','disp(''hello,keyboard key pressed.'')');? 分别在4个不同的窗口绘制正弦、余弦、正切、余切曲 线。要求先建立一个图形窗口并绘图,然后每关闭一个 再建立下一个。 ? x=linspace(0,2*pi,100); ? y=sin(x);z=cos(x);t=tan(x);ct=1./(t+eps);??%命令组待用C4=['figure(''name'',''cotangent(x)'',''numbertitle'',''off''); plot(x,ct);axis([0,2*pi,-40,40]);']; ? C3=['figure(''name'',''tangent(x)'',''deletefcn'',C4,''numb ertitle'',''off'');plot(x,t);axis([0,2*pi,-40,40]);']; ? C2=['figure(''name'',''cos(x)'',''deletefcn'',C3,''numbertitl e'',''off'');plot(x,z);axis([0,2*pi,-1,1]);'];??%先创建一个图形窗口,并绘制曲线figure('name','sin(x)','deletefcn',C2,'numbertitle','off'); ? plot(x,y); ? axis([0,2*pi,-1,1]);? ? 2.坐标轴对象坐标轴对象是图形窗口对象的子对象,每个图形窗口中 可以有多个坐标轴对象,但只有一个为当前坐标轴,在 没有指明坐标轴的情况下所有图形都是在当前坐标轴中 输出的。建立坐标轴对象用axes函数: ? 句柄变量=axes(属性名1,属性值1,…) ? 调用axes按照指定的属性创建坐标轴,并将其句柄赋给 左边的变量。也可以使用默认属性创建坐标轴: ? axes 或 句柄变量=axes ? 当创建多个坐标轴后,可以用axes指定某个为当前坐标 轴: axes(坐标轴的句柄)( 这里的句柄必须是已经 存在的)? ? ? ?MATLAB为每个坐标轴对象提供了很多属性。除公共属性外,其他常用属性 如下:Box属性、GridLineStyle属性、Position属性、Units属性、Title属性等。 例:利用坐标轴对象实现图形窗口的任意分割。 利用axes函数可以在不影响图形窗口上其他坐标轴的前提下建立一个新的坐标 轴,从而实现图形窗口的任意分割。? ? ? ? ? ? ? ? ? ? ? x=linspace(0,2*pi,20); y=sin(x); axes('position',[0.2,0.2,0.2,0.7],'gridlinestyle','-.'); plot(y,x);title('sin(x)-1'); axes('position',[0.4,0.5,0.2,0.1]); stairs(x,y);title('sin(x)-2'); axes('position',[0.55,0.2,0.25,0.3]); [x,y]=meshgrid(-8:0.5:8); z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2); mesh(x,y,z);title('mesh(x,y,z)'); ? 3.曲线对象? 曲线对象是坐标轴的子对象,可以是二维曲线,也可以是三维曲线,用line函数创建: ? 句柄变量=line(x,y,z,属性名1,属性值1,…) ? x,y,z和高层绘图中的plot,plot3的一样。 ? 每个曲线对象也具有很多属性,除公共属性外, 常用属性还有: ? Color属(设置曲线的颜色),linestyle属性(定 义线型),linewidth(定义线宽,默认0.5磅), marker属性(定义数据点的标记符,默认无), Markersize(标记符的大小,默认6磅),xdata、 ydata、zdata(曲线对象的3个坐标轴数据。) ? 例:利用曲线对象绘制曲线? t=0:pi/100:2* ? y1=sin(t); ? y2=cos(2*t); ? figh= ? axes('gridlinestyle',':','xlim',[0,2*pi],'ylim',[-1,1]); ? line('xdata',t,'ydata',y1,'linewidth',1.5);? line(t,y2);? grid ? 4.文字对象文字对象主要用于给图形添加文字标注,除了使用一般 的文字外,还可以使用LaTex字符。使用text函数可以 添加文字说明,并保存句柄: ? 句柄变量=text(x,y,z,说明文字,属性名1,属性值1,…) ? 如:h=text(0.5,0.5,’{\omega}=t+{\beta}^2’),添加标注。 ? 除公共属性外,文字对象的其他常用属性如下:Color 属性、String属性、Interpreter属性、FontSize属性(定 义文字对象大小,默认10磅)、Rotation属性(定义文 字对象的旋转角度)。? 例:利用曲线对象绘制y1和y2两条曲线,并用文字对象 完成标注。 ? theta=-pi:0.1: ? y1=sin(theta);y2=cos(theta); ? h=line(theta,y1,'linestyle',':','color','g'); ? line(theta,y2,'linestyle','--','color','b'); ? xlabel('-\pi \leq \theta \leq \pi'); ? ylabel('sin(\theta)'); ? title('plot of sin(\theta)'); ? text(-pi/4,sin(-pi/4),'\leftarrow sin(-\pi \div 4)', 'fontsize', 12); ? pause ? set(h,‘color’,‘r’,‘linewidth’,2) ;%改变曲线1的颜色和线宽? ? 5.曲面对象 ? 曲面对象也是坐标轴的子对象,在三维坐标系中定义,建立曲面 对象使用surface函数: ? 句柄变量=surface(x,y,z,属性名1,属性值1,…) ? x,y,z和mesh、surf中的一样。?除公共属性外,其他常用属性如下:EdgeColor属性、FaceColor属性、 LineStyle属性、LineWidth属性、Marker属性、MarkerSize属性等。? ? ? ?? ? ?例:利用曲面对象绘制三维曲面z=sinycosx。 x=0:0.1:2* [x,y]=meshgrid(x); z=sin(y).*cos(x); %设置视点方向 axes('view',[-37.5,30]); hs=surface(x,y,z,'facecolor','w','edgecolor','flat'); %开始网格片为 白色,实际上是网格图 set(hs,'facecolor','flat'); %暂停后,重新设置颜色 6.区域块对象(patch) (略) 7.方框对象(rectangle) 五、图像显示与动画制作? 一、图像显示 ? Matlab提供了用于简单图像处理的函数,可对图像进行简单的操 作。还有一个功能强大的图形处理工具箱,可对图像进行更专业 的处理。 ? 1.图像的读写 ? 不同类型的图像有自己的数据格式,在M中可以用imread函数读 取该图像。(实际上就是数据转换的过程,把图像数据转换成 Matlab图像的数据格式) ? (1) x=imread(filename,fmt) ? filename:文件名,fmt:图像文件的格式,.bmp,.jpeg,等,可 省略,则系统自动判断。x是经过转换后Matlab识别的数据。 ? 如果图像是灰度图,x是二维矩阵,如果是真彩色的,则x是三维 矩阵。 ? (2)[x,map]=imread(filename,fmt) ? 把经过转换后的数据保存到x中,同时把相关的 色图数据保存到矩阵map中。 ? 写操作可以用imwrite实现,把图像数据输出到文 件: ? imwrite(x,filename,fmt) ? 如:imwrite(A,’building.jpg’,’bmp’) ? 把前面读入的图像另存为bmp格式的文件。保存 后的文件要比原来的jpg格式的文件大的多了, 因为bmp文件没有压缩。 ? 2.图像显示 ? 用image函数显示图像:image(x), x为图形矩阵 ? 二、动画制作 ? 有两种常见的动画形式:一种是影片动画,预先制作图形,存储 在图形缓冲区中,然后逐帧播放。这种方法计算量大,占用内存 多,但回放速度快,画面连贯。另一种是实时动画,保持图形窗 口中绝大部分的像素色彩不变,只是更新部分像素的颜色从而构 成运动图像。适用于每次变化较少,图形精度变化不是很高的情 况。 ? 1.影片动画制作 ? 将Matlab产生的多幅图形保存起来,利用系统提供的函数进行播 放,就可以产生动画效果。有3个函数用于捕捉和播放动画。分 别为:getframe, moviein,和movie。 ? getframe:可截取每一幅画面信息形成一个很大的列向量,该向 量可保存到一个变量中。如果保存n幅图就需要一个很大的矩阵。 ? moviein(n)函数用来建立一个足够大的n列矩阵。该矩阵用来保存 n幅画面的数据。之所以事先建立一个大矩阵,可以提高程序运 行的速度。 ? movie(m,n)函数播放由矩阵m所定义的画面n次,默认为一次。 ? 例:播放一个直径不断变化的球体。? [x,y,z]=sphere(50);? m=moviein(30); ? for% 建立一个30列的大矩阵i=1:30 ? surf(i*x,i*y,i*z) %绘制球面,半径不断变化 ? m(:,i)= %将球面保存到m矩阵 ? end ? movie(m,10); %播放球面10次 ? 2.实时动画制作? 制作的基本方法:先画出图形,再计算活动对象的新位置,并在新位置上把它显示出来,最后擦 除原来位置上的原有对象,刷新屏幕,重复操作 就可产生动画效果。在Matlab中,可利用图形的 erasemode属性实现显示新对象、擦除旧对象, 而又不破坏背景图案。在实时动画制作中,通过 erasemode属性可以实现3种擦除方式: ? (1)none:在图形对象变化时,不做任何擦除而直 接在原来图形上绘制。 ? (2)background:在图形对象被擦除后,将原来对 象的颜色设为背景色,实现擦除。这种模式将原 来的图形对象完全擦除,包括该对象下的所有对 象。 ?(3)xor:对象的绘制和擦除由该对象颜色与屏幕颜色 的异或而定。只绘制与屏幕颜色不一致的新对象点。 这种模式只擦除与屏幕颜色不一致的原对象点,而 不损害被擦除对象下面的其他对象。当新对象属性设置后,应及时刷新屏幕,从而使新 对象显示出来。这些操作依靠drawnow命令完成。 drawnow命令会迫使matlab暂停目前的任务序列去 刷新屏幕。若没有drawnow命令,matlab要等任务 序列执行完后才去刷新屏幕。? ?例:模拟布朗运动。? ? ? ??? ? ? ? ? ? ? ? ??n=30; %指定布朗运动的点数 s=0.02; %指定温度或速率 x=rand(n,1)-0.5; %产生n个随机点(x,y),处于-0.5到0.5之间 y=rand(n,1)-0.5; h=plot(x,y,'.'); %绘制随机点 axis([-1,1,-1,1]); grid off set(h,'erasemode','xor','markersize',20); %设置擦除模式为xor for i=linspace(1,10,5000) %循环5000次,产生动画效果 drawnow x=x+s*randn(n,1); %在坐标点附近添加随机噪声 y=y+s*randn(n,1); set(h,'xdata',x,'ydata',y); %通过改变数据属性重新绘图 end
赞助商链接

我要回帖

更多关于 css3图片擦除动画效果 的文章

 

随机推荐