第五讲 matlab 高级图形绘制技术

32
第第第 第第第 MATLAB MATLAB 第第第第第第第第 第第第第第第第第 5.1 第第第第第第第第第第 5.2 第第第第第第第第第第 5.3 第第第第第第第第 5.4 第第第第第第第第 5.5 第第第第第第第第 5.6 第第第第第第第第第第 5.7 MATLAB 第第第第第第 5.8 第第第第第

Upload: aysha

Post on 19-Jan-2016

143 views

Category:

Documents


8 download

DESCRIPTION

第五讲 MATLAB 高级图形绘制技术. 5.1 其他二维图形绘制命令 5.2 其他三维图形绘制命令 5.3 句柄图形绘制技术 5.4 图形可视编辑工具 5.5 视角变换与三视图 5.6 图像文件的读写与显示 5.7 MATLAB 图形输出技术 5.8 例子与习题. 5.1 其他二维图形绘制技术. 首先介绍 ezplot 函数,下表中 f, x, y 为函数或表达式. 5.1 其他二维图形绘制技术. 例子. ezplot('cos(x)', [0, pi]). ezplot('x^3 + 2*x^2 - 3*x + 5 - y^2'). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第五讲  MATLAB 高级图形绘制技术

第五讲 第五讲 MATLABMATLAB 高级图形绘制技高级图形绘制技术术

5.1 其他二维图形绘制命令5.2 其他三维图形绘制命令5.3 句柄图形绘制技术5.4 图形可视编辑工具5.5 视角变换与三视图5.6 图像文件的读写与显示5.7 MATLAB 图形输出技术5.8 例子与习题

Page 2: 第五讲  MATLAB 高级图形绘制技术

5.1 5.1 其他二维图形绘制技术其他二维图形绘制技术首先介绍 ezplot 函数,下表中 f, x, y 为函数或表达

式ezplot(f) 画函数 f = f(x) ,区间为 -2*pi<x<2*pi或函数 f(x,y)=0 ,区间为 -2*pi<x,y<2*pi

ezplot(f, [a, b]) 同上,区间为 [ a, b ]ezplot(f, [xmin, xmax, ymin, ymax])

画函数 f(x,y)=0 ,区间为 xmin<x<xmax及 ymin<y<ymax

ezplot(x,y) 画曲线 x=x(t), y=y(t), 区间为 0 < t < 2*pi

ezplot(x,y,[tmin, tmax])

画曲线 x=x(t), y=y(t), 区间为 tmin < t < tmax

Page 3: 第五讲  MATLAB 高级图形绘制技术

5.1 5.1 其他二维图形绘制技术其他二维图形绘制技术例子

ezplot('x^3 + 2*x^2 - 3*x + 5 - y^2')

f = inline('cos(x)+2*sin(x)'); ezplot(f)

ezplot('sin(3*t)*cos(t)','sin(3*t)*sin(t)',[0,pi])

ezplot('t*cos(t)','t*sin(t)',[0,4*pi])

ezplot('x^2 + y^2 - 1',[-1.25,1.25]); axis equal

ezplot('cos(x)', [0, pi])

Page 4: 第五讲  MATLAB 高级图形绘制技术

5.1 5.1 其他二维图形绘制技术其他二维图形绘制技术 fplot 函数, fplot('function',limits)

fplot plots a function between specified limits. The function must be of the form y = f(x), where x is a vector whose range specifies the limits, and y is a vector the same size as x and contains the function's value at the points in x (see the first example). If the function returns more than one value for a given x, then y is a matrix whose columns contain each component of f(x) (see the second example).

fplot('tanh',[-2 2])

