【基础知识笔记】021 三维数据可视化
1-1 曲线图绘制
与二维绘图命令类似,在三维坐标下有三维的基本绘图命令plot3,其使用方法与plot相仿。plot3的调用格式如下。
格式一:\(plot3(x, y, z)\)
若\(x, y, z\)为相同长度的向量,则根据向量x, y, z绘制空间三维曲线。
如果\(x, y, z\)为同阶矩阵,则绘制对应列的多条曲线
格式二:\(plot3(x, y, z, 's')\)
按字符串s设置的线型、颜色、标记符号绘制三维空间曲线。字符串s的设置与\(plot()\)命令的设置相同。
>> t=0:pi/10:10*pi; >> x=cos(t); >> y=sin(t); >> plot3(x,y,t,'bo-.'); >> xlabel('x=cos(t)'); >> ylabel('y=sin(t)'); >> zlabel('z'); >> title('三维螺旋线') >>
1-2 三维网线图绘制
MATLAB提供的函数mesh用来绘制三维网线图。
该命令可以绘出在某一区间内完整的曲面,而不是单根曲线。其基本调用格式如下:
mesh(x,y,z)
根据矩阵x, y和z绘制彩色的空间三维网线图。x, y和z中对应的元素为三维空间上的点,点与点之间用线连接。其中网线的颜色随网点高度的改变而改变。
在绘制二元函数\(z=f(x, y)\)的三维网线时
首先应通过\([x,y]=meshgrid(x, y)\)语句在xy平面上建立网格坐标,然后利用x和y计算每一个网格点上z坐标的大小,该坐标就定义了曲面上的点。最后由\(mesh(z)\)命令完成三维网线图的绘制。
1-2-1 example:绘制$z=x e{-x2 - y^2} $
>> x=-2:0.2:2; >> y=x; >> [x,y]=meshgrid(x,y); >> z=x.*exp(-x.^2)-y.^2; >> mesh(x,y,z); >> z=x.*exp(-x.^2-y.^2); >> mesh(x,y,z); >>

meshz函数在mesh函数的基础上增加了绘制边界面的功能,其调用格式与mesh一样。图12.3是运行\(meshz(x, y, z)\)的结果。
>> x=-2:0.2:2; >> y=x; >> [x,y]=meshgrid(x,y); >> z=x.*exp(-x.^2)-y.^2; >> mesh(x,y,z); >> z=x.*exp(-x.^2-y.^2); >> meshz(x,y,z)

1-2-1 example:绘制$z=x e{-x2 - y^2} $的等高线图
>> x=-2:0.2:2; >> y=x; >> [x,y]=meshgrid(x,y); >> z=x.*exp(-x.^2)-y.^2; >> mesh(x,y,z); >> z=x.*exp(-x.^2-y.^2); >> meshc(x,y,z)

1-3 曲面图的绘制
在三维网线上,对网线之间的网线元进行颜色填充就成了三维曲面图。MATLAB提供的surf函数具有这样的功能。其调用格式如下:
surf(x,y,z)
最常用的曲面图调用格式,绘制由3个矩阵所指定的带色参数的网状表面图,轴的刻度决定于x、y、z的范围,或当前对轴的设定,颜色与网的高度成正比。
1-3-1 example:\(z=x^2+y^2\) 绘制曲面图
>> x=-5:5; >> y=x; >> [x,y]=meshgrid(x,y); >> z=x.^2+y.^2; >> surf(x,y,z); >> hold on; >> colormap(hot) >> stem3(x,y,z,'bo-.')

与mesh函数类似,与surf函数对应的也有surfl和surfc函数,surfl函数在绘制好的曲面上基于当前调色板颜色进行光照处理,surfc函数在绘制好的曲面图下加等高线。将范例12-4中的surf(x, y, z)分别替换为surfl(x, y, z)和surfc(x, y, z)后运行程序的结果如图所示。

2 三维隐函数的绘制
利用MATLAB的等值面函数isosurface,并在patch函数的配合之下就可以轻松完成
2-1 isosurface 等值面函数
调用格式:
fv=isosurface(X, Y, Z, V, isovalue)。
返回某个等值面(由isovalue指定)的表面(faces)和顶点(vertices)数据,存放在结构体fv中(fv由vertices、faces两个域构成)。
X、Y和Z的取值构成立体空间的一些栅格节点,V对应的是这些栅格点上的函数值数据。
如果是画隐函数v=f(x, y,z)=0的三维图形,则等值面的数值为isovalue=0。
2-2 patch 函数
调用格式:
patch(x,y,c)
此格式以平面坐标(X, Y)为顶点,构造平面多边形,C是RGB颜色向量。
patch(x,y,z,c)
此格式以空间三维坐标(X, Y, Z)为顶点,构造空间三维曲面,C是RGB颜色向量。
patch(fv)
此格式通过包含vertices、faces两个域的结构体fv来构造三维曲面,fv可以直接由等值面函数isosurface得到,例如patch(isosurface(X, Y, Z, V,0))。
2-3 绘制隐函数步骤
- 坐标范围确定;
- 使用meshgrid函数产生网格点;
- 隐函数定义,可利用@符号获取其函数句柄,实现对函数的操作;
- 计算坐标空间范围内的格点函数值val;
- 调用p=isosurface(x, y, z, val,0)函数计算隐函数等值点的位置并返回到p;
- 调用patch函数对曲面进行修饰
2-4 example:绘制 \(f(x,y,z)=x^2+y^2+z^2-1=0\)
>> clear; >> xlimit=[-2 2]; >> ylimit=[-2 2]; >> zlimit=[-2 2]; >> gd=[30,30,30];%设置三个坐标轴的格点数,越多绘制出来的越精细。 >> f=@(x,y,z) x.^2+y.^2+z.^2-1 %定义隐函数表达式如果不含有某个变量,那就要用0*y之类表示, f = @(x,y,z)x.^2+y.^2+z.^2-1 >> xlinspace(xlimit(1),xlimit(2),gd(1));%定义x变量的向量; 未定义函数或变量 'xlinspace'。 是不是想输入: >> x=linspace(xlimit(1),xlimit(2),gd(1));%定义x变量的向量; >> y=linspace(ylimit(1),ylimit(2),gd(2));%定义x变量的向量; >> z=linspace(zlimit(1),zlimit(2),gd(3));%定义x变量的向量; >> [x.y,z]=meshgrid(x,y,z); 字段赋值赋给非结构体数组对象。 >> [x,y,z]=meshgrid(x,y,z); >> val=f(x,y,z);%根据网格点计算函数值 >> [f,v]=isosurface(x,y,z,val,0);%isosurface()利用等值点绘制曲面 >>p=patch('Faces',f,'Vertices',v,'CData',v(:,3),'facecolor','none','Edgecolor','flat') >> grid on; >> view(3) >>
3 习题
- 用plot,fplot绘制函数\(y=cos(tan x)\)的图形。
- 用eplot绘制摆线:
的图形。
3. 用plot绘制阿基米德螺线\(r=aθ\)和三叶玫瑰线\(r=acos(3θ)\)
x=-0.5*pi:pi/100:0.5*pi; y=cos(tan(x)); plot(x,y)
本文来自博客园,作者:FE-有限元鹰,转载请注明原文链接:https://www.cnblogs.com/aksoam/p/17084392.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律