021 三维数据可视化

1-1 曲线图绘制

与二维绘图命令类似,在三维坐标下有三维的基本绘图命令plot3,其使用方法与plot相仿。plot3的调用格式如下。

格式一: p l o t 3 ( x , y , z ) plot3(x, y, z) plot3(x,y,z)

x , y , z x, y, z x,y,z相同长度的向量,则根据向量x, y, z绘制空间三维曲线。
如果 x , y , z x, y, z x,y,z为同阶矩阵,则绘制对应列的多条曲线

格式二: p l o t 3 ( x , y , z , ′ s ′ ) plot3(x, y, z, 's') plot3(x,y,z,s)

按字符串s设置的线型、颜色、标记符号绘制三维空间曲线。字符串s的设置与 p l o t ( ) plot() 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 ) z=f(x, y) z=f(x,y)的三维网线时

首先应通过 [ x , y ] = m e s h g r i d ( x , y ) [x,y]=meshgrid(x, y) [x,y]=meshgrid(x,y)语句在xy平面上建立网格坐标,然后利用x和y计算每一个网格点上z坐标的大小,该坐标就定义了曲面上的点。最后由 m e s h ( z ) mesh(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);
>> 
1EdMQ.png

meshz函数在mesh函数的基础上增加了绘制边界面的功能,其调用格式与mesh一样。图12.3是运行 m e s h z ( x , y , z ) meshz(x, y, z) 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)
1Eg5h.png
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)
1EYsy.png

1-3 曲面图的绘制

在三维网线上,对网线之间的网线元进行颜色填充就成了三维曲面图。MATLAB提供的surf函数具有这样的功能。其调用格式如下:

surf(x,y,z)

最常用的曲面图调用格式,绘制由3个矩阵所指定的带色参数的网状表面图,轴的刻度决定于x、y、z的范围,或当前对轴的设定,颜色与网的高度成正比。

1-3-1 example: z = x 2 + y 2 z=x^2+y^2 z=x2+y2 绘制曲面图
>> 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-.')
1EsRX.png

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

1Epdf.png

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 绘制隐函数步骤

  1. 坐标范围确定;
  2. 使用meshgrid函数产生网格点;
  3. 隐函数定义,可利用@符号获取其函数句柄,实现对函数的操作;
  4. 计算坐标空间范围内的格点函数值val;
  5. 调用p=isosurface(x, y, z, val,0)函数计算隐函数等值点的位置并返回到p;
  6. 调用patch函数对曲面进行修饰

2-4 example:绘制 f ( x , y , z ) = x 2 + y 2 + z 2 − 1 = 0 f(x,y,z)=x^2+y^2+z^2-1=0 f(x,y,z)=x2+y2+z21=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 习题

  1. 用plot,fplot绘制函数 y = c o s ( t a n x ) y=cos(tan x) y=cos(tanx)的图形。
  2. 用eplot绘制摆线:

KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ x &= a(t-sint)…

的图形。
3. 用plot绘制阿基米德螺线 r = a θ r=aθ r=aθ和三叶玫瑰线 r = a c o s ( 3 θ ) r=acos(3θ) r=acos(3θ)

x=-0.5*pi:pi/100:0.5*pi;
y=cos(tan(x));
plot(x,y)

1V7pf.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值