Matlab 应用之绘制三维图形(综合篇)

   上帖子介绍了Matlab三维绘图的基础内容(见 http://www.jishulink.com/content/post/280288), 

并留下一个思考题,本文就通过对这个思考题的讲解,将三维绘图的命令融汇贯通。

  Step 1.数据分析

   在做任何Matlab图形,或者说使用任何Matlab函数的时候,数据分析是最重要的步骤。因为:

   1. 通过数据分析指导数据结构,才能正确使用函数;

   2. 通过数据分析,可以对数据有一个感性的认识,这在很多问题上是至关重要的,也是经验的体现;


   好了,我们先看看思考题的数据,如图 1所示。

blob.png

图 1.数据截图

  分析:

        1. 数据由一个44行,3列的矩阵组成;

        2. 要求绘制的是图像为,x坐标为第一列数据,y坐标为第二列数据,z坐标为第三列数据;

        3. 第一列数据总体是递增的,应该说是一个阶梯状的数据;

        4. 在每个x轴阶梯上,y轴的数据都是重复[5 10 15 20 25 30]的;

        6. 按照y轴数据重复了8个周期;

        7. y轴的前6个周期都是6组数据[5 10 15 20 25 30];

        8. y轴的后两个周期都是4组数据 [5 10 15 20];

  

   以上就是我通过分析得到数据的8个特点,其实x轴数据和y轴数据,实现的就是格点矩阵,也就是meshgrid函数的功能,我们可以不用x轴与y轴的数据,只用z轴的数据,然后用meshgrid矩阵生成x,y轴的数据,这一点要深刻认识格点矩阵的本质,在本文的最后将讨论格点矩阵的结构。

    Step 2.代码讲解


 

clc

clf

clear all; 

load('data.mat');                 %载入数据,在文档中会一并给出,就是z轴的数据

x_0=500:500:3000;                 %生成x轴的格点分段一[500 1000 1500 2000 2500 3000]

y_0=5:5:30;                       %生成y轴的格点分段一[5 10 15 20 25 30] 

[xx_0,yy_0]=meshgrid(x_0,y_0);    %根据x,y轴格点分段一生成格点矩阵一

Z_0=reshape(Z(1:36),[6,6]);       %使得z轴数据的1到36行,组成6*6的矩阵形式,以便搭配格点矩阵一使用

surf(xx_0,yy_0,Z_0);              %做出曲面图一

hold on                           %保持图形

x_1=3000:250:3500;                %生成x轴的格点分段二[3000 3250 3500]

y_1=5:5:20;                       %生成y轴的格点分段二[5 10 15 20] 

[xx_1,yy_1]=meshgrid(x_1,y_1);    %根据x,y轴格点分段二生成格点矩阵二

Z_1_1=[Z(31:34);Z(37:end)];       %抽取出与格点矩阵搭配的Z轴数据

Z_1=reshape(Z_1_1,[4,3]);         %将抽取的Z轴数据组成4*3的形式,搭配格点矩阵二

surf(xx_1,yy_1,Z_1);              %做出曲面图二


说明:

     1.为什么要分图形一与二

回答: 见数据分析 7,8两点;

     2.为什么第二个曲面的x 要从 3000开始,而不是 3250

回答:如果从3250开始,图形将发生断裂,从3000开始,可以实现曲面的“缝合”; 

 

     Step 3.绘制结果


blob.png

                                   图 2.绘制后的结果


blob.png

图 3.未缝合出现的断面 


  用文中所示的代码出的图如图2所示,如果不使用本文的图像“缝合技术”,将出现图3的断面。

     

   Step 4.meshgrid 函数数据


运行代码


x_0=500:500:3000;                 %生成x轴的格点分段一[500 1000 1500 2000 2500 3000]

y_0=5:5:30;                       %生成y轴的格点分段一[5 10 15 20 25 30] 

[xx_0,yy_0]=meshgrid(x_0,y_0);    %根据x,y轴格点分段一生成格点矩阵一


   我们来看看所生成的格点矩阵式什么款式的。


blob.png

图 4.xx_0 数据结构

blob.png

图 5.yy_0 数据结构


可以看到:

           1.xx_0与yy_0都是6*6的矩阵;

           2. xx_0的数据每行都是一样的,由[500 1000 1500 2000 2500 3000] 构成;

           3. yy_0的数据每列都是一样的,由[5 10 15 20 25 30]构成;  

运行

     

Z_0=reshape(Z(1:36),[6,6]);       %使得z轴数据的1到36行,组成6*6的矩阵形式,以便搭配格点矩阵一使用

 我们看看与之搭配的Z_0是什么样子的



blob.png

图 6 Z_0数据结构


可以看到,Z_0 也应该是一个6*6的矩阵,每一列,对应每一个y轴周期


本案例相关代码及数据见 http://www.jishulink.com/content/doc/4ff96c69-23fc-4bff-9a0d-9de3a97d763c


登录后免费查看全文
立即登录
App下载
技术邻APP
工程师必备
  • 项目客服
  • 培训客服
  • 平台客服

TOP

5
48
3