专题四MATLAB绘图-3

简介: 专题四MATLAB绘图

五、三维曲面

1、平面网格数据的生成

(1)利用矩阵运算生成

例子:

x=[2:6];
y=[3:8].';
X=ones(size(y))*x;
Y=y*ones(size(x));


则构成的平面网格中第3行第2列网格点的坐标就是(X32 ,Y32),即(3,5)。

(2)利用meshgrid函数生成

[X,Y]=meshgrid(x,y)

其中,参数x、y为向量,存储网格点坐标的X、Y为矩阵。

x=[2:6];
y=[3:8].';
[X,Y]=meshgrid(x,y)

若根据每一个网格点上的x、y坐标求函数值z,则得到函数值矩阵Z。矩阵X、Y、Z中的各个列向量,对应于一条曲线数据点的坐标。

例子:绘制空间曲线


x=[2:6];
y=[3:8]';
[X,Y]=meshgrid(x,y);
Z=randn(size(X));
plot3(X,Y,Z)
grid on

55a80bd8112a3713dc6126899a8cca64_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JpY2FyZG8y,size_16,color_FFFFFF,t_70.png

2、绘制三维曲面

(1)mesh函数和surf函数

mesh(x,y,z,c)

surf(x,y,z,c)

其中x,y是网格坐标矩阵,z是网格点的高度矩阵,c用于指定在不同高度下的曲面颜色。c省略时,颜色的设定正比于图形的高度。

例子:绘制三维曲面图z=xe^ (-x2-y2)

t=-2:0.2:2;
[X,Y]=meshgrid(t);
Z=X.*exp(-X.^2-Y.^2);
subplot(1,3,1)
mesh(X,Y,Z);
title('mesh函数')
subplot(1,3,2)
surf(X,Y,Z);
title('surf函数')
subplot(1,3,3)
plot3(X,Y,Z);
title('plot3函数')
grid on

10b7f49e6a96f703e979b0c475826cf0_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JpY2FyZG8y,size_16,color_FFFFFF,t_70.png

(2)mesh函数和surf函数的其他调用格式

mesh(z,c)

sufr(z,c)

当x,y省略时,z矩阵的第2维下标当作x轴坐标,z矩阵的第1维下标当作y轴坐标。

t=1:5;
z=[0.5*t;2*t;3*t];
mesh(z);

446599d5513c90445cba2fad5ec7b0ce_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JpY2FyZG8y,size_16,color_FFFFFF,t_70.png

(3)带等高线的三维网格曲面函数meshc

(4)带底座的三维网格曲面函数meshz

(5)具有等高线的曲面函数surfc

(6)具有光照效果的曲面函数surfl

例子:用以上四种绘制函数z=(x-1)2+(y-2)2-1的曲面图。其中x∈[0,2],y∈[1,3]。

[x,y]=meshgrid([0:0.1:2],[1:0.1:3]);
z=(x-1).^2+(y-2).^2-1;
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')

c62dec962da7f95a66beb933341f1cb3_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JpY2FyZG8y,size_16,color_FFFFFF,t_70.png

3、标准三维曲面

(1)sphere函数

[x,y,z]=sphere(n)

产生3个(n+1)阶的方阵,采用这3个矩阵可以绘制出圆心位于原点、半径为1的单位球体。

(2)cylinder函数

[x,y,z]=cylinder(R,n)

其中,参数R是一个向量,存放柱面各个等间隔高度上的半径,n表示在圆柱圆周上有n个间隔点,默认为20个间隔点。


  • 例子:用cylinder函数分别绘制柱面、花瓶和圆锥面
subplot(1,3,1);
[x,y,z]=cylinder;
surf(x,y,z);
subplot(1,3,2);
t=linspace(0,2*pi,40);
[x,y,z]=cylinder(2+cos(t),30);
surf(x,y,z);
subplot(1,3,3);
[x,y,z]=cylinder(0:0.2:2,30);
surf(x,y,z);

8c6797b21769767009541ead1fe8dc8f_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JpY2FyZG8y,size_16,color_FFFFFF,t_70.png

  • 例子:用cylinder函数绘制两个相互垂直且直径相等的圆柱面的相交图形。
[x,y,z]=cylinder(1,60);
z=[-1*z(2,:);z(2,:)];#将原先z从[0,……,0;1,……,1]变成[-1,……,-1;1,……,1]
surf(x,y,z);
hold on
surf(y,z,x);
axis equal

ccd512e537ced01b6ee1053093788c5f_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JpY2FyZG8y,size_16,color_FFFFFF,t_70.png

(3)peaks函数

peaks函数是以下的多峰函数表达式。x∈[-3,3];y∈[-3,3]

Z = peaks; 返回一个 49×49 矩阵。

