3D plots

几个重要指令,重要函数。

functions:
线图
plot3: 3D line plot
几个画表面的图
surf: 3D shaded surface plot
surfc: contour plot under a 3D shaded surface plot 轮廓画图
surface: create surface object
meshc:plot a contour graph under mesh graph
contour : contour plot of matrix
contourf: filled 2D contour plot

2D vs.3D

我们先跑一个二维的图形,以上次笔记上最后一个例程为例

我们可以把二维的图形转换为三维用matlab提供的 三位旋转按钮
三维旋转的效果:

原始2D跑出来的结果


附上代码:

x=[1:10;3:12;5:14];
imagesc(x);%显示颜色
map=[ 0 1 0;0 0.9 0;0 0.6 0;0 0.5 0;0 0.4 0;0 0.2 0];%自定义map颜色
colormap(map);%涂色,自定义颜色
colorbar;%显示右边关于色度的bar

有了这个印象,我们逐步开始看关于3D的一些指令

plot3()三维画线

画线line
看一个例程:三维空间绘制三角函数sin()

x=0:0.1:3*pi;
z1=sin(x);%三个sin函数
z2=sin(2*x);
z3=sin(3*x);
y1=zeros(size(x));
y3=ones(size(x));
y2=y3./2;
plot3(x,y1,z1,'r',x,y2,z2,'b',x,y3,z3,'g');%plot3()三维画图
grid on;%打开栅格
xlabel('x-axis');ylabel('y-axis');zlabel('z-axis');%坐标轴名称

关于代码的解释:
这里

y1=zeros(size(x));
y3=ones(size(x));
y2=y3./2;

意思是:y1这个y轴上在y=0这个面上显示。
y3=1,表示这个图在y=1这个面上显示
y2=y3/2=0.5表示这个图在y=0.5这个面上显示

程序运行结果截图:

我们可以用plot3()函数画更多的图

more 3D Line Plots更多应用

原理就是x,y,z是三个向量,(x0,y0,z0)三个点描出来,多少个点描出来多少。这样就形成了空间中的line。

两个例程

程序源代码:

t=0:pi/50:10*pi;
plot3(sin(t),cos(t),t);%x坐标是sint,y坐标是cost,这样应该是个圆,
%然后纵坐标z随着时间上升,形成三维的螺旋线
grid on;
axis square;

跑出来的结果:

下面这个例子是三维的锥线
源程序代码:

turns=40*pi;
t=linspace(0,turns,4000);%时间从0到turns,中间有4000个取样点
x=cos(t).*(turns-t)./turns;%x和y随着时间增加而减少,圆的半径减少
y=sin(t).*(turns-t)./turns;
z=t./turns;
plot3(x,y,z);
grid on;

跑出来的结果:

上面讲的都是line的图形,就是一条线在三维空间中移动。
常用的是三维的立体图 surface图形

principles for 3D surface plots贴图

surface的原理:
和line的原理不同,surface 的原理是x,y,z都是一个矩阵,x和y会形成一个网格。


meshgrid这个指令 会创建出来关于x和y的矩阵

x=-2:1:2;
y=-2:1:2;
[X,Y]=meshgrid(x,y)

执行的结果是如下的矩阵

X =-2    -1     0     1     2-2    -1     0     1     2-2    -1     0     1     2-2    -1     0     1     2-2    -1     0     1     2Y =-2    -2    -2    -2    -2-1    -1    -1    -1    -10     0     0     0     01     1     1     1     12     2     2     2     2

有了x和y形成的网格,我们就可以画图

画图基本的函数是

surface plots:mesh() and surf()

mesh得到的是网格,网格是空洞的。
surf是格子上面有贴图。
区别如下

下面通过例程查看mesh和surf怎么用
通过绘制这个函数

程序:

x=-3.5:0.2:3.5;
y=-3.5:0.2:3.5;
[X,Y]=meshgrid(x,y);
Z=X.*exp(-X.^2-Y.^2);
subplot(1,2,1);mesh(X,Y,Z);
subplot(1,2,2);surf(X,Y,Z);

绘制结果:

这个函数我们在高等数学中经常遇到,包括积分运算等等,现在我们可以通过matlab直接绘制出来其图像,简洁明了,极大地方便了我们的科研

我们再来看下一个函数

contour()轮廓

功能:把3D图中相同高度的值画在同一个二维平面上投影。

看一个例程:

x=-3.5:0.2:3.5;
y=-3.5:0.2:3.5;
[X,Y]=meshgrid(x,y);
Z=X.*exp(-X.^2-Y.^2);
subplot(2,1,1);
mesh(X,Y,Z);%画出网格图
axis square;
subplot(2,1,2);
contour(X,Y,Z);%等高线
axis square;

例程运行结果:

可以清楚看到contour投影的特点:相同高度的投影在同一圈。

Contour也有自己的变化

Various Contour plots

想让contour画出来的线更密集
1.可以在contour中加数值,让contour画线更紧密。
contour(Z,[-.45:.05:.45]);
2.也可以在contour图上标出数值。用clabel这个指令
clabel(C,h);
3.可以涂颜色
用contourf()来做。

得到的效果图:

例程:

x=-3.5:0.2:3.5;
y=-3.5:0.2:3.5;
[X,Y]=meshgrid(x,y);
Z=X.*exp(-X.^2-Y.^2);
subplot(1,3,1);
contour(Z,[-.45:.05:.45]);%用来让线更密集
axis square;
subplot(1,3,2);
[C,h]=contour(Z);
clabel(C,h);%用来标注数字
axis square;
subplot(1,3,3);
contourf(Z);%用来添加颜色
axis square;

作业:

线的密度是0.05,涂上颜色,标注数字在一张图上。

我的练习:
思路:首先我要自己先回顾出来这个的三维图形过程:首先meshgrid产生x,y的网格
然后,写出来函数表达式。之后就是contour直接绘制。

运行这个版本,发现奇怪,明明设置了contour(Z,[-0.4:0.05:0.4]);,这个线的密度间隔应该是0.05,但是发现是这样的:间隔线密度并没有变化
经过修改,发现,这里面不能存在几个contour函数,前面的contour函数被后面的contour函数执行覆盖了。

踩坑:这是一个 错误的版本 ,出现的结果如上图所示,线密度并没有改变。

x=-2:0.2:2;
y=-2:0.2:2;
[X,Y]=meshgrid(x,y);
Z=X.*exp(-X.^2-Y.^2);
contour(Z,[-0.4:0.05:0.4]);
axis square;%坐标轴显示
[C,h]=contour(Z);
clabel(C,h);%标注数字

这个题的解决如下:
只需要一行代码同时实现三个功能:[C,h]=contourf(Z,[-0.4:0.05:0.4]);clabel(C,h);%添加数字表示
改变线了密度,出现数字,颜色覆盖。

最终代码:正确的版本

x=-2:0.1:2;
y=-2:0.1:2;
[X,Y]=meshgrid(x,y);
Z=X.*exp(-X.^2-Y.^2);
[C,h]=contourf(Z,[-0.4:0.05:0.4]);
axis square;%显示坐标轴
clabel(C,h);%添加数字表示

运行结果:

下面看函数

meshc() and surfc()

功能:
combination of surface/mesh and contours
把绘制表面和网格的函数与绘制等高线的函数结合

程式案例:

x=-3.5:0.2:3.5;
y=-3.5:0.2:3.5;
[X,Y]=meshgrid(x,y);
Z=X.*exp(-X.^2-Y.^2);
subplot(1,2,1);
meshc(X,Y,Z);
subplot(1,2,2);
surfc(X,Y,Z);

执行过程:

再来角度的部分 View Angle :view()

