MATLAB 绘图3 绘制3维图像

以下所有函数可以由Name-Value设置的属性均需参考官方文档,不同函数间不一定通用

一.绘制3维图像
1.绘制3维线图:

[<p>] = plot3([<ax>,]<X1>,<Y1>,<Z1>[,"<LineSpec1>"..."<Name>",<Value>]):绘制3维线图
  #参数说明:其他参数同plot()
    X,Y,Z:指定数据点的x,y,z坐标;为array/matrix
      要绘制1个Line对象,X/Y/Z为长度相同的array
      要在同一坐标区中绘制多个Line对象,X/Y/Z中至少有1个为matrx
      使用matrix的语法相当于X1,Y1,Z1,X2,Y2,Z2...替代
    p: 返回1个Line对象或Line对象数组
      #使用p修改该Line对象的属性

#实例:
>> t = 0:pi/50:10*pi;
>> st = sin(t);
>> ct = cos(t);
>> plot3(st,ct,t)

>> t = 0:pi/500:pi;
>> xt1 = sin(t).*cos(10*t);
>> yt1 = sin(t).*sin(10*t);
>> zt1 = cos(t);
>> xt2 = sin(t).*cos(12*t);
>> yt2 = sin(t).*sin(12*t);
>> zt2 = cos(t);
>> plot3(xt1,yt1,zt1,xt2,yt2,zt2)

>> t = 0:pi/500:pi;
>> X(1,:) = sin(t).*cos(10*t);
>> X(2,:) = sin(t).*cos(12*t);
>> X(3,:) = sin(t).*cos(20*t);
>> Y(1,:) = sin(t).*sin(10*t);
>> Y(2,:) = sin(t).*sin(12*t);
>> Y(3,:) = sin(t).*sin(20*t);
>> Z = cos(t);
>> plot3(X,Y,Z)

>> t = 0:pi/500:40*pi;
>> xt = (3 + cos(sqrt(32)*t)).*cos(t);
>> yt = sin(sqrt(32) * t);
>> zt = (3 + cos(sqrt(32)*t)).*sin(t);
>> plot3(xt,yt,zt)

>> t = 0:pi/20:10*pi;
>> xt = sin(t);
>> yt = cos(t);
>> plot3(xt,yt,t,'o')#数据点之间不被连接

2.绘制曲面图:

[<s>] = surf([<ax>,<X>,<Y>,]<Z>[,<C>,"<Name>",<Value>]):绘制曲面图
  #绘制1个三维曲面,该曲面具有实色边和实色面,颜色由z坐标决定
  #参数说明:其他参数同plot3()
    Z:指定数据点的z坐标;为matrix
    X,Y:指定数据点的x,y坐标;为matrix;默认为Z中元素的行/列索引
    C:指定曲面颜色
    s:返回1个图曲面对象
      #使用s修改曲面对象的属性

#实例:
>> [X,Y] = meshgrid(1:0.5:10,1:20);
>> Z = sin(X) + cos(Y);
>> C = X.*Y;
>> surf(X,Y,Z,C)
colorbar

>> [X,Y,Z] = peaks(25);
>> CO(:,:,1) = zeros(25);#red的灰度值
>> CO(:,:,2) = ones(25).*linspace(0.5,0.6,25);#green的灰度值
>> CO(:,:,3) = ones(25).*linspace(0,1,25);#blue的灰度值
>> surf(X,Y,Z,CO)
#########################################################
[<s>] = mesh([<ax>,<X>,<Y>,]<Z>[,<C>,"<Name>",<Value>]):绘制网格曲面图
  #创建1个网格曲面图;该图有实色边,颜色由z坐标决定,无实色面
  #参数说明:同surf()

#实例:
>> [X,Y] = meshgrid(-8:.5:8);
>> R = sqrt(X.^2 + Y.^2) + eps;
>> Z = sin(R)./R;
>> mesh(X,Y,Z)
#########################################################
[<s>] = surface([<ax>,<X>,<Y>,]<Z>[,<C>,"<Name>",<Value>]):绘制基本曲面图
  #功能和surf()基本相同,区别在于surface()在绘制前不调用newplot,也不使用图窗/坐标区的NextPlot属性值
  #也就是说,surface()会向当前坐标区添加曲面图,而不删除其他图形对象或重置坐标区属性
  #参数说明:同surf

#实例:
>> [X,Y] = meshgrid(1:0.5:10,1:20);
>> Z = sin(X) + cos(Y);
>> surface(X,Y,Z)
#默认情况下,surface()使用2维视图显示,可view(3)将视图设置为3维视图
>> view(3)

二.绘制等高线图
1.绘制曲面图的等高线图:

[<sc>] = surfc([<ax>,<X>,<Y>,]<Z>[,<C>,"<Name>",<Value>]):绘制曲面图即及对应的等高线图
  #参数说明:其他参数同surf()
    sc:返回包含图曲面对象和等高线对象的图形数组
      sc(1)为曲面图对象,sc(2)为等高线图对象
      #使用sc修改曲面图对象和等高线图对象