Z = peaks(n); 返回一个 n×n 矩阵。

Z = peaks(V); 返回一个 n×n 矩阵,其中 n = length(V)。

Z = peaks(X,Y); 在给定的 X 和 Y(必须大小相同)处计算 peaks 并返回大小相同的矩阵。

subplot(2,2,1);
peaks(10);
title('peaks(10)')
subplot(2,2,2);
peaks;
title('peaks')
subplot(2,2,3);
peaks(-3:0.2:3)
title('peaks(-3:0.2:3)')
subplot(2,2,4);
[x,y]=meshgrid(-2:0.1:2,0:0.1:5);
peaks(x,y);
title('peaks(x,y)')

805eca8e3114d5971575229eed3ebb51_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JpY2FyZG8y,size_16,color_FFFFFF,t_70.png

4、fmesh函数和fsurf函数

用于绘制参数方程定义的曲面

fsurf(funx,funy,funz,uvlims)

fmesh(funx,funy,funz,uvlims)

其中,funx,funy,funz代表定义曲面x、y、z坐标的函数,通常采用函数句柄的形式。uvlims为funx,funy,funz的自变量的取值范围,用4元向量[umin,umax,vmin,vmax]描述,默认为[-5,5,-5,5]

例子:绘制螺旋曲面x=usinv;y=-ucosv;z=v;u∈(-5,5),v∈(-5,2)

funx=@(u,v)u.*sin(v);
funy=@(u,v)-u.*cos(v);
funz=@(u,v)v;
subplot(1,2,1)
fsurf(funx,funy,funz,[-5,5,-5,2])
title('fsurf')
subplot(1,2,2)
fmesh(funx,funy,funz,[-5,5,-5,2])
title('fmesh')


5、fimplicit3函数

fimplicit3(f,interval) 为 x、y 和 z 指定绘图区间。

例子:在 x 和 y 的默认区间 [-5 5] 绘制由函数image.png描述的双曲线。

f = @(x,y,z) x.^2 + y.^2 - z.^2;
fimplicit3(f)

04f1bfd8ae715195dcf3db126559392c_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JpY2FyZG8y,size_16,color_FFFFFF,t_70.png


六、图形修饰处理

1、视点处理

  • 方位角与仰角


(1)view函数的基本用法

view(az,el)

其中,az为方位角,el为仰角,系统默认方位角-37.5°,仰角30°

例子:绘制函数z=(x-1)2+(y-2)2-1曲面,并从不同视点展示曲面。

[x,y]=meshgrid(0:0.1:2, 1:0.1:3);
z=(x-1).^2+(y-2).^2-1;
subplot(2,2,1); mesh(x,y,z)
title('方位角=-37.5{\circ},仰角=30{\circ}')
subplot(2,2,2); mesh(x,y,z)
view(0,90);title('方位角=0{\circ},仰角=90{\circ}')
subplot(2,2,3); mesh(x,y,z)
view(90,0); title('方位角=90{\circ},仰角=0{\circ}')
subplot(2,2,4); mesh(x,y,z)
view(-45,-60); title('方位角=-45{\circ},仰角=-60{\circ}')

e2e23d8ba3d9e56d417a8329b772db4c_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JpY2FyZG8y,size_16,color_FFFFFF,t_70.png

(2)view函数的其他用法

view(x,y,z)

view(2):指从二维平面观察图形,即方位角为0°,仰角为90°

view(3)


2、色彩处理

(1)颜色的向量表示

向量元素在[0,1]范围内取值,3个元素以此表示红、绿、蓝3种颜色的相对亮度,称为RGB三元组。


(2)色图colormap

  • 色图矩阵
    色图是m行3列的矩阵,每一行是RGB三元组,定义了一个包含m种颜色的列表


内建色图

是64行3列的矩阵

  • 指定当前图形使用的色图
    colormap cmapname
    colormap(cmap)
surf(peaks)%色图为系统默认
colormap hot%将色图变为hot

4f28d6cac91f1f7631c020ac6d79f552_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JpY2FyZG8y,size_16,color_FFFFFF,t_70.png

  • 创建色图矩阵
  • 色图矩阵的每一行是RGB三元组,可以自定义色图矩阵,也可以用MATLAB提供的函数来定义。
    例子:创建一个灰色系列色图矩阵。
c=[0,0.2,0.4,0.6,0.8,1]';
cmap=[c,c,c];%也可以用 cmap=gray(6)来定义
surf(peaks)
colormap(cmap)

585540b1ecc62eafda9d306b41b141a1_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JpY2FyZG8y,size_16,color_FFFFFF,t_70.png

(3)三维图形表面的着色

可以用shading函数来改变着色方式。

