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');
相关推荐
落落落sss13 分钟前
MybatisPlus
android·java·开发语言·spring·tomcat·rabbitmq·mybatis
简单.is.good31 分钟前
【测试】接口测试与接口自动化
开发语言·python
Yvemil71 小时前
MQ 架构设计原理与消息中间件详解(二)
开发语言·后端·ruby
程序员是干活的1 小时前
私家车开车回家过节会发生什么事情
java·开发语言·软件构建·1024程序员节
我是陈泽1 小时前
一行 Python 代码能实现什么丧心病狂的功能?圣诞树源代码
开发语言·python·程序员·编程·python教程·python学习·python教学
优雅的小武先生1 小时前
QT中的按钮控件和comboBox控件和spinBox控件无法点击的bug
开发语言·qt·bug
虽千万人 吾往矣1 小时前
golang gorm
开发语言·数据库·后端·tcp/ip·golang
创作小达人1 小时前
家政服务|基于springBoot的家政服务平台设计与实现(附项目源码+论文+数据库)
开发语言·python
不想当个技术宅1 小时前
【梯级水电站调度优化】基于自适应权值优化粒子群算法
matlab·粒子群算法·梯级水电站调度优化
郭二哈1 小时前
C++——list
开发语言·c++·list