用两个角度来看物件的位置
这里两个角度分别是:
Azimuth and Elevation

举例子,下面绘制一个三维的立体球,然后用view函数来从不同的角度查看这个球

sphere(50);
shading flat;
light('position',[1,3,2]);%添加灯光,让球更真实立体
light('position',[-3 -1 3]);
material shiny;
axis vis3d off;%不显示三维坐标系
set(gcf,'color',[1 1 1]);

画出来的结果是一个球

添加下面的代码:
view(-45,20)

给出的又是另一个视角

现在看光线的部分 Light:light()

打光的时候位置会变化
L1=light(‘position’,[-1 -1 -1]);

我们可以设置打光的位置
set(L1,‘position’,[-1,-1,-1]);

我们也可以设置光的颜色:比如绿色
set(L1,‘color’,‘g’);
可以选择位置
程序:

[X,Y,Z]=sphere(64);%球坐标系h=surf(X,Y,Z);%画出球
axis square vis3d off;%坐标轴不见
reds=zeros(256,3);
reds(:,1)=(0:256.-1)/255;%自定义颜色
colormap(reds);%上色
shading interp;
lighting phong;
set(h,'AmbientStrength',0.75,'DiffuseStrength',0.5);%设置
L1=light('position',[-1 -1 -1]);%打光的位置

运行结果:

再来

patch指令,用来画立体多边形

patch()

a graphical object containing polygons

学习到:vertex是顶点的意思(在‘facevertexCData’中)

例程:自己看一下怎么使用理解

v=[0 0 0; 1 0 0;1 1 0;0 1 0;0.25 0.25 1;0.75 0.25 1;0.75 0.75 1;0.25 0.75 1];
f=[ 1 2 3 4;5 6 7 8;1 2 6 5;2 3 7 6;3 4 8 7;4 1 5 8];
subplot(1,2,1);
patch('vertices',v,'faces',f,'facevertexCData',hsv(6),'facecolor','flat');
view(3);
axis square tight; grid on;
subplot(1,2,2);
patch('vertices',v,'faces',f,'facevertexCData',hsv(8),'facecolor','interp');
view(3);
axis square tight; grid on;

执行结果:

最后,看一下matlab画图非常专业


我把代码又敲了一遍:

load cape
X=conv2(ones(9,9)/81,cumsum(cumsum(randn(100,100)),2));
surf(X,'edgecolor','none','edgelighting','phong','facecolor','interp');
colormap(map);
caxis([-10,300]);
grid off;
axis off;

自己跑一遍的结果:

这个程序笔者还没有研究哦。后续可能会研究研究吧。

【总结】
本文记录的matlab3D画图的一些知识:
functions:
线图
plot3: 3D line plot
几个画表面的图
surf: 3D shaded surface plot
surfc: contour plot under a 3D shaded surface plot 轮廓画图
surface: create surface object
meshc:plot a contour graph under mesh graph
contour : contour plot of matrix
contourf: filled 2D contour plot
看物件角度的函数
view()
绘制立体多边形的函数
patch()

