matlab三维立体图

前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点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
  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Matlab中,可以使用contour3函数来创建三维立体绘图。该函数可以绘制具有不同高度的等高线,并将等高线投影到x-y平面上。下面是一个例子: ```matlab [x, y = meshgrid(-3:0.1:3); z = 3*(1-x).^2.*exp(-(x.^2) - (y-1).^2) -10* (x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) - 1/3*exp(-(x-1).^2 - y.^2); contour3(x, y, z); xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); ``` 在这个例子中,我们首先使用meshgrid函数创建了网格数据,然后根据这些数据计算出z坐标的值。最后,我们使用contour3函数绘制了等高线图,并通过xlabel、ylabel和zlabel函数添加了坐标轴标签。 此外,你还可以使用shading函数来调整绘图的颜色模式。shading函数有三种模式可供选择:faceted、flat和interp。faceted是默认的模式,flat在faceted的基础上去掉了网格线,interp在flat的基础上进行色彩的插值处理,使颜色平滑过渡。 下面是一个例子,展示了如何使用mesh和surf函数创建三维立体图: ```matlab [x, y = meshgrid(-5:0.5:5); z = sin(sqrt(x.^2 + y.^2)) ./ (sqrt(x.^2 + y.^2) + 1e-12); subplot(1, 2, 1) mesh(x, y, z); xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); axis vis3d; title('mesh(x, y, z)'); subplot(1, 2, 2) surf(x, y, z); xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); axis vis3d; title('surf(x, y, z)'); ``` 在这个例子中,我们使用meshgrid函数创建了网格数据,并计算出z坐标的值。然后,我们使用mesh函数绘制了线框图,使用surf函数绘制了平滑表面图,并使用subplot函数将两个图形放在一张图上。 希望这些例子能帮助你开始绘制Matlab中的三维立体图
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值