前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Matlab系列之三维图形

Matlab系列之三维图形

作者头像
狂人V
发布2021-06-29 14:53:49
1.6K0
发布2021-06-29 14:53:49
举报
文章被收录于专栏:电子狂人

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

三维曲线图

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

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

举例

代码语言:javascript
复制
%使用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');

结果

三维网格图

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

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

举例1

代码语言:javascript
复制
%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

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

举例2

代码语言:javascript
复制
%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

三维曲面图

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

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

举例1

代码语言:javascript
复制
x=-5:5; 
y=x; 
[X,Y]=meshgrid(x,y); 
Z=X.^2+Y.^2; 
 
figure; 
surf(X,Y,Z); 
colormap cool%调色为cool

结果1

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

举例2

代码语言:javascript
复制
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

三维图形的修饰

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

三维图形的视点处理

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

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

代码语言:javascript
复制
%不同视点位置的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

举例2

代码语言:javascript
复制
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

ps:本来想搞GIF动图的,但是帧数太多,就直接视频传上来了.....

颜色处理

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

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

举例

代码语言:javascript
复制
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')

结果

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

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

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

光照处理

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

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

举例

代码语言:javascript
复制
[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');

结果

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

结束

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

理想果然很丰满..........

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子狂人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 三维曲线图
    • 举例
      • 结果
      • 三维网格图
        • 举例1
          • 结果1
            • 举例2
              • 结果2
              • 三维曲面图
                • 举例1
                  • 结果1
                    • 举例2
                      • 结果2
                      • 三维图形的修饰
                        • 三维图形的视点处理
                          • view函数介绍
                            • 举例1
                            • 结果1
                            • 举例2
                            • 结果2
                          • 颜色处理
                            • 举例
                            • 结果
                          • 光照处理
                            • 举例
                            • 结果
                        • 结束
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档