Matlab系列之三维图形

在Matlab中,三维图形有:三维曲线、三维网格以及三维曲面,分别对应函数:plot3、mesh和surf,本篇将介绍些常规使用以及一些三维图形的处理。

三维曲线图

和二维曲线的命令相似,用法也与plot的类似,调用格式:

plot3(x,y,z)
功能:x,y,z如果是同长度的向量,则绘制对应的空间三维曲线;若是同阶矩阵,则绘制对应列的多条曲线。
也可以像plot函数一样对绘制的曲线类型,颜色等进行设置,具体的可用参数,使用命令“doc Chart Line Properties”查看

举例

%使用sin和cos组成三维的螺旋曲线
t = 0:pi/50:10*pi;
st = sin(t);
ct = cos(t);

figure
plot3(st,ct,t,'b^-');
xlabel('sin(t)');
ylabel('cos(t)');
zlabel('t');

结果

image-20210620111707869

三维网格图

三维网格图和三维曲线图有明显的区别,mesh可以绘制一段区间的整个曲面,不再是单条曲线,不过多曲线叠加后,更像是网格,和等下介绍的曲面还是存在一些小区别。

调用格式:mesh(x,y,z)
功能描述:根据矩阵x,y,z绘制三维曲线,x,y,z矩阵中的元素就是三维图形中各个对应的点,然后点与点进行了线的连接,线的颜色将随点的高度改变而改变。
注意事项:在使用函数前,需要先在xy平面建立网格坐标:[x,y]=meshgrid(x,y),然后再利用新的x,y计算网格上对应z的点,从而得到构建曲面所需的点,最后再使用mesh绘制整个图

举例1

%sinc函数
x=-8:.5:8;
y=x;
[X,Y] = meshgrid(x,y);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;

figure
mesh(X,Y,Z)%直接mesh(Z)也可以

结果1

image-20210620113513489

再介绍下mesh的“补充”函数meshc和meshz

举例2

%sinc函数
x=-8:.5:8;
y=x;
[X,Y] = meshgrid(x,y);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;

figure
%mesh(X,Y,Z)%直接mesh(Z)也可以
subplot(211);meshc(Z);%绘制等高线
subplot(212);meshz(Z);%绘制界线

结果2

image-20210620114256376

三维曲面图

曲面图其实就是在网格图的基础上进行了颜色填充,surf的调用格式:

surf(x,y,z)
功能描述:与mesh的一致

举例1

x=-5:5;
y=x;
[X,Y]=meshgrid(x,y);
Z=X.^2+Y.^2;

figure;
surf(X,Y,Z);
colormap cool%调色为cool

结果1

image-20210620120446560

surf也有“补充”函数:surfc和surfl

举例2

x=-5:0.1:5;
y=x;
[X,Y]=meshgrid(x,y);
Z=peaks(X,Y);

figure;
subplot(211);surfc(X,Y,Z);%等高线
subplot(212);surfl(X,Y,Z);%光照
shading INTERP%转换成阴影模式,便于结果光照现象的查看

结果2

image-20210620121436936

三维图形的修饰

有时候绘制出来的三维图形,可能对于我们信息的获取还存在一定的麻烦,因此可以通过对图形的修饰(视点位置、色彩、裁剪等),以增强图形的效果,方便信息获取,在上面三维图的绘制时,也已经用到了一些,这边再稍微系统的归纳一下。

三维图形的视点处理

视点处理,即从不同角度去观察物体,视点位置可由方位角和仰角决定,本处介绍的view函数,就有两个参数:az和el,az是azlmuth(方位角)的缩写,el是elevation(仰角)的缩写,单位都为度。具体的方向表示,可根据下方的示例图理解,没法体会的话,就等下直接从示例的图形来理解吧,系统默认采用的视点为:方位角(-37.5°)、仰角(30°),可以对应此时图上Azimuth和Elevation对应的角度方向。

image-20210620190737846

view函数介绍

view(az,el)或view([az,el])%直接设定视点位置
view([x,y,z])%将坐标系的某个具体的空间点设为视点位置,忽略向量的长度大小
view(2)%二维的状态,az = 0, el = 90
view(3)%az = –37.5, el = 30.
[az,el] = view%返回当前的方位角和仰角

举例1

%不同视点位置的peaks
subplot(221);surf(peaks);view(2);title('az=0;el=90');
subplot(222);surf(peaks);view(3);title('az=-37.5;el=30');
subplot(223);surf(peaks);view(90,0);title('az=90;el=0');
subplot(224);surf(peaks);view(-10,-10);title('az=-10;el=-10');

结果1

image-20210620202835857

举例2

close all;
figure;
mesh(peaks);%绘制多峰
el=30;%仰角30
for az=-180:180
	view(az,el);
	drawnow;
end
az=0;
for el=-180:180
	view(az,el);
	drawnow;
end

结果2

在这里插入图片描述

颜色处理

在使用mesh和surf这些函数的时候,matlab都会对其进行默认的配色,此外可以通过shading自由设置图形的表面颜色,这个已经有过简单使用了,再进行介绍下

调用格式:
shading flat %用同一种颜色配色,表面更光滑
shading faceted %系统的默认配色
shading interp %插值处理的方式配色,表面非常光滑
shading(axes_handle,...) %对指定句柄对应的图,设置shading的类型

举例

figure
subplot(1,3,1)
sphere(16)
axis equal
title('Faceted Shading (Default)')

subplot(1,3,2)
sphere(16)
shading flat
axis equal
title('Flat Shading')

subplot(1,3,3)
sphere(16)
shading interp
axis equal
title('Interpolated Shading')

结果

image-20210620205039000

此外还有个colormap的函数也可以进行配色,以前有介绍过,就不再多说了。

除了用函数进行配色外,还可以用颜色图编辑器直接对图形颜色进行重新设置,在命令窗口输入:colormapeditor

弹出以下的功能窗口,然后鼠标去点击要配色的图形,会显示对应图形的标题,然后根据需要进行配色即可。

image-20210620205608718

光照处理

在介绍surf的时候,已经出现了该字眼,不过这边用到的是独立的光照函数,即light;

调用格式:light('PropertyName',propertyvalue,...)%属性使用,自行根据命令获取:doc Light Properties;
%color,position和style三个属性

举例

[x,y,z]=sphere(20);
subplot(121);surf(x,y,z);axis equal;light('position',[0,1,1]);shading interp;hold on;
plot3(0,1,1,'ro');%做个位置标识
text(0,1,1,'light');
subplot(122);surf(x,y,z);axis equal;light('position',[1,0,1]);shading interp;hold on;
plot3(1,0,1,'ro');
text(1,0,1,'light');

结果

image-20210620211148142

不同位置light,有着明显的光照差异。

结束

画图的篇章到此算是告一段落了,接下来打算对matlab的其他工具做些介绍,估计再搞两三篇工具介绍,就差不多可以搞下应用来完结掉Matlab系列的文章了~

理想果然很丰满…


更多精彩,等你发现~


猜你喜欢

转载自blog.csdn.net/Smart_Devil/article/details/118075867