首页 > 编程知识 正文

matlab绘制曲面三维图形,matlab怎么画三维曲面图

时间:2023-05-05 16:19:17 阅读:145969 作者:3672

任务

使用指定的离散点绘制三维曲面,例如:

% x y z

1 2 3

1 5 2

2 3 4

3 8 5

.

分析

1 .数据不是等间隔的网格数据

在这种情况下,不能直接使用mesh、surf等函数。 这些函数所需的数据格式是网格格式,因为每个点都是等间隔的。

因为实际上不是(实际上没有规则,可以在以后的图中看到),所以有必要对网格数据进行插值来生成。

2 .生成网格数据

既然原始数据不规则,就考虑一下使其规则化的方法吧。 举个例子,原始数据如下。

网格化的目的是使网格节点具有数据(插值生成的蓝点不插值边界,绘制时不需要红点)。

实战

粗略地看

首先,让我们用plot3和scatter来看看离散点:

清除命令和变量,以避免%内存不足

clc; 清除器

%读取数据

%数据格式: x、y、z

data=load(HV_re.txt );

x1=data (:1 );

y1=data (:2 );

Z1=data (:3 );

请稀释到%内存不足

计数=1; %新建变量计数器

间隔=10000; %剔除间隔

Fori=1:间隔:长度(x1 ) )。

x (计数,1 )=x1 ) I,1 );

y (计数,1 )=y1 ) I,1 );

z(count,1 )=Z1 ) I,1 );

count=count 1;

结束

% plot3

图形;

plot3(x、y、z、' * ' );

视图(0,90 ); %视角,自上而下

%散布图

图形;

scatter(x,y,25,z,' filled ' ); %散点尺寸可调整

colorbar;

plot3:

scatter:

插值绘图

原始数据为3列,分别为x、y、z。 绘制三维曲面图需要matlab识别的网格数据。 所以,首先进行插值。 首先,用meshgrid合并min、max函数生成网格坐标(这是原始x、y从最小值到最大值等间隔的点),然后用griddata函数插值这些点处的z值(因为这些点不一定有数据,所以进行插值参考: Matlab中的meshgrid、interp和griddata的用法和实例(旋转) ) ) ) ) ) ) ) ) ) ) )。

清除命令和变量,以避免%内存不足

clc; 清除器

%读取数据

%数据格式: x、y、z

data=load(HV_re.txt );

x1=data (:1 );

y1=data (:2 );

Z1=data (:3 );

请稀释到%内存不足

计数=1; %新建变量计数器

间隔=1000; %剔除间隔

Fori=1:间隔:长度(x1 ) )。

x (计数,1 )=x1 ) I,1 );

y (计数,1 )=y1 ) I,1 );

z(count,1 )=Z1 ) I,1 );

count=count 1;

结束

确定%网格坐标(x方向和y方向的步长均为0.1 ) ) ) )。

[X,y]=meshgrid(min(x ) :0.1:max ) x ),min (y ) :0.1:max ) y );

在%网格点的位置插值求出z。 注意:根据插值方法不同,得到的曲线的平滑度也不同

z=griddata(x,y,z,x,y,' v4 ' );

%绘图曲面

figure(1)。

SURF(x,y,z );

shading interp;

颜色映射(jet );

% view (0,90 );

colorbar;

print(GCF,'-djpeg ',' xyz.jpg '; % save picture

结果:

3d:

flat:

总结

1 .网格化目的:产生有序化数据,matlab可以识别、制图。 因此,问题是matlab是否具有直接读取不规则数据,使用户无需执行这些操作即可自动生成或绘制栅格数据的函数。 我没找到。

在plot3和scatter中可以看到离散的点。

3 .插值绘图: meshgrid :生成网格;griddata :插值;surf :绘图。

4 .色标问题:数据有问题。 例如,有特别大的一点和小的一点。 图本来应该是起伏的,但是由于这些点,整个图看起来非常平坦,所以有两种做法。

1 )更改色标。 百度在画出来后就可以改变了。 参考: matlab如何自定义颜色栏? 我从没怎么用代码或cpt文件等方法搜索过。

2 )消除问题。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。