Matlab三维绘图

绘制三维图plot3

cpp 复制代码
t=0:pi/50:10*pi;
x=sin(t);
y=cos(t);
z=t;
plot3(x,y,z);

产生栅格数据点meshgrid

这个接口在绘制三维图像里面相当重要,很多时候要将向量变成矩阵才能绘制三维图。

cpp 复制代码
x=0:0.5:5;
y=0:1:10;
[X,Y]=meshgrid(x,y);
plot(X,Y,'o');

x和y是向量,产生出来的X和Y就是矩阵了

画出来的图是这样的

绘制三维网格曲面图mesh

cpp 复制代码
x=-8:0.5:8;
y=x;
[X,Y]=meshgrid(x,y);
R=sqrt(X.^2+Y.^2)+eps;
Z=sin(R)./R;
mesh(X,Y,Z);

可以对比下几个相近的接口使用效果

cpp 复制代码
x=-8:0.5:8;
y=x;
[X,Y]=meshgrid(x,y);
R=sqrt(X.^2+Y.^2)+eps;
Z=sin(R)./R;
subplot(2,2,1);
plot3(X,Y,Z);%只能连成一条一条线,不能做成网格线
subplot(2,2,2);
mesh(X,Y,Z);
subplot(2,2,3);
meshc(X,Y,Z);%在z=0的面上绘制等值线
subplot(2,2,4);
meshz(X,Y,Z);%在图形底部跟外侧添加边框线,感觉就像加了外壁

隐藏线显示和关闭hidden

hidden的使用时机跟hold不同,hold是绘制图形之前就要执行,hidden是绘制图形之后再执行。

hidden on是开启隐藏线功能,可以理解为关闭透视效果,Matlab是正人君子,所以默认是这个。

hidden off是关闭隐藏线功能,可以理解为开启透视效果。

cpp 复制代码
x=-8:0.5:8;
y=x;
[X,Y]=meshgrid(x,y);
R=sqrt(X.^2+Y.^2)+eps;
Z=sin(R)./R;
subplot(2,1,1);
mesh(X,Y,Z);
hidden on;
subplot(2,1,2);
mesh(X,Y,Z);
hidden off;

绘制三维阴影曲面图surf

英文翻译叫阴影,不过我觉得对于中国人应该理解为填充。

shading可以选择颜色分布方式

cpp 复制代码
x=-8:0.5:8;
y=x;
[X,Y]=meshgrid(x,y);
R=sqrt(X.^2+Y.^2)+eps;
Z=sin(R)./R;
subplot(2,2,1);
surf(X,Y,Z);%默认是截面式颜色分布
subplot(2,2,2);
surf(X,Y,Z);
shading faceted;%截面式颜色分布
subplot(2,2,3);
surf(X,Y,Z);
shading interp;%插补式颜色分布
subplot(2,2,4);
surf(X,Y,Z);
shading flat;%平面式颜色分布

还有另外几个类似的接口

cpp 复制代码
x=-8:0.5:8;
y=x;
[X,Y]=meshgrid(x,y);
R=sqrt(X.^2+Y.^2)+eps;
Z=sin(R)./R;
subplot(3,1,1);
surf(X,Y,Z);%默认的阴影曲面图
subplot(3,1,2);
surfc(X,Y,Z);%带等高线阴影曲面图
subplot(3,1,3);
surfl(X,Y,Z);%具有光照效果的阴影曲面图

设置视角位置view

得先了解方位角跟仰角指的是哪两个角度,方位角azimuth缩写是az,仰角又叫高度角elevation缩写是el。

cpp 复制代码
subplot(2, 2, 1);
ezmesh(@peaks);%@peaks表示将peaks函数作为输入参数传递给ezmesh接口,ezmesh根据输入的函数绘制三维图
view(3);%3代表默认的三维视角
[a, b]=view;%获取当前视角设置的参数,a是方位角,b是仰角
title(mat2str([a, b]));
subplot(2, 2, 2);
ezmesh(@peaks);
view(2);%默认的二维视角
[a, b]=view;
title(mat2str([a, b]));
subplot(2,2,3);
ezmesh(@peaks);
view([30 45]);%方位角30度,仰角45度
[a, b]=view;
title (mat2str([a, b]));
subplot(2,2,4);
ezmesh(@peaks);
view([1 1 sqrt(2)]);%向量(1,1,sqrt(2))所指方向
[a, b]=view;
title(mat2str([a, b]));

也可以在画图完毕后通过查看->照相机工具栏,里面的工具来设置视角位置。

设置坐标轴axis

跟二维绘图用法一样

cpp 复制代码
subplot(1,3,1);
ezsurf(@(t,s)(sin(t).*cos(s)),@(t,s)(sin(t).*sin(s)),@(t,s)cos(t),[0,2*pi,0,2*pi]);
axis auto;title('auto');
subplot(1,3,2);
ezsurf(@(t,s)(sin(t).*cos(s)),@(t,s)(sin(t).*sin(s)),@(t,s)cos(t),[0,2*pi,0,2*pi]);
axis equal;title('equal');
subplot(1,3,3);
ezsurf(@(t,s)(sin(t).*cos(s)),@(t,s)(sin(t).*sin(s)),@(t,s)cos(t),[0,2*pi,0,2*pi]);
axis square;title('square');
相关推荐
Lu Yao_20 分钟前
用golang实现二叉搜索树(BST)
开发语言·数据结构·golang
沐土Arvin43 分钟前
前端图片上传组件实战:从动态销毁Input到全屏预览的全功能实现
开发语言·前端·javascript
找不到、了1 小时前
Spring-Beans的生命周期的介绍
java·开发语言·spring
(・Д・)ノ1 小时前
python打卡day29
开发语言·python
若水晴空初如梦1 小时前
QT聊天项目DAY11
开发语言·qt
有杨既安然2 小时前
Python高级特性深度解析:从熟练到精通的跃迁之路
开发语言·python·数据挖掘·flask
为美好的生活献上中指2 小时前
java每日精进 5.18【文件存储】
java·开发语言·minio·七牛云存储·s3·七牛云
winfredzhang3 小时前
使用Python和Selenium打造一个全网页截图工具
开发语言·python·selenium
mahuifa3 小时前
(10)python开发经验
开发语言·python
_龙小鱼_3 小时前
Kotlin扩展简化Android动画开发
android·开发语言·kotlin