Create an M-file, myfun, that returns a two column matrix:function Y = myfun(x)Y(:,1) = 200*sin(x(:))./x(:);Y(:,2) = x(:).^2;Plot the function with the statement: fplot('myfun',[-20 20]

例一例二

fplot('[tan(x),sin(x),cos(x)]',2*pi*[-1 1 -1 1])例三

Page 5: 第五讲  MATLAB 高级图形绘制技术

5.2 5.2 其他三维图形绘制技术其他三维图形绘制技术

bar3 三维条形图comet3 三维彗星状轨迹图pie3 三维饼图quiver3 三维磁力线图ezplot3 三维曲线stem3 三维火柴杆图

MATLAB 除了 plot3 外还提供有大量其他的三维图形绘制,可以用 help specgraph 命令,与二维对应的有以下一些。

Page 6: 第五讲  MATLAB 高级图形绘制技术

5.2 5.2 其他三维图形绘制技术其他三维图形绘制技术[ x, y, z ] =sphere(n) 球面[ x, y, z ] =cylinder(R, n) 柱

体[ x, y, z ] =ellipsoid(xc, yc, zc,

xr, yr, zr, n) 椭圆体

subplot(221),sphere(3),title('N=3')subplot(222),sphere(6),title('N=6')subplot(223),sphere(20),title('N=20')subplot(224),sphere(50),title('N=50')

-10

1

-10

1-1

0

1

N=3

-10

1

-10

1-1

0

1

N=6

-10

1

-10

1-1

0

1

N=20

-10

1

-10

1-1

0

1

N=50

Page 7: 第五讲  MATLAB 高级图形绘制技术

5.2 5.2 其他三维图形绘制技术其他三维图形绘制技术[ x, y, z ] =cylinder(R,

n) 柱体 R 为柱面各个层次上的半径

R=[5 0]subplot(221),cylinder(R, 3),title('N=3')subplot(222), cylinder(R,6),title('N=6')subplot(223), cylinder(R),title('N=20')subplot(224), cylinder(R,50),title('N=50')

-50

5

-50

50

0.5

1

N=3

-50

5

-50

50

0.5

1

N=6

-50

5

-50

50

0.5

1

N=20

-50

5

-50

50

0.5

1

N=50

Page 8: 第五讲  MATLAB 高级图形绘制技术

5.2 5.2 其他三维图形绘制技术其他三维图形绘制技术[ x, y, z ] =ellipsoid(xc,

yc, zc, xr, yr, zr, n) 圆心为 xc, yc, zc, 半径为 xr, yr, zr 。

subplot(221), ellipsoid(0,0,0,1,2,3, 3),title('N=3')subplot(222), ellipsoid(0,0,0,1,2,3, 6),title('N=6')subplot(223), ellipsoid(0,0,0,1,2,3),title('N=20')subplot(224), ellipsoid(0,0,0,1,2,3, 50),title('N=50')

-10

1

-20

2-5

0

5

N=3

-10

1

-20

2-5

0

5

N=6

-10

1

-20

2-5

0

5

N=20

-10

1

-20

2-5

0

5

N=50

Page 9: 第五讲  MATLAB 高级图形绘制技术

5.2 5.2 其他三维图形绘制技术其他三维图形绘制技术三维表面网格图: mesh(x, y, z, c) x, y 分别构成该曲面的 x 和 y 矩阵 z 为高度矩阵 , c 为 颜色矩阵一般来说, x, y 可以由函数 meshgrid 函数来生成。

三维曲面还可以由函数 surf(x, y, z, c) 画出,参数含义同上,区别见下例子。

隐含的部分可以由 hidden on 或 hidden off 来显示或隐含。

还可以用 colorbar 函数在三维曲面边上显示一颜色条。

Page 10: 第五讲  MATLAB 高级图形绘制技术

5.2 5.2 其他三维图形绘制技术其他三维图形绘制技术例子:画出下列函数的三维表面图形 yxyxexxyxfz

22

2, 2

[x,y]=meshgrid(-3:0.1:3,-2:0.1:2);

z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y); mesh(x,y,z)

-4-2

02

4

-2

-1

0

1

2-1

-0.5

0

0.5

1

1.5

Page 11: 第五讲  MATLAB 高级图形绘制技术

5.2 5.2 其他三维图形绘制技术其他三维图形绘制技术>> [x,y]=meshgrid(-3:0.1:3,-2:0.1:2);

>> z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y); surf(x,y,z)

-4-2

02

4

-2

-1

0

1

2-1

-0.5

0

0.5

1

1.5

同时观察 colorbar, hidden on, hidden off 的影响

Page 12: 第五讲  MATLAB 高级图形绘制技术

5.2 5.2 其他三维图形绘制技术其他三维图形绘制技术

三维表面着色 shading 三种选择 faceted, flat 和 interp

光照点位置 light( ‘Position’, [x, y, z]) , 对应用 surf 的另一个版本 surfl