台湾国立大学郭彦甫Matlab教程笔记(13) 3D相关推荐

  1. 台湾国立大学郭彦甫Matlab教程笔记(12) advanced 2D plot 下

    台湾国立大学郭彦甫Matlab教程笔记(12) advanced 2D plot 下 上文记录的是关于统计的图标的绘制 下面我们来到另一个模块:颜色 fill()填充函数 功能:某一个封闭曲线,图上特 ...

  2. 台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix逆矩阵法)

    台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix) matrix left division左除:\ or mldivide() solvi ...

  3. 台湾国立大学郭彦甫Matlab教程笔记(21)linear equations(高斯消去法和追赶法)

    台湾国立大学郭彦甫Matlab教程笔记(21) today: linear equation 线性方程 linear system 线性系统 我们先看第一部分 linear equation 假定一个 ...

  4. 台湾国立大学郭彦甫Matlab教程笔记(20) root finding(numeric)

    台湾国立大学郭彦甫Matlab教程笔记(20) root finding(numeric) symbolic vs. numeric符号法和数值法的区别对比 symbolic 1)advantages ...

  5. 台湾国立大学郭彦甫Matlab教程笔记(17)numerical integration

    台湾国立大学郭彦甫Matlab教程笔记(17)numerical integration 数值积分 calculating the numerical value of a definite inte ...

  6. 台湾国立大学郭彦甫Matlab教程笔记(16) 数值微分 numerical differentiation

    台湾国立大学郭彦甫Matlab教程笔记(16) 数值微分 numeric differentiation 复习:diff()函数用来计算vector前后 entry的差异 数值微分继续 various ...

  7. 台湾国立大学郭彦甫Matlab教程笔记(15)polynomial integration 多项式积分

    台湾国立大学郭彦甫Matlab教程笔记(15) Polynomial integration多项式积分 一个多项式和它的积分如下 MATlAB中如何计算积分? polynomial integrati ...

  8. 台湾国立大学郭彦甫Matlab教程笔记(14)polynomial differentiation多项式微分

    台湾国立大学郭彦甫Matlab教程笔记(14) today: polynomial differentiation and integration多项式微分与积分 numerical differen ...

  9. 台湾国立大学郭彦甫Matlab教程笔记(11) advanced 2D plots 上

    台湾国立大学郭彦甫Matlab教程笔记(11) today: 1.advanced 2D plots 2.color space色彩使用 3.3D plots 图形概览,做研究的时候需要选择图形 sp ...

  10. 台湾国立大学郭彦甫Matlab教程笔记(9) basic plotting

    台湾国立大学郭彦甫Matlab教程笔记(9) today: 1.basic plotting 2.graphical objects properties basics matlab has a po ...

最新文章

  1. 2022-2028年中国三网融合产业深度调研及投资前景预测报告
  2. 头条面试归来,有些话想和Java程序员说!
  3. 解决multiple definition of的方法
  4. boost::mpl模块实现find_if相关的测试程序
  5. 程序清单3-1 测试能否对标准输入设置偏移量
  6. Ubuntu16.04 - 安装RabbitVCS,linux下的TortoiseSVN!!!
  7. KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结
  8. android bmob获取数据,Android基于bmob后端云实现数据读取
  9. 【免费下载】2021年6月份热门报告盘点
  10. HDU3746 Cyclic Nacklace KMP求循环节
  11. 求知成瘾,却无作品 的思考 - stoneniqiu - 博客园
  12. windows之电脑开机出现 this product is covered by one or more of the following prtents
  13. 联想电脑预装office自动卸载工具
  14. WEBRTC浅析(五)视频Nack包的发送判断逻辑以及数据流
  15. jsp中空格字符怎么写_jsp空格符号怎么打
  16. 利用Autolisp提取天正墙体位置坐标
  17. 如何创建Roadmap产品路线图
  18. EXCEL如何使用查找函数vlookup
  19. 地下水深度去除铁锰的滤料详解
  20. 校园网免认证停机卡免流服务器被迫关停

热门文章

  1. 关于如何生成随机记录
  2. asp.net面试题收集[2006.4.28更新]
  3. mysql sql 字符串字段保留数字_sql中取字符串中的数字语句_MySQL
  4. 【控制】《多智能体系统一致性与复杂网络同步控制》郭凌老师-第6章-Lurie 型动态网络的簇同步
  5. 200528更新arduino开发ESP8266配置方法,入门必看,esp8266开发板库离线安装包package2.7.1...
  6. 【大神】软件建模仿真空气冷凝集水器,末日饮水荒野求生水资源解决方案
  7. BRCM5.02编译九:cannot find -lncurses
  8. 大数据方面核心技术有哪些?新人必读
  9. java 环境配置 maven 环境配置
  10. 11.13. Highslide