• matlab学习笔记8 基本绘图命令-三维绘图


    一起来学matlab-matlab学习笔记8

    基本绘图命令_6 三维绘图

    觉得有用的话,欢迎一起讨论相互学习~Follow Me

    参考书籍
    《matlab 程序设计与综合应用》张德丰等著 感谢张老师的书籍,让我领略到matlab的便捷
    《MATLAB技术大全》葛超等编著 感谢葛老师的书籍,让我领略到matlab的高效

    三维绘图命令

    三维绘图命令plot3

    • plot3命令将绘制二维图形的函数plot的特性扩展到三维空间图形。函数格式除了包括第三维的信息(如Z方向)之外,与二维函数plot相同。其调用格式如下。

      • plot3(x,y,z):当x,y和z是相同的向量时,则绘制以x,y和z元素为坐标的三维曲线;当x,y和z是同型矩阵时,则绘制以x,y和z元素为坐标的三维曲线,且曲线的条数等于矩阵的列数。
      • plot3(x,y,z,'s'):s是指定绘制三维曲线的线型、数据点形和颜色的字符串,省略s时,将自动选择线型、数据点形和颜色。
    • 使用plot3绘制三维螺旋曲线图

    t=0:pi/50:10*pi;
    plot3(sin(t),cos(t),t,'g*')
    grid
    

    在这里插入图片描述

    绘制空间曲面

    • 三维空间曲面可以绘制出在某一区间内完整的曲面,而不是单根曲线。三维网格图是将邻近的网格顶点(x,Y)对应曲面上的点(X,Y,Z)用线条连接起来形成的。利用mesh和surf绘制三维网线图和曲面图。其中mesh(X,Y,Z)是绘制网格曲面,surf(X,Y,Z)是绘制光滑曲面。

      • mesh(x,y,z,c):绘制由x、y和z指定的参数曲面。x和y必须为向量。若x和y的长度为m和n,则z必须为m×n的矩阵,c是颜色映射数组,决定图形的颜色。
      • mesh(z)和mesh(x,y,z):绘制三维网格图。当只有参数z时,以z矩阵的行下标作为x坐标轴,把z的列下标当作坐标轴;x和y分别为x和y坐标轴的自变量。当有x,y和z参数时,绘制出由坐标(x,y,z)确定的三维网格图形
      • surf(x,y,z,c):完整地画出由c指定用色的曲面图,在完整调用格式中,4个输入量必须是维数相同的矩阵。它们要求x和y是自变量“格点”矩阵;z是格点上的函数矩阵;c是指定各点用色的矩阵,可以默认。默认时,默认着色矩阵是z,即c=z。
    • 画三维函数立体网状图

    x=linspace(-2, 2, 20);      % 在x轴上取20点
    y=linspace(-2, 2, 20);      %在y轴上取20点
    [xx,yy]=meshgrid(x, y);     % xx和yy都是21x21的矩阵
    zz=xx.*exp(-xx.^2-yy.^2);   % 计算函数值,zz也是21x21的矩阵
    mesh(xx, yy, zz);          % 画出立体网状图
    

    在这里插入图片描述

    • 使用surf命令将以上立体网格图改为三维曲面图
    x=linspace(-2, 2, 20);      % 在x轴上取20点
    y=linspace(-2, 2, 20);      %在y轴上取20点
    [xx,yy]=meshgrid(x, y);     % xx和yy都是21x21的矩阵
    zz=xx.*exp(-xx.^2-yy.^2);   % 计算函数值,zz也是21x21的矩阵
    surf(xx, yy, zz);          % 画出立体曲面图
    

    在这里插入图片描述

    高级三维绘图改进命令

    在这里插入图片描述

    peaks % 最原始版本图形 F1
    [x,y,z]=peaks;
    figure;
    meshz(x,y,z);  % 画上一个参考平面 F2
    figure;
    waterfall(x,y,z); % 瀑布流水形状网线图 F3
    figure;
    meshc(x,y,z); % 网格线和等高线 F4
    figure;
    surfc(x,y,z); % 同时画出曲面图和等高线图 F5
    
    • F1
      在这里插入图片描述
    • F2
      在这里插入图片描述
    • F3
      在这里插入图片描述
    • F4
      在这里插入图片描述
    • F5
      在这里插入图片描述

    高级三维绘图改进命令

    在这里插入图片描述

    p=peaks;    %peaks 为系统提供的多峰函数
    subplot(2,2,1);
    mesh(peaks,p);
    view(-37.5,30);  %指定子图 1 的视点
    title('azimuth=-37.5,elevation=30');
    subplot(2,2,2);
    mesh(peaks,p);
    view(-17,60);   %指定子图 2的视点
    title('azimuth=-17,elevation=60');
    subplot(2,2,3);
    mesh(peaks,p);
    view(-90,0);    %指定子图 3 的视点
    title('azimuth=-90,elevation=0');
    subplot(2,2,4);
    mesh(peaks,p);
    view(-7,-10);    %指定子图 4的视点
    title('azimuth=-7,elevation=10')
    

    在这里插入图片描述

    三维图形的光照控制

    在这里插入图片描述

    x= -1.5:0.2:1.5;y=-1:0.2:1;
    [X,Y]=meshgrid(x,y);
    Z=sqrt(4-X.^2/9-Y.^2/4);
    view(45,45)
    subplot(2,2,1);surfl(X,Y,Z, [0,45],[.1  .6  .4  10]);
    shading interp
    subplot(2,2,2);surfl(X,Y,Z, [20,45],[.3  .6  .4  10]);
    shading interp
    subplot(2,2,3);surfl(X,Y,Z, [40,45],[.6  .6  .4  10]);
    shading interp
    subplot(2,2,4);surfl(X,Y,Z, [60,45],[.9  .6  .4  10]);  
    shading interp
    

    在这里插入图片描述

    • matlab提供了灯光设置的函数,其调用格式为: light('Color',选项1,'Style',选项2,'Position',选项3)
    [x,y,z]=sphere(20);
    subplot(1,2,1);
    surf(x,y,z);
    

    在这里插入图片描述

    [x,y,z]=sphere(20);
    subplot(1,2,1);
    surf(x,y,z);
    axis equal; % 横轴纵轴的坐标定标系数设为相同值
    

    在这里插入图片描述

    [x,y,z]=sphere(20);
    subplot(1,2,1);
    surf(x,y,z);
    axis equal; % 横轴纵轴的坐标定标系数设为相同值
    light('Posi',[1,1,1]);
    

    在这里插入图片描述

    [x,y,z]=sphere(20);
    subplot(1,2,1);
    surf(x,y,z);
    axis equal; % 横轴纵轴的坐标定标系数设为相同值
    light('Posi',[-1,-1,0]);
    

    在这里插入图片描述

    • 光滑表示
    [x,y,z]=sphere(20);
    subplot(1,2,1);
    surf(x,y,z);
    axis equal; % 横轴纵轴的坐标定标系数设为相同值
    light('Posi',[-1,-1,0]);
    shading interp;
    

    在这里插入图片描述

    • 三维点图
    plot3(0,1,1,'*');
    text(0,1,1,' light');
    

    在这里插入图片描述

    • 三维图片拼接
      在这里插入图片描述
    [x,y,z]=sphere(20);
    subplot(1,2,1);
    surf(x,y,z);
    axis equal; % 横轴纵轴的坐标定标系数设为相同值
    light('Posi',[-1,-1,0]); % 灯光位置
    shading interp; % 光滑
    hold on;
    plot3(0,1,1,'p');
    text(0,1,1,' light');
    subplot(1,2,2);
    surf(x,y,z);
    axis equal;
    light('Posi',[1,0,1]); % 灯光位置
    shading interp; % 光滑
    hold on;
    plot3(1,0,1,'p');
    text(1,0,1,' light');
    

    柱面和球面的表达

    1. 绘制柱面的cylinder命令:[X,Y,Z]=cylinder(r,n)表示生成半径为r,高度为1的矩阵x,y,z,利用这三个矩阵可以绘制出半径为r,高度为1的柱体,圆柱体的圆周有指定的n个距离相同的点。
    figure
    subplot(2,2,1)
    [x,y,z]=cylinder(3,2)
    surf(x,y,z)
    subplot(2,2,2)
    [x,y,z]=cylinder(3,3)
    surf(x,y,z)
    subplot(2,2,3)
    [x,y,z]=cylinder(3,4)
    surf(x,y,z)
    subplot(2,2,4)
    t=0:pi/10:2*pi;
    [X,Y,Z]=cylinder(2+cos(t),30);
    surf(X,Y,Z)
    

    在这里插入图片描述
    2. 绘制球面的sphere命令:[x,y,z]=sphere(n)表示生成三个阶数为(n+1) * (n+1) 的矩阵x,y,z,利用这是三个矩阵可以绘制出圆心位于原点,半径为1的单位球体。

    figure
    subplot(2,2,1)
    [x,y,z]=sphere(100)
    surf(x,y,z)
    subplot(2,2,2)
    [x,y,z]=sphere(100)
    plot3(x,y,z)
    subplot(2,2,3)
    [x,y,z]=sphere(100)
    surfl(x,y,z)
    subplot(2,2,4)
    [x,y,z]=sphere(100)
    mesh(x,y,z)
    

    在这里插入图片描述

  • 相关阅读:
    全局比对与动态规划
    汉诺塔游戏的递归解析
    scikit-learn 多分类混淆矩阵
    Python argparse 子命令
    优雅的查看json文件
    Python数据结构和算法学习笔记4
    Python学习笔记29
    Python学习笔记28
    Python数据结构和算法学习笔记3
    Python数据结构和算法学习笔记2
  • 原文地址:https://www.cnblogs.com/cloud-ken/p/11699933.html
Copyright © 2020-2023  润新知