色调方案 colormap(MAP) ,其中 MAP 是一个 nX3 的矩阵,三列对应 R, G, B , 预定义的色调方案有

hot, cool, copper, pink, gray, bone, prism, flag

局部图形剪切:将要剪切的部分用数值 NaN 代替。

Page 13: 第五讲  MATLAB 高级图形绘制技术

5.2 5.2 其他三维图形绘制技术其他三维图形绘制技术例子: [x,y]=meshgrid(-3:0.1:3,-2:0.1:2);

z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y); surfl(x,y,z)

light('pos',[-3 2 1.5]) ; shading flat;

Page 14: 第五讲  MATLAB 高级图形绘制技术

5.2 5.2 其他三维图形绘制技术其他三维图形绘制技术例子: [x,y]=meshgrid(-3:0.1:3,-2:0.1:2);

z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y); surfl(x,y,z)

light('pos',[-3 2 1.5]) ; shading flat; colormap(hot);

Page 15: 第五讲  MATLAB 高级图形绘制技术

5.2 5.2 其他三维图形绘制技术其他三维图形绘制技术等高线 contour(x, y, z, n) 或 contour3(x, y, z, n)

[x,y]=meshgrid(-3:0.1:3,-2:0.1:2);

z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y); surfl(x,y,z)

subplot(121); contour(x, y, z, 50), subplot(122), contour3(x, y, z, 50);

-2 0 2-2

-1.5

-1

-0.5

0

0.5

1

1.5

2

-20

2

-2

0

2-1

-0.5

0

0.5

1

1.5

Page 16: 第五讲  MATLAB 高级图形绘制技术

5.2 5.2 其他三维图形绘制技术其他三维图形绘制技术瀑布式曲面 waterfall(x, y, z )

[x,y]=meshgrid(-3:0.1:3,-2:0.1:2);

z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y); waterfall(x, y, z)

-4-2

02

4

-2

-1

0

1

2-1

-0.5

0

0.5

1

1.5

Page 17: 第五讲  MATLAB 高级图形绘制技术

5.3 5.3 句柄图形绘制技术句柄图形绘制技术MATLAB 中大部分绘图命令会返回一个句柄,它代表所绘制图形对象,如:坐标轴、线条、文字等,然后可以用 set, get

命令来设置或获得该图形对象的有关属性,代表了面向对象编程的思想。 MATLAB 中图形对象层次关系如下图所示。

line text surface im age light patch rectangle

axes uicontro l uim enu uicontextm enu

figure

root

Page 18: 第五讲  MATLAB 高级图形绘制技术

5.3 5.3 句柄图形绘制技术句柄图形绘制技术用下面命令格式来设置或获得有关属性值set(H, ‘PropertyName’, PropertyValue, …)

PropertyValue = get(H, ‘PropertyName’)

• 如下述命令 h=figure; get(h);

MATLAB 将列出当前图形窗口一系列的属性名称

• 如下述命令 h=axes; get(h);

MATLAB 将列出当前坐标轴一系列的属性名称

• 如下述命令 t=0:0.1:2*pi; y=sin(t); h=plot(t,y); get(h)

MATLAB 将列出当前线条一系列的属性名称

• 命令 set(h) 列出图形对象 h 的所有属性及取值

Page 19: 第五讲  MATLAB 高级图形绘制技术

5.3 5.3 句柄图形绘制技术句柄图形绘制技术常用的通用对象属性

属性名 意义 可选值或类型Childern 本对象所有下级子对象的句柄 向量Parent 本对象上级对象的句柄 父对象句柄CreateFcn 这类对象建立时自动调用的函数名 字符串DeleteFcn 这类对象消除时自动调用的函数名 字符串Interruptible 其他回调函数执行时本回调函数是否

中断‘on’ ,’ off’

Selected 用标号表示是否此对象被选中 ‘on’ ,’ off’

Tag 对象的标签 字符串Type 对象的类型 字符串UserData 附加给此对象的数据 任意Visible 本对象是否可见 ‘on’ ,’ off’

Page 20: 第五讲  MATLAB 高级图形绘制技术

5.3 5.3 句柄图形绘制技术句柄图形绘制技术常用的坐标轴对象属性

属性名 意义 可选值或类型Box 是否需要坐标轴上的方框 ‘on’ ,’ off’

