matlab十行十列图形,MATLAB自学笔记(十六):三维图形绘制

一、三维图形绘制

1.曲线图绘制

plot3(X,Y,Z):X、Y、Z为同维向量时。绘制以X,Y,Z为x,y,z坐标的三维曲线;X、Y、Z为同维矩阵时,用X、Y、Z的对应列元素绘制x,y,z坐标的曲线,曲线的条数为矩阵的列数

plot3(X1,Y1,Z1,X2,Y2,Z2):绘制以X1,Y1,Z1和X2,Y2,Z2为x,y,z坐标的三维曲线

plot3(X,Y,Z,’PropertyName’,PropertyValue, …):在PropertyName所规定的曲线属性下,绘制以X,Y,Z为x,y,z坐标的三维曲线

plot3(X1,Y1,Z1,’PropertyName1′,PropertyValue1,X2,Y2,Z2,’PropertyName2′,PropertyValue2):

注:plot3指令用来表现的是单参数的三维曲线,而非双参数的三维曲线

Python

theta = 0 : .01*pi : pi*2; x = sin(theta); y = cos(theta); z = cos(4*theta);

figure

plot3(x,y,z,'LineWidth',2);hold on;

theta = 0 : .02*pi : pi*2; x = sin(theta); y = cos(theta); z = cos(4*theta);

plot3(x,y,z,'rd','MarkerSize',10,'LineWidth',2);

1

2

3

4

5

theta=0:.01*pi:pi*2;x=sin(theta);y=cos(theta);z=cos(4*theta);

figure

plot3(x,y,z,'LineWidth',2);holdon;

theta=0:.02*pi:pi*2;x=sin(theta);y=cos(theta);z=cos(4*theta);

plot3(x,y,z,'rd','MarkerSize',10,'LineWidth',2);

2.网格图绘制

三维网格图和曲面图的绘制比三维曲线图的绘制稍显复杂,主要是因为绘图数据的准备及三维图形的色彩、明暗、光照和视角等的处理

绘制函数z = f(x,y)的三维网格图的过程如下

确定自变量x和y的取值范围和取值间隔

Python

x = x1 : dx : x2; y = y1 : dy : y2;

1

x=x1:dx:x2;y=y1:dy:y2;

构成xoy平面上的自变量采样“格点”矩阵

利用‘格点’矩阵的原理生成矩阵

Python

x = x1 : dx : x2; y = y1 : dy : y2;

y = ones(size(y)) * x;

Y = y*ones(size(x));

1

2

3

x=x1:dx:x2;y=y1:dy:y2;

y=ones(size(y))*x;

Y=y*ones(size(x));

利用meshgrid指令生成‘格点’矩阵

Python

x = x1 : dx : x2; y = y1 : dy : y2;

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

1

2

x=x1:dx:x2;y=y1:dy:y2;

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

计算在自变量采样‘格点’上的函数值:Z = f(X,Y)

绘制网格图的基本mesh指令的句法格式如下

mesh(X,Y,Z):以X为x轴自变量,Y为y轴自变量,绘制网格图;X,Y均为向量,若X、Y长度为m、n,则[m,n] = size(Z)

mesh(Z):以Z为矩阵列下标为x轴自变量、行下标为y轴自变量,绘制网格图

mesh(X,Y,Z,C):C为颜色,若不定义则与mesh(X,Y,Z)相同

mesh(X,Y,Z,’PropertyName’,PropertyValue):PropertyValue用来定义网格图的属性标记

Python

x = -10 : .1 : 10; y = -10 : .1 : 10;

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

Z = -X.^2 - Y.^2 + 200;

mesh(X,Y,Z);

1

2

3

4

x=-10:.1:10;y=-10:.1:10;

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

Z=-X.^2-Y.^2+200;

mesh(X,Y,Z);

3.曲面图绘制

曲面图绘制由函数surf构成,其调用格式与mesh类似

surf(X,Y,Z)

surf(Z)

surf(X,Y,Z,C)

surf(X,Y,Z,’PropertyName’,PropertyValue)

mesh指令绘制的图形是网格划分的曲面图,而surf绘制的是平滑着色的三维曲面图

Python

[x,y,z] = peaks(25);

figure

surf(x,y,z)

mesh(x,y,z)

1

2

3

4

[x,y,z]=peaks(25);

figure

surf(x,y,z)

mesh(x,y,z)

4.光照模型

光照是一种利用方向光源照亮物体的技术。在某些情况下,这项技术能用看检测物体表面缺陷

Python

figure

surf(X,Y,Z,'FaceColor','red','EdgeColor','none');

camlight left; lighting phong

view(-15,65)

1

2

3

4

figure

surf(X,Y,Z,'FaceColor','red','EdgeColor','none');

camlightleft;lightingphong

view(-15,65)

本例子将曲面涂成红色,并移除surf指令所定义的网格线。将发光物体加到左边。增加光源、设置照明方式至phong,使用view命令改变视角,从空间的另一个不同的点观看表面(方位角-15°,仰角65°)。最后用工具栏缩放方式放大外观

基于运用漫反射、镜面反光和环境照明模型,MATLAB中还内置了surf1函数,可以画出类似函数surf产生的带色彩的曲线。

使用单一颜色映像(如灰色、纯白、铜黄、粉红)和插值色彩,会画出效果更好的曲线

surfl(X,Y,Z,S):其中S以[Sx,Sy,Sz]或[az,el]的形式定义光源方向。在没有明确定义的情况下,其默认光源是逆时针45°

Python

[X,Y,Z] = peaks(30);

subplot(121);surfl(X,Y,Z);colormap(copper),shading interp

subplot(122);surfl(X,Y,Z,[-90,30],[.55 .6 2 10]);colormap(copper),shading interp

1

2

3

[X,Y,Z]=peaks(30);

subplot(121);surfl(X,Y,Z);colormap(copper),shadinginterp

subplot(122);surfl(X,Y,Z,[-90,30],[.55.6210]);colormap(copper),shadinginterp

注:颜色插值会使打印速度降低

5.绘制等值线图

等值线图又叫等高线图

contour(Z):以z矩阵列下标为x轴自变量、行下标为y轴自变量,绘制等值线图

contour(Z,n):其中的n为所绘制的图形等值线的条数

contour(Z,v):v为向量。向量的长度为等值线的条数,且等值线的值为对应的向量的元素值

contour(X,Y,Z):其功能为 以X为x轴自变量、Y为y轴自变量,绘制等值线图;X,Y均为向量,若X、Y长度为m、n,则[m,n] = size(Z)

contour(X,Y,Z,n):其中的n为所绘制的图形等值线的条数

contour(X,Y,Z,v):v为向量。向量的长度为等值线的条数,且等值线的值为对应的向量的元素值

contour(…, LineSpec):LineSpec定义线型

Python

[X,Y,Z] = peaks(30);

figure

subplot(221);contour(X,Y,Z);axis square

subplot(222);contour(X,Y,Z,10);axis square

subplot(223);contour(X,Y,Z,-10 : 10);axis square

subplot(224);contour(X,Y,Z,':');axis square

1

2

3

4

5

6

[X,Y,Z]=peaks(30);

figure

subplot(221);contour(X,Y,Z);axissquare

subplot(222);contour(X,Y,Z,10);axissquare

subplot(223);contour(X,Y,Z,-10:10);axissquare

subplot(224);contour(X,Y,Z,':');axissquare

赞赏作者

喜欢 (1)or分享 (0)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值