精华内容
下载资源
问答
  • matlab 三维立体图生成器(双眼视差)
  • matlab三维立体

    千次阅读 2017-08-02 14:48:51
    1. 三维立体图的基本要件: 全空间网格化网格节点的物理属性值 2.数据准备 数据不易贴,我放在了百度网盘:点击下载数据 大概如下形式: TIP: 这里的数据矩阵为v(5276),可以看成一本27页纸,每页...

    前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义。

    1. 三维立体图的基本要件:

    • 全空间网格化
    • 网格节点的物理属性值

    2.数据准备

    数据不易贴,我放在了百度网盘:点击下载数据
    大概如下形式:


    这里写图片描述

    TIP:
    这里的数据矩阵为v(5276),可以看成一本27页纸,每页绘制了5*6的网格,然后27页纸叠在一起。当你理解本图绘制后,数据可以随意制作。

    3.主要函数:sliceisosurfacepatch

    NOTE:想了解每个函数的用法可以在matlab command windows中 输入 doc slice即可获得slice的matlab详解

    4.主要代码:

    TIP:你可以将代码复制到一起运行,此处我是单独展示,分别绘图

    1.单独切片,切法可自定义。便于展示局部细节

    clc,clear
    v=csvread('vdata.txt');
    v=reshape(v,5,27,6);
    [x,y,z]=meshgrid(1:27,1:5,1:6);
    h=figure(1);
    set(h,'name','取单切片')
    subplot(221)
    slice(x,y,z,v,[],[1],[]);
    shading interp 
    set(gca,'zdir','reverse');
    axis equal
    grid on
    subplot(222)
    slice(x,y,z,v,[],[2],[]);
    shading interp 
    colormap('jet')
    set(gca,'zdir','reverse');
    axis equal
    grid on
    subplot(223)
    slice(x,y,z,v,[],[3],[]);
    shading interp 
    set(gca,'zdir','reverse');
    axis equal
    grid on
    subplot(224)
    slice(x,y,z,v,[],[4],[]);
    shading interp 
    set(gca,'zdir','reverse');
    axis equal
    grid on

    效果图:


    这里写图片描述

    2.全空间立体切片

    h2=figure(2);
    set(h2,'name','全空间切片','MenuBar','none','ToolBar','none')
    slice(x,y,z,v,[1:2:27],[2 3 4],[2 3 4 5])
    shading interp 
    colorbar 
    colormap('jet')
    set(gca,'zdir','reverse');
    axis equal
    grid on
    box on

    效果图:


    这里写图片描述

    3.立体包络图

    h3=figure(3);
    set(h3,'name','定值包络立体图','MenuBar','none','ToolBar','none')
    set(gcf,'InvertHardcopy','off')
    fw=350;                                                                                                   %%此值为最外层包络面取值
    fv=isosurface(x,y,z,v,fw);
    p=patch(fv);
    set(p,'facecolor','b','edgecolor','none');
    patch(isocaps(x,y,z,v, fw), 'FaceColor', 'interp', 'EdgeColor', 'none');
    colorbar
    colormap('jet')
    box on
    daspect([1,1,1])
    view(3)
    set(gca,'zdir','reverse','color',[0.2,0.2,0.2]);
    camlight
    camproj perspective
    lighting phong
    axis equal
    grid on
    title(['最外层表面的值为: ' , num2str(fw)]);

    NOTE:上述代码中的fw是作主要可变参数,控制最外层包络面的值

    如下演示多个fw下不同的效果图:



    csdn博客与此同步,欢迎转载,注明出处。有任何问题和建议,欢迎留言讨论,也可以发我邮箱wenbya@foxmail.com
    展开全文
  • matlab开发-三维立体

    2019-08-24 08:05:51
    matlab开发-三维立体图。使用surf命令在3D中绘制X-Y-Z数据。不需要曲线拟合工具箱。
  • matlab绘制三维立体

    千次阅读 2019-03-15 19:56:33
    我原以为理解并且会应用matlab绘制三维图,但动起手来,我发现各种不会,弄着弄着都有点怀疑人生了。首先,plot与plot3分别绘制二维与三维的曲线,而不是曲面,这是我的一个误区!还有,当你有x,y,z数据(行向量...

            我原以为理解并且会应用matlab绘制三维图,但动起手来,我发现各种不会,弄着弄着都有点怀疑人生了。首先,plot与plot3分别绘制二维与三维的曲线,而不是曲面,这是我的一个误区!还有,当你有x,y,z数据(行向量或者列向量)时,直接用surf(x,y,z)会给你报错,说z为矩阵的提示。还好,我在网上找到一篇博客,讲到此问题,帮我顺利解决难题,感谢笔芯!原因是:

    【Matlab】离散点绘制三维曲面方法小结 - Find your love - CSDN博客  https://blog.csdn.net/shanchuan2012/article/details/72772191

            

    以上就是我不能直接用surf的原因了。

                解决方法:

      1. 

    %确定网格坐标(x和y方向的步长均取0.1)
    [X,Y]=meshgrid(min(x):0.1:max(x),min(y):0.1:max(y)); 

    meshgrid是MATLAB(一款应用软件)中用于生成网格采样点的函数。在使用MATLAB进行3D图形绘制方面有着广泛的应用。

    [X,Y] = meshgrid(x,y)

    解释:输出X的每一行的数值都是复制的x的值;输出Y的每一列的数值都是复制的y的值。

    meshgrid_百度百科  https://wapbaike.baidu.com/item/meshgrid/3794127?fr=aladdin&ms=1&rid=7297986572924445218

    2.
    %在网格点位置插值求Z,注意:不同的插值方法得到的曲线光滑度不同
    Z=griddata(x,y,z,X,Y,'v4');

    ZI = griddata(x,y,z,XI,YI) 调整形如z = f(x,y)的曲面,使之与非等间距矢量(x,y,z)中的数据吻合。griddata 函数在指定的(XI,YI)点处插补此曲面,生成ZI.

    此曲面一定通过这些数据点。 XI 和 YI 通常构成均匀网格(与meshgrid函数生成的相同). XI 可以是行矢量,这种情况下该矢量确定一个具有固定列数的矩阵。与之类似,YI 可以是列矢量,确定一个具有固定行数的矩阵。

    [XI,YI,ZI] = griddata(x,y,z,XI,YI) 函数返回与上述矩阵相同的插补后的矩阵ZI。并返回由行矢量XI和列矢量yi形成的矩阵XI 和YI. 后者与meshgrid 函数返回的矩阵相同。

    [...] = griddata(...,method)使用规定的插补方法:

    'linear' 基于三角形的线性插补法(缺省)

    'cubic' 基于三角形的三次插补法

    'nearest' 最近邻居插补法

    'v4' MATLAB 4 griddata方法。

    这些方法定义了匹配数据点的曲面类型。'cubic' 和 'v4' 方法生成平滑曲面,而 'linear' 和 'nearest' 分别具有一阶导数和零阶导数不连续。除'v4' 外所有方法基于数据的三角化。如果方法为[], 则使用缺省的'linear' 方法。

    griddata_百度百科  https://wapbaike.baidu.com/item/griddata/3922116?fr=aladdin&ms=1&rid=7053847170498709362&sc_id=G10EwzC

    3.
    %绘制曲面
    figure(1)
    surf(X,Y,Z);

    4.
    shading interp;

    matlab函数——shading函数 - 细水长流 - CSDN博客  https://blog.csdn.net/qq_27561265/article/details/48267579

    5.
    colormap(jet);

    查看并设置当前颜色图 - MATLAB colormap - MathWorks 中国  https://ww2.mathworks.cn/help/matlab/ref/colormap.html

    要是绘制散点图,可以用scatter函数,不用连成曲线,而是单独的点

    https://www.baidu.com/link?url=GnEJwgc1YDjEaYRitf5s4pT7qLOxtEE7V3QcgWqHJmgLerUCGZmGSdd65Ycqk8DNyYHph6r7fGj5QF-5MmQgia&wd=&eqid=fc645bb800023ac5000000035c8b92d3

     

     

    展开全文
  • 利用matlab将三维数据画成三维立体

    万次阅读 多人点赞 2018-08-20 14:13:14
    将数据利用matlab画出图,最开始是导入数据,然后处理数据,最后将处理的数据画出来。 所以我将它分为个步骤。 第一步:导入数据 如果是mat数据。可以直接load 如果是txt数据。可以用txtread 如果是excel数据...

    首先先分析对象。将数据利用matlab画出图,最开始是导入数据,然后处理数据,最后将处理的数据画出来。

    所以我将它分为三个步骤。

    第一步:导入数据

    • 如果是mat数据。可以直接load
    • 如果是txt数据。可以用txtread
    • 如果是excel数据。可以用xlsread

    详细的,可以参考https://blog.csdn.net/blueskyjian/article/details/72832449

    代码如下:

    %% 导入数据
    clear all;clc;close all;
    load xyzdata.mat;%导入的的数据应当去除NaN值

    这是我的数据截图:

    注:需要注意的是,要将数据的NaN(空值)去掉。可以在matlab工作去查看,并去除。

    第二步:数据处理

    由于我们的x、y轴数据,并不是1 、 2 、3等这样的整数排列的,所以必须利用原有的数据,重新构造三维数据。

    重构三维数据主要有两步:

    • 第一步:栅格化,用到meshgrid()函数
    • 第二步:插值,用到griddata()函数

    栅格化原理、效果可以参考https://blog.csdn.net/shanchuan2012/article/details/72772191

    简单来时就是绘制网格

    插值原理、效果可以参考https://blog.csdn.net/pingmin2014/article/details/47298947

    简单来说就是估计绘制网格格点的z的数据

    代码如下:

    %% 相关计算
    [a,~]=size(xRow);%x轴数据总共*******行;
    xmax=max(xRow);%x轴数据最大值为********
    xmin=min(xRow);%x轴数据最小值为*********
    %下面两行是测试用的,便于设置间隔值
    %delta_x=xmax-xmin;%x轴范围宽度值为*****
    %delta_x/a;%z轴间隔大约为1.4796e-04,可以设置为0.01,如果想要更为精确,可以设置为0.001、0.0001
    [b,~]=size(yCol);%y轴数据为********
    ymax=max(yCol);%y轴数据最大值为********
    ymin=min(yCol);%y轴数据最小值为********
    %下面两行是测试用的,便于设置间隔值
    %delta_y=ymax-ymin;%轴范围宽度值为为*********
    %delta_y/b;%y轴间隔大约为9.9876e-05,可以设置为0.01,如果想要根为精确,可以设置为0.001、0.0001

    第三步:画图

    这一步需要注意的是:选好网格间隔,网格间隔越小,精确度越高,相对应的,计算量越大,电脑性能要求越高。

    电脑性能不高的,可以跳大间隔,同时优化代码,清除画图用不了的变量。

    代码如下:

    %% 重构三维数据,画图
    %间隔为 0.05的时候,X Y数据为 *****×****,  电脑一般的,将间隔调大
    %间隔为    1的时候,X Y数据为 ***×****,    电脑  好的,将间隔调小
    [X,Y]=meshgrid(xmin:1:xmax,ymin:1:ymax);%将x、y轴网格化,重构用于画图x、y轴数据
    Z=griddata(xRow,yCol,z,X,Y);%插值,重构用于画图的Z轴数据
    clear a b xmax xmin ymin ymax xRow yCol z;
    mesh(X,Y,Z)

    实验结果:

    由于保密需要吗,图像结果打上马赛克,数据也不能提供。

    完整代码:

    %利用txt excel等大量x y z数据,化三维立体图
    %% 导入数据
    clear all;clc;close all;
    load xyzdata.mat;%导入的的数据应当去除NaN值
    %% 相关计算
    [a,~]=size(xRow);%x轴数据总共********行;
    xmax=max(xRow);%x轴数据最大值为**********
    xmin=min(xRow);%x轴数据最小值为********
    %下面两行是测试用的,便于设置间隔值
    %delta_x=xmax-xmin;%x轴范围宽度值为*****
    %delta_x/a;%z轴间隔大约为1.4796e-04,可以设置为0.01,如果想要更为精确,可以设置为0.001、0.0001
    [b,~]=size(yCol);%y轴数据为******
    ymax=max(yCol);%y轴数据最大值为******
    ymin=min(yCol);%y轴数据最小值为********
    %下面两行是测试用的,便于设置间隔值
    %delta_y=ymax-ymin;%轴范围宽度值为为******
    %delta_y/b;%y轴间隔大约为9.9876e-05,可以设置为0.01,如果想要根为精确,可以设置为0.001、0.0001
    %% 重构三维数据,画图
    %间隔为 0.05的时候,X Y数据为 *****×****,  电脑一般的,将间隔调大
    %间隔为    1的时候,X Y数据为 ***×***,    电脑  好的,将间隔调小
    [X,Y]=meshgrid(xmin:1:xmax,ymin:1:ymax);%将x、y轴网格化,重构用于画图x、y轴数据
    Z=griddata(xRow,yCol,z,X,Y);%插值,重构用于画图的Z轴数据
    clear a b xmax xmin ymin ymax xRow yCol z;
    mesh(X,Y,Z)
    

    给学matlab的人,包括我自己一个勉励:路漫漫其修远兮,吾将上下而求索。

    展开全文
  • 第一次用Matlab画这种三维立体的图形,搞了半天发现这个样例图片真的是个坑!发现选择Matlab画这种图真的是大材小用了。 样例图片: Matlab中有很多绘制三维立体图形的函数,搜了很多资料之后发现,slice函数...

    第一次用Matlab画这种三维立体的图形,搞了半天发现这个样例图片真的是个坑!发现选择Matlab画这种图真的是大材小用了。

    样例图片:


    Matlab中有很多绘制三维立体图形的函数,搜了很多资料之后发现,slice函数比较适合画这种网状图,上代码:

    [x,y,z]=meshgrid(0:1:4,0:1:5,0:1:4);
    v=x.*y; %三维立体图形
    xs=[0,1,2,3,4];
    ys=[0,1,2,3,4,5];
    zs=[0,1,2,3,4];
    re=[1 1 1];         %设置颜色为白色
    colormap(re)        
    set(gca,'XDir','reverse')%对X方向反转
    %set(gca,'YDir','reverse')%对Y方向反转
    
    slice(x,y,z,v,xs,ys,zs);%用切片的方式绘制网格图形
    
    xlabel('time(季度)');
    ylabel('item(类型)');
    zlabel('location(城市)');
    x1=1-0.5;
    x2=2-0.5;
    x3=3-0.5;
    x4=4-0.5;
    x5=5-0.5;
    set(gca,'xaxislocation','top'); %设置将x轴坐标标在图形上方,好像没什么作用
    view(-84, -52); %改变图形显示的视角
    
    %h=gca; 
    %rotate(h,[5,4],-60);              % 尝试沿坐标轴旋转图形
    %rotate(h,[0,5],330);  
    set(gca,'ytick',[x1,x2,x3,x4,x5]);  %设置y轴的坐标标记
    set(gca,'YTickLabel',{'QQ邮箱','126邮箱','163邮箱','Gmail','Outlook'});
    
    set(gca,'ztick',[x1,x2,x3,x4]); %设置z轴的坐标标记
    set(gca,'ZTickLabel',{'北京','上海','广州','深圳'});
    
    set(gca,'xtick',[x1,x2,x3,x4]);%设置x轴的坐标标记
    set(gca,'XTickLabel',{'Q1','Q2','Q3','Q4'});
    
    其中有一些显示视角的调整,在调整之前如下图:


    调整了半天发现,还是无法找到最佳角度,最终显示如下图所示:


    仅通过此篇博客告诉读者,不要用Matlab画这种三维立体统计图,实在是大材小用了,可以考虑其他简单的画图软件。不必非得用代码。




    展开全文
  •  在MATLAB中,二统计分析图形很多,常见的有条形图、阶梯图、杆图和填充图等,所采用的函数分别是:bar(x,y,选项)stairs(x,y,选项)stem(x,y,选项)fill(x1,y1,选项1,x2,y2,选项2,…)。   例 分别以条形图、...
  • 1 基本命令plot3(x,y,z,'s') %绘制三维曲线plot3(x1,y1,z1,'s1',x2,y2,z2,'s2',...) %绘制多条三维曲线说明:当xyz为同维向量时,则绘制以xyz元素...2 绘制三维网线图和曲面图三维网线图和曲面图是三维立体图形,mat...
  • 基于Census变换及Hamming距离的三维立体重建Matlab程序,用于从左右灰度图像得到视差图。结果经Middlebury标准测试集测试。
  • matlab三维图形绘制.ppt

    2020-11-22 00:12:28
    4.2 MATLAB三维图形绘制;二绘制三维网格图和曲面图;2. 三维网格图;3. 三维曲面图 ;三绘制三维旋转体;四立体图形与图轴的控制;默认值az=-37.5el=30;五色彩的控制;2色图的显示和处理(2) 浓淡处理shading;4.3 MATLAB...
  • 1. 三维立体图的基本要件: 全空间网格化网格节点的物理属性值 2.数据准备 数据不易贴,我放在了百度网盘:点击下载数据 大概如下形式: TIP: 这里的数据矩阵为v(5276),可以看成一本27
  • matlab 绘制三维空间的立体箭头 function arrow3(X1,X2,r1,h,r2,color) %一个简单的实例:arrow3([1 2 3],[7 8 9],0.25,1,0.6,'b'); %箭头由圆柱体和圆锥体组成:包括圆柱体的起点和终点位置,以及半径,圆锥的半径...
  • 三维立体红心

    2018-10-25 21:33:29
    matlab'上面实现的一个小程序,三维立体画图。是一个立体的红心,大小颜色等可以通过修改程序进行改动。
  • Matlab三维绘图

    2013-06-25 16:05:00
    三维绘图 1 三维绘图指令 类 别 指 令 说 明 网状图 mesh, ezmesh 绘制立体网状图 meshc, ezmeshc 绘制带有等高线的网状图 meshz 绘制带有...
  • 1. 三维立体图的基本要件: 全空间网格化网格节点的物理属性值 2.数据准备 数据不易贴,我放在了百度网盘:点击下载数据 大概如下形式: TIP: 这里的数据矩阵为v(5276),可以看成一本27
  • 三维立体动心

    2018-10-25 21:30:58
    一个三维立体动的心,在MATLAB平台实现,是根据别人写的程序进行改进的。心可以跳动,并且会有一箭穿心的动画,当然,也可加入字
  • 管道铺设四阶段的三维立体完成透视图: 1.使用hold on命令,完成图形的三维叠加尝试过程; 2.完成各个阶段新修建管线的高亮和放大显示,并标注 阶段名称和图标各种信息。 一.mian函数 %% 使用邻接矩阵和hold on...
  • 介绍MATLAB 的两种基本绘图功能:二维平面图形和三维立体图形。 5.1 二维平面图形 5.1.1 基本图形函数 plot 是绘制二维图形的最基本函数,它是针对向量或矩阵的列来绘制曲线的。也就是说,使用plot 函数之前,...
  • 1) 做出该花瓶三维立体图; 2) 计算其表面积;  计算其体积。  第一次参加数学建模,从来没有接触过Matlab语言,一上来就碰到这种数字图像处理的问题就懵了。完全是一边摸索,一边自学Matlab语言,一遍又一遍...
  • MATLAB编程方面的资料,希望对大家有用; 彻底共享,决不要分!

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 198
精华内容 79
关键字:

matlab三维立体

matlab 订阅