#实例:
>> [X,Y] = meshgrid(-3:.125:3);
Z = peaks(X,Y);
C = X.*Y;
surfc(X,Y,Z,C)
colorbar

2.绘制网格曲面图的等高线图:

[<sc>] = meshc([<ax>,<X>,<Y>,]<Z>[,<C>]):绘制网格曲面图及其对应的等高线图
  #参数说明:同surfc()

#实例:
>> [X,Y] = meshgrid(-3:.125:3);
>> Z = peaks(X,Y);
>> meshc(X,Y,Z)

3.绘制矩阵的等高线图:

[<M>,<c>] = contour([<ax>,<X>,<Y>,]<Z>[,<levels>,"<LineSpec>,"<Name>",<Value>]):绘制矩阵的等高线图
  #会自动选择要显示的等高线;默认情况下,不同层级的等高线使用不同的颜色
  #参数说明:X,Y同surfc(),其他参数同plot()
    Z:指定数据点的的高度值
      #如果Z中某些元素为NaN,这些元素对应的位置不会绘制等高线(即等高线在此处断开)
    levels:指定绘制等高线的层级(高度)
      如为标量值n,在n个自动选择的层级上显示等高线
      如为单调递增的向量,在该参数指定的层级绘制等高线
      如为2元素行向量[k,k],在1个层级(k)绘制等高线
    LineSpec:指定等高线的线型和颜色,会忽略'o'等指定标记样式的符号
      #如果设置了颜色,所有等高线将使用同一种颜色
    Name,Value:设置其他属性
      'ShowText':是否显示等高线的标签;可为"on"/"off"(默认值)
    M:返回等高线矩阵,其中包含每个层级的顶点的(x, y)坐标
    c:返回等高线对象c
      #使用c设置等高线对象的属性

#实例:
>> x = linspace(-2*pi,2*pi);
>> y = linspace(0,4*pi);
>> [X,Y] = meshgrid(x,y);
>> Z = sin(X)+cos(Y);
>> contour(X,Y,Z)

>> [X,Y,Z] = peaks;
>> contour(X,Y,Z,20)

>> [X,Y,Z] = peaks;
>> v = [1,1];
>> contour(X,Y,Z,v)

>> x = -2:0.2:2;
>> y = -2:0.2:3;
>> [X,Y] = meshgrid(x,y);
>> Z = X.*exp(-X.^2-Y.^2);
>> contour(X,Y,Z,'ShowText','on')

>> Z = peaks;
>> Z(:,26) = NaN;
>> contour(Z)
#########################################################
[<M>,<c>] = contourf([<ax>,<X>,<Y>,]<Z>[,<levels>,"<LineSpec>,"<Name>",<Value>]):绘制被填充的等高线图
  #即在contour()的基础上,在不同层级的等高线间填充上不同颜色
  #而不同层级的等高线使用相同的颜色
  #参数说明:同contour()

#实例:
>> Z = peaks;
>> contourf(Z)

>> x = linspace(-2*pi,2*pi);
>> y = linspace(0,4*pi);
>> [X,Y] = meshgrid(x,y);
>> Z = sin(X) + cos(Y);
>> contourf(X,Y,Z,10)

>> [X,Y,Z] = peaks(50);
>> contourf(X,Y,Z,[2 3],'ShowText','on')

三.绘制3维图像的辅助函数
1.创建网格

[<X>,<Y>,<Z>] = meshgrid(<x>[<y>,<z>]):创建2/3维网格
  #常用于绘制曲面图时的数据
  #参数说明:
    x:指定网格各点的x坐标;为array
    y:指定网格各点的y坐标;为array;默认同x
    z:指定网格各点的z坐标;为array;默认同x
    X,Y,Z:每行/列是x/y/z的1个副本;为matrix

#实例:
>> x = 1:3;
>> y = 1:5;
>> [X,Y] = meshgrid(x,y)
X = 5×3

     1     2     3
     1     2     3
     1     2     3
     1     2     3
     1     2     3

Y = 5×3

     1     1     1
     2     2     2
     3     3     3
     4     4     4
     5     5     5

>> x = 0:2:6;
>> y = 0:1:6;
>> z = 0:3:6;
>> [X,Y,Z] = meshgrid(x,y,z);
>> F = X.^2 + Y.^2 + Z.^2;
>> gridsize = size(F)
gridsize = 1×3

     7     4     3

2.调整视角:
在这里插入图片描述

[<caz>,<cel>] = view([<ax>,]<az>,<el>):设置照相机视线
  #参数说明:
    az,el:分别指定方位角和仰角
    ax:指定坐标区;默认为当前坐标区
    caz,cel:返回新视线的方位角和仰角

[<caz>,<cel>] = view():返回当前视线的方位角和仰角

[<caz>,<cel>] = view([<ax>,]<v>):设置照相机视线
  #参数说明:
    v:指定视角;为2/3元素array
      如为2元素array,格式:[ax,el],分别指定方位角和仰角
      如为3元素array,格式[x,y,z],分别指定从图框中心点到照相机位置所形成向量的x/y/z坐标

[<caz>,<cel>] = view([<ax>,]<dim>):使用默认视线
  #参数说明:
    dim:指定使用2维还是3维绘图的默认视线;可为2(2维)/3()3维
      #即使维度相同,默认视线对不同类型的图也可能不同

3.创建光源:

[<h>] = light([<ax>,]"<PropertyName>",<PropertyValue>):创建光源(Light)对象
  #光源仅影响补片和曲面图对象
  #无法看到Light对象本身,但可以看到光源对补片和曲面图对象的影响
  #也可以指定坐标区范围的环境光颜色以照亮这些对象
  #但是仅当坐标区中至少存在1个Light对象且该对象可见时,环境光才可见
  #参数说明:
    PropertyName,PropertyValue:设置Light对象的属性;详情参加官方文档
      "Position":光源位置,为[<x>,<y>,<z>],分别指定x/y/z坐标
      "Color":光的颜色;值可为[<R> <G> <B>](各分量均属于[0,1])/十六进制颜色码/名称;默认为[1 1 1]
      "Style":光源类型;可为"infinite"(光源在无穷远处,通过"Position"指定方向)/"local"(通过"Position指定位置")
    ax:指定坐标区;默认为gca(当前坐标区)
    h:返回创建的Light对象

#实例:
>> light('Position',[-1 0 0],'Style','local')

四.绘制空间多边形

[<p>] = fetch([<ax>,]<X>,<Y>[,<Z>],<C>[,"<Name>",<Value>]):绘制看见多边形
  #参数说明:
    X,Y,Z:指定顶点的x/y/z坐标;Z默认全部为0
      #以指定顶点的顺序连接这些顶点
      #如果为矩阵,每列对应1个多边形
    C:指定多边形颜色
    Name,Value:指定其他属性
    ax:指定坐标区
    p:返回包含所有多边形的数据的补片对象
      #使用p查询并修改补片对象的属性

[<p>] = fetch([<ax>,]'XData',X,'YData',Y[,'ZData',Z,"<Name>",<Value>]):类似fetch(<X>,<Y>[,<Z>]),区别在于无需指定颜色

[<p>] = fetch([<ax>,]<S>[,"<Name>",<Value>]):使用结构体S创建多边形
  #字段名对应于补片属性名,字段值对应于属性值
  可同时创建1个或多个多边形

[<p>] = fetch([<ax>,]"Faces",<F>,"Vertices",<V>[,"<Name>",<Value>]):创建1/多个多边形
  #也可以创建线条(非闭合的多边形)
  #参数说明:
    F:指定要连接的顶点(依次连接F中的顶点)
      如为array,创建1个多边形
      如为matrix,创建多个多边形(每行对应1个多边形)
      #如果各个多边形顶点数不同,用NaN填充F
    V:指定顶点的值
      #每行指定1个顶点,从左到右依次指定x/y/z坐标,2元素时z坐标默认为0

#实例:
>> x = [0 1 1 0];
>> y = [0 0 1 1];
>> patch(x,y,'red')
>> x2 = [2 5; 2 5; 8 8];
>> y2 = [4 0; 8 2; 4 0];
>> patch(x2,y2,'green')

>> v = [0 0; 1 0; 1 1; 0 1];
>> f = [1 2 3 4];
>> patch('Faces',f,'Vertices',v,'FaceColor','red')
>> v2 = [2 4; 2 8; 8 4; 5 0; 5 2; 8 0];
>> f2 = [1 2 3; 
         4 5 6];
>> patch('Faces',f2,'Vertices',v2,'FaceColor','green')

>> x = [2 5; 2 5; 8 8];
>> y = [4 0; 8 2; 4 0];
>> c = [0 3; 6 4; 4 6];
>> figure
>> patch(x,y,c)
>> colorbar
#相当于:
>> v = [2 4; 2 8; 8 4; 5 0; 5 2; 8 0];
>> f = [1 2 3; 4 5 6];
>> col = [0; 6; 4; 3; 4; 6];
>> figure
>> patch('Faces',f,'Vertices',v,'FaceVertexCData',col,'FaceColor','interp');
>> colorbar

#仅有边线上色,内部无填充:
>> v = [0 0; 1 0; 1 1];
>> f = [1 2 3];
>> figure
>> patch('Faces',f,'Vertices',v,...
    'EdgeColor','green','FaceColor','none','LineWidth',2);

>> clear S
>> S.Vertices = [2 4; 2 8; 8 4; 5 0; 5 2; 8 0];
>> S.Faces = [1 2 3; 4 5 6];
>> S.FaceVertexCData = [0; 1];
>> S.FaceColor = 'flat';
>> S.EdgeColor = 'red';
>> S.LineWidth = 2;
>> figure
>> patch(S)

>> v1 = [2 4; 2 8; 8 4];
>> f1 = [1 2 3];
>> figure
>> patch('Faces',f1,'Vertices',v1,'FaceColor','red','FaceAlpha',.3);
>> v2 = [2 4; 2 8; 8 8];
>> f2 = [1 2 3];
>> patch('Faces',f2,'Vertices',v2,'FaceColor','blue','FaceAlpha',.5);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值