MATLAB使用slice函数绘制三维数据的特定切片 您所在的位置:网站首页 slice()函数 MATLAB使用slice函数绘制三维数据的特定切片

MATLAB使用slice函数绘制三维数据的特定切片

2024-06-29 20:17| 来源: 网络整理| 查看: 265

问题提出

        表示多晶体材料织构的三维取向分布函数(f=f(φ1,φ,φ2))是一个非常复杂的函数,难以精确的用解析函数表达,通常采用离散空间函数值来表示取向分布函数,Data.txt是三维取向分布函数的一个实例。由于数据量非常大,不便于分析,需要借助图形来分析。请你编写一个matlab程序画出如下的几种图形来分析其取向分布特征:

        (1)用Slice函数给出其整体分布特征;

        (2)用pcolor或contour函数分别给出(φ2=0, 5, 10, 15, 20, 25, 30, 35 … 90)切面上f分布情况(需要用到subplot函数);

        (3) 用plot函数给出沿α取向线(φ1=0~90,φ=45,φ2=0)的f分布情况。

        题目要求如上,其实就是提取三维数据点阵后用slice函数,subplot和contour函数画等高线图

        本题具体代码如下:

filein = 'D:\Data.txt'; fileout = 'fileout.txt'; fidin = fopen(filein, 'r'); fidout = fopen(fileout, 'w'); while ~feof(fidin) tline = fgetl(fidin); if double(tline(1)) == double(' ') fprintf(fidout, '%s\n\n', tline); end end fclose(fidin); fclose(fidout); % 读取数据 W = importdata('fileout.txt'); n = size(W, 2); % 初始化一个三维数组 v v = zeros(n,n,n); % v 是从 W 中提取数据的三维数组 for i = 1:n v(:,:,i) = W((i-1)*n+1:i*n, 1:n); end % 准备三维网格数据 x = 0:5:90; y = 0:5:90; z = 0:5:90; [x1, y1, z1] = meshgrid(x, y, z); %使用 slice 函数绘制三维数据的特定切片 slice(x1, y1, z1, v, [45, 90], [45, 90], [0, 45]); % 做第一题图 for i=1:19 subplot(5,4,i); contour(x,y,v(:,:,i)) %作第二题图 end plot(x,v(10,:,1),'o-') %作第三题图 gtext('\Phi1=45','FontSize',12) gtext('\Phi2=0','FontSize',12)

运行效果如下:

第一题图 第二题图 第三题图

代码讲解

filein = 'D:\Data.txt'; %输入文件路径 fileout = 'fileout.txt'; %输出文件路径 fidin = fopen(filein, 'r'); %打开输入文件进行读取 fidout = fopen(fileout, 'w'); %打开输出文件进行写入 while ~feof(fidin) %读取输入文件的一行 tline = fgetl(fidin); if double(tline(1)) == double(' ') %检查第一个字符是否为空格 fprintf(fidout, '%s\n\n', tline); %如果是,写入输出文件,并添加两个换行符 end end fclose(fidin); %关闭输入文件 fclose(fidout); %关闭输出文件

        第一部分代码用于处理待处理数据文件,由于文件中含有其他无关信息,需要根据特定需求筛选数据,再用文件输入替代大型矩阵输入。

        输入输出文件对比如下

         

W = importdata('fileout.txt'); %读取数据 n = size(W, 2); %确定数据的列数 v = zeros(n,n,n); % 初始化一个三维数组 v for i = 1:n v(:,:,i) = W((i-1)*n+1:i*n, 1:n);%将数据从W导入到v的特定层 end % 生成三维网格 x = 0:5:90; y = 0:5:90; z = 0:5:90; [x1, y1, z1] = meshgrid(x, y, z);

        第二部分代码将已经处理好的数据文件拆分成19部分,每部分是19*19的矩阵,对应第二题中不同φ2的取值,每个φ2的值对应一张需要画出的图片。原文件Data.txt实际上单独给出了每个φ值对应的矩阵,但被第一部分代码删除了,因此要在这里重新分离。

部分三维数组v的取值

        

Data.txt文件部分内容

         

slice(x1, y1, z1, v, [45, 90], [45, 90], [0, 45]); % 使用slice函数绘制v的特定切片 for i=1:19 subplot(5,4,i); %将窗口分割成5行4列,在循环中选择当前的子图区域进行绘图 contour(x,y,v(:,:,i)) %绘制等高线 end plot(x,v(10,:,1),'o-') %选取第十行第一列的数据作为y轴 gtext('\Phi1=45','FontSize',12) %用于添加文本注释 gtext('\Phi2=0','FontSize',12)

        第三部分代码用于画图,[45, 90]定义了xoy平面的旋转角度,[45, 90],[0, 45]分布定义yoz和zox平面的旋转角度,用于调整视角。slice用于绘制特定切片,contour用于绘制等高线。第十行第一列为α取向线。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有