shading faceted:将每个网格片用其高度对应的颜色进行着色,网格线是黑色,这是默认着色方式。

shading flat:每个网格片用同一个颜色进行着色,且网格线也用相应的颜色。

shading interp:网格片内采用颜色插值处理。

例子:使用同一色图,以不同的着色方式绘制圆锥体。

[x,y,z]= cylinder(pi:-pi/5:0,10);
colormap(lines);
subplot(1,3,1);
surf(x,y,z); shading flat
subplot(1,3,2);
surf(x,y,z); shading interp
subplot(1,3,3);
surf(x,y,z);

6a5c4ecdd64cbf86b32b2e7e9f912c07_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JpY2FyZG8y,size_16,color_FFFFFF,t_70.png


3、图形的裁剪处理

将图形中需要裁剪部分对应的函数值设置为NaN,这样在绘制图形时,函数值为NaN的部分将不显示出来,从而达到对图形裁剪的目的。


  • 例子:绘制3/4圆
t=linspace(0,2*pi,100);
x=sin(t);
y=cos(t);
p=y>0.5;%y中大于0.5的元素为1,其他的为0
y(p)=NaN;%将值为1的元素对应的y的元素赋为NaN
plot(x,y)
axis([-1.1,1.1,-1.1,1.1])
axis square
grid on

b2ba6349a731c7091793da475a53462a_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JpY2FyZG8y,size_16,color_FFFFFF,t_70.png


  • 例子:绘制3/4球面
[x,y,z]=sphere(60);
p=z>0.5;
z(p)=NaN;
surf(x,y,z)
axis([-1,1,-1,1,-1,1])
axis equal
view(-45,20)

056112a488770bb3a059e35bf417fef9_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JpY2FyZG8y,size_16,color_FFFFFF,t_70.png


七、交互式绘图工具

1、“绘图”选项卡

“绘图”选项卡的工具条提供了绘制图形的基本命令。

  • “所选内容”命令组:用于显示已选中用于绘图的变量;
  • “绘图”命令组:提供了绘制各种图形的命令;
  • “选项”命令组:用于设置绘图时是否新建图形窗口。


2、绘图工具

(1)显示绘图工具

  • “显示绘图工具和停靠图形”按钮


  • 命令行窗口输入命令
    plottools

(2)绘图工具的组成

  • 图形选项板
  • 绘图浏览器
  • 属性编辑器

11301841369d88950791e71784162b49_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JpY2FyZG8y,size_16,color_FFFFFF,t_70.png

3、图形窗口菜单和工具栏

(1)工具栏


(2)图形窗口菜单

图形绘制完成之后,可以用“文件”菜单中的“生成代码”命令,将实施在图形上的这些操作命令输出成脚本文件。也可以用“保存”命令将图形窗口内容保存为fig文件


总结

目录
相关文章
|
15天前
|
编解码 资源调度
MATLAB | 绘图配色第九期带高斯分布的直方图
MATLAB | 绘图配色第九期带高斯分布的直方图
24 0
|
15天前
|
编解码
MATLAB | 科研绘图第十一期动态趋势图
MATLAB | 科研绘图第十一期动态趋势图
16 0
|
15天前
|
存储 编解码
MATLAB | 科研绘图第十八期散点密度图
MATLAB | 科研绘图第十八期散点密度图
26 0
|
15天前
|
编解码
MATLAB | 科研绘图第十三期表示散点分布的双柱状统计图
MATLAB | 科研绘图第十三期表示散点分布的双柱状统计图
20 0
|
15天前
|
编解码
MATLAB | 科研绘图第十七期双Y轴图
MATLAB | 科研绘图第十七期双Y轴图
16 0
|
15天前
|
存储 编解码
MATLAB | 科研绘图第十九期散点密度图强化版
MATLAB | 科研绘图第十九期散点密度图强化版
26 0
|
15天前
|
存储 编解码
MATLAB | 科研绘图第二十期散点密度双柱状图
MATLAB | 科研绘图第二十期散点密度双柱状图
23 0
|
15天前
|
移动开发
MATLAB | SCI绘图配色第1期 | 点线图 | 刺客伍六七之暗影宿命第1集
MATLAB | SCI绘图配色第1期 | 点线图 | 刺客伍六七之暗影宿命第1集
40 0
|
15天前
|
编解码
MATLAB | SCI 绘图配色第 2 期 | 三维柱状图 | 画江湖之不良人
MATLAB | SCI 绘图配色第 2 期 | 三维柱状图 | 画江湖之不良人
28 0
|
15天前
|
编解码
MATLAB | SCI绘图配色第三期 | 二维柱状图 | 一人之下
MATLAB | SCI绘图配色第三期 | 二维柱状图 | 一人之下
14 0

热门文章

最新文章

相关产品