台湾国立大学郭彦甫Matlab教程笔记(13) 3D
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跑出来的结果
附上代码:
有了这个印象,我们逐步开始看关于3D的一些指令
plot3()三维画线
画线line
看一个例程:三维空间绘制三角函数sin()
关于代码的解释:
这里
意思是: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;跑出来的结果:
下面这个例子是三维的锥线
源程序代码:
跑出来的结果:
上面讲的都是line的图形,就是一条线在三维空间中移动。
常用的是三维的立体图 surface图形
principles for 3D surface plots贴图
surface的原理:
和line的原理不同,surface 的原理是x,y,z都是一个矩阵,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怎么用
通过绘制这个函数
程序:
绘制结果:
这个函数我们在高等数学中经常遇到,包括积分运算等等,现在我们可以通过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()来做。
得到的效果图:
例程:
作业:
线的密度是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函数来从不同的角度查看这个球
画出来的结果是一个球
添加下面的代码:
view(-45,20)
给出的又是另一个视角
现在看光线的部分 Light:light()
打光的时候位置会变化
L1=light(‘position’,[-1 -1 -1]);
我们可以设置打光的位置
set(L1,‘position’,[-1,-1,-1]);
我们也可以设置光的颜色:比如绿色
set(L1,‘color’,‘g’);
可以选择位置
程序:
运行结果:
再来
patch指令,用来画立体多边形
patch()
a graphical object containing polygons
学习到:vertex是顶点的意思(在‘facevertexCData’中)
例程:自己看一下怎么使用理解
执行结果:
最后,看一下matlab画图非常专业
我把代码又敲了一遍:
自己跑一遍的结果:
这个程序笔者还没有研究哦。后续可能会研究研究吧。
【总结】
本文记录的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的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 台湾国立大学郭彦甫Matlab教程笔记(
- 下一篇: 台湾国立大学郭彦甫Matlab教程笔记(