如何在MATLAB中绘制三维曲面(由面片构建)上的三维轮廓?

如何在MATLAB中绘制三维曲面(由面片构建)上的三维轮廓?,matlab,3d,patch,contour,geometry-surface,Matlab,3d,Patch,Contour,Geometry Surface,我刚刚使用下面的代码在MATLAB中创建了一个3D曲面: p = patch ( 'Vertices' , XYZ , 'Faces' , F ) ; set ( gca , 'CLim' , [-2000 1500] ) ; set ( p , 'FaceColor' , 'interp' , 'FaceVertexCData' , V , 'EdgeColor' , 'none' , ... ... 'CDataMapping' , 'scaled' ) ; axis 'equal'

我刚刚使用下面的代码在
MATLAB
中创建了一个3D曲面:

p = patch ( 'Vertices' , XYZ , 'Faces' , F ) ;

set ( gca , 'CLim' , [-2000 1500] ) ;

set ( p , 'FaceColor' , 'interp' , 'FaceVertexCData' , V , 'EdgeColor' , 'none' , ...

... 'CDataMapping' , 'scaled' ) ;

axis 'equal'; 
axis 'tight';
set(gca, 'YDir','normal');
其中
XYZ
是一个
352x3
矩阵,包含3D曲面点的坐标。
F
是一个
700x3
矩阵,包含连接点的面。
V
是一个
352x1
矩阵,包含三维曲面352个点中每个点的值

现在的问题是:如何在曲面上绘制3D轮廓

我已经尝试了
touro3
函数,但它要求输入矩阵的维数与现在不同。(我可能需要使用meshgrid,但不幸的是,我的XYZ点分布不规则。但是我不确定是否可以这样做,因为我使用的是面片函数。)


请在这方面帮助我。

一个可能的解决方案可能是将数据插值到常规网格,然后使用
轮廓3
功能。检查手册中的
TriScatteredInterp
功能。简单地说,您应该首先构造Interplant:

F = TriScatteredInterp(XYZ(:,1), XYZ(:,2), XYZ(:,3));
然后您必须在常规位置评估插入剂
qx
qy
(通过
meshgrid
获得)并获得相应的值
qz

ti = 0:0.1:10;
[qx, qy] = meshgrid(ti, ti);  
qz = F(qx, qy);
最后,您可以使用
轮廓3

contour3(qx, qy, qz, 30);

希望有帮助。

一个可能的解决方案是将数据插值到常规网格,然后使用
轮廓3
功能。检查手册中的
TriScatteredInterp
功能。简单地说,您应该首先构造Interplant:

F = TriScatteredInterp(XYZ(:,1), XYZ(:,2), XYZ(:,3));
然后您必须在常规位置评估插入剂
qx
qy
(通过
meshgrid
获得)并获得相应的值
qz

ti = 0:0.1:10;
[qx, qy] = meshgrid(ti, ti);  
qz = F(qx, qy);
最后,您可以使用
轮廓3

contour3(qx, qy, qz, 30);

希望有帮助。

没有人可以帮忙吗!!!?没有人帮忙吗!!!?谢谢你,米伊。我试试看。但是,这个补丁没有解决方案吗!?我是说不改变密码!?阿福,你想要曲面和轮廓都在那个曲面上,不是吗?然后,您应该使用
patch
使用您的代码绘制曲面,然后您可以使用我建议的解决方案(使用
contour3
函数)绘制轮廓。我尝试了您建议的解决方案,但没有达到我想要的效果。还有别的解决办法吗!?实际上我想要的是V/XYZ的轮廓;(不是Z对XY!)。我现在该怎么办!?谢谢你,米伊。我试试看。但是,这个补丁没有解决方案吗!?我是说不改变密码!?阿福,你想要曲面和轮廓都在那个曲面上,不是吗?然后,您应该使用
patch
使用您的代码绘制曲面,然后您可以使用我建议的解决方案(使用
contour3
函数)绘制轮廓。我尝试了您建议的解决方案,但没有达到我想要的效果。还有别的解决办法吗!?实际上我想要的是V/XYZ的轮廓;(不是Z对XY!)。我现在该怎么办!?