ColorOrder 设置多条曲线的颜色顺序 nX3 的矩阵GridLineStyle 网格线类型 ‘:’ 等NextPlot 坐标轴图形的更新方式 ‘replace’, ‘add’

Title 坐标轴标题的句柄 由函数 title 设定XLabel X 轴标注的句柄 由函数 xlabel 设定XDir X 轴方向 ‘normal’, ‘rev’

XGrid X 轴是否加网格线 ‘on’ ,’ off’

XLim X 轴上下限 [ xmin, xmax ]XScale X 轴刻度类型 ‘linear’, ‘log’

XTick X 轴上标尺点值的向量 ‘on’ ,’ off’

同时, Xlabel, X…. 等属性还有对应 Y 轴、 Z 轴的同样的属性

Page 21: 第五讲  MATLAB 高级图形绘制技术

5.3 5.3 句柄图形绘制技术句柄图形绘制技术常用的文字对象属性

属性名 意义 可选值或类型Color 字符的颜色 1 X 3 的颜色向量FontAngle 字体倾斜形式 ‘normal’, ‘italic’

FontName 字体的名称 ‘Times New Roman’, ‘Courier’ 等FontSize 字号大小 实数FontWeight 字体是否加黑 ‘light’, ‘normal’, ‘demi’, ‘bold’

HorizontalAlignment

文字的水平对齐方式 ‘left’, ‘center’, ‘right’

FontUnits 字体大小的单位 ‘points’, ‘inches’, ‘centmeters’, ‘pixels’, ‘normalized’

Rotation 字体旋转的角度 实数Editing 是否允许交互式修改 ‘on’, ‘off’

String 字符串 字符串Interpreter 是否允许 TEX 格式 ‘tex’, ‘none’

Page 22: 第五讲  MATLAB 高级图形绘制技术

5.3 5.3 句柄图形绘制技术句柄图形绘制技术常用的线条对象属性

属性名 意义 可选值或类型Color 颜色 1 X 3 的颜色向量LineStyle 曲线的类型 见介绍 plot 函数的表LineWidth 曲线的线宽 缺省值 0.5

Marker 曲线上的标号类型 见介绍 plot 函数的表MarkerSize 表号的大小 缺省值 6

XData X 轴数据 向量或矩阵

Page 23: 第五讲  MATLAB 高级图形绘制技术

5.3 5.3 句柄图形绘制技术句柄图形绘制技术>> clf; t=0:0.4:2*pi; hc=plot(t, sin(t), '-pentagram');

>> ht=gtext(' This is the original text');

>> y1=get(hc, 'YData');

>> set(hc, 'MarkerSize', 20, 'LineStyle','-.','Color','k','YDaa', 2*y1);

>> set(hc, 'MarkerSize', 20, 'LineStyle','-.','Color','k','YData', 2*y1);

>> set(ht, 'String', 'Udated Text', 'FontSize', 20, 'Rotation', 10);

0 1 2 3 4 5 6-2

-1.5

-1

-0.5

0

0.5

1

1.5

2

Udated Text

0 1 2 3 4 5 6-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

This is the original text

Page 24: 第五讲  MATLAB 高级图形绘制技术

5.4 5.4 图形可视编辑技术图形可视编辑技术前面说的图形对象的属性设置或修改也可以用图形界面 G

UI 的形式来方便地进行。可以从图形窗口的 EDIT 菜单下或用命令 protedit 来激活图形可视编辑窗口。

Page 25: 第五讲  MATLAB 高级图形绘制技术

5.4 5.4 图形可视编辑技术图形可视编辑技术

Page 26: 第五讲  MATLAB 高级图形绘制技术

5.5 5.5 视角变换与三视图视角变换与三视图三维图形绘制中的视角定义

方位角

仰角

轴x

轴y轴z

视点

Page 27: 第五讲  MATLAB 高级图形绘制技术

5.5 5.5 视角变换与三视图视角变换与三视图MATLAB 提供了一个函数 view 来改变 和 的值,设置视角数据 view(az, el) , view([az, el]) , view(T)

获得视角数据[ az, el ] = view, [ az, el ] =view(3), T=view

[x,y]=meshgrid(-3:0.1:3,-2:0.1:2); z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);

subplot(121),surf(x,y,z);[a,b]=view; subplot(122),surf(x,y,z);view(-a,b);

-5

0

5

-2

0

2-1

0

1

2

-5

0

5 -2

0

2-1

0

1

2

Page 28: 第五讲  MATLAB 高级图形绘制技术

5.5 5.5 视角变换与三视图视角变换与三视图根据视角的不同, MATLAB 可以画出类似于机械制图中常用的三视图。

[x,y]=meshgrid(-3:0.1:3,-2:0.1:2); z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);subplot(221),surf(x,y,z),shading flat, axis([-3 3 -2 2 -0.7 1.5]);view(0,90),title('view(0,90)')subplot(222),mesh(x,y,z),axis([-3 3 -2 2 -0.7 1.5]);view(90,0),title('view(90,0)')subplot(223),mesh(x,y,z),axis([-3 3 -2 2 -0.7 1.5]);view(0,0),title('view(0,0)')subplot(224),mesh(x,y,z),axis([-3 3 -2 2 -0.7 1.5]);title('normal viewpoint')

-2 0 2-2

-1

0

1

2view(0,90)

-2 0 2

-0.5

0

0.5

1

1.5view(90,0)

-2 0 2

-0.5

0

0.5

1

1.5view(0,0)

-20

2

-20

2-0.5

00.5

11.5

normal viewpoint

Page 29: 第五讲  MATLAB 高级图形绘制技术

5.5 5.5 视角变换与三视图视角变换与三视图用 surf 将得到更光滑的图形。

[x,y]=meshgrid(-3:0.1:3,-2:0.1:2); z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);subplot(221),surf(x,y,z),shading interp, axis([-3 3 -2 2 -0.7 1.5]);view(0,90),title('view(0,90)')subplot(222),surf(x,y,z),shading interp,axis([-3 3 -2 2 -0.7 1.5]);view(90,0),title('view(90,0)')subplot(223),surf(x,y,z), shading interp,axis([-3 3 -2 2 -0.7 1.5]);view(0,0),title('view(0,0)')subplot(224),surf(x,y,z), shading interp,axis([-3 3 -2 2 -0.7 1.5]);title('normal viewpoint')

-2 0 2-2

-1

0

1

2view(0,90)

-2 0 2

-0.5

0

0.5

1

1.5view(90,0)

-2 0 2

-0.5

0

0.5

1

1.5view(0,0)

-20

2

-20

2-0.5

00.5

11.5

normal viewpoint

Page 30: 第五讲  MATLAB 高级图形绘制技术

5.6 5.6 图像文件的读写与显示图像文件的读写与显示MATLAB 提供了一组图像读写和显示功能的函数

imread 读入图像数据imwrite 向文件写图像数据imfinfo 显示图像文件信息image 显示图像

除了上述几个基本函数外, MATLAB 还提供了一个图像处理工具箱,包含了大量的图像处理函数

支持的图像格式有: bmp, jpg, hdf, pcx, png, tiff, xwd 等

Page 31: 第五讲  MATLAB 高级图形绘制技术

5.6 5.6 图像文件的读写与显示图像文件的读写与显示MATLAB 提供了一组图像读写和显示功能的函数

>> img=imread('greens.jpg');

>> whos

Name Size Bytes Class

img 300x500x3 450000 uint8 array

Grand total is 450000 elements using 450000 bytes

>> imwrite(img, 'test.bmp','bmp');

>> image(img)

Page 32: 第五讲  MATLAB 高级图形绘制技术

5.7 MATLAB5.7 MATLAB 图形输出技图形输出技术术

选择图形窗口的 Edit 下的 Copy 命令可以把图形图像赋制导系统的剪切板中,也可以用 print -device -options filename 命令格式输出到指定的设备文件上。 -device 选项意义如下表。

• 打印机直接输出 -dwin 单色打印机, -dwinc 彩色打印机

•页面描述语言格式 -dps 单色 PostScript 格式, -dpsc 彩色PostScript 格式 ; -deps 单色 EPS 文件, -depsc 彩色 EPS

文件。• 其他常用图形文件格式 -dhpg1( HP 绘图仪)、 -djpeg( J

PEG 文件格式)、 -dtiff( TIFF 文件格式)。•复制到剪切板 -dmeta 以图元文件格式, -dbitmap 位图格式。

>> print -deps aaa