繁体   English   中英

在MATLAB中如何在3D曲面(由面片构建)上绘制3D轮廓?

[英]How to plot 3D contours on a 3D surface (built by patch) in MATLAB?

我刚刚使用以下代码在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矩阵,其中包含3D曲面的352个点中的每个点的值。

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

我已经尝试过contour3函数,但是它要求输入矩阵的维数与现在不同。 (我可能需要使用meshgrid,但不幸的是,我的XYZ点是不规则分布的。但是,由于使用补丁功能,因此我不确定是否可以这样做。)

请帮我。

可能的一种解决方案是将数据插值到规则网格中,然后使用contour3函数。 检查手册中的TriScatteredInterp功能。 简要地说,您应该首先构造插值:

F = TriScatteredInterp(XYZ(:,1), XYZ(:,2), XYZ(:,3));

然后,您必须在常规位置qxqy (通过meshgrid获得)上评估插值并获得相应的值qz

ti = 0:0.1:10;
[qx, qy] = meshgrid(ti, ti);  
qz = F(qx, qy);

最后,您可以使用contour3

contour3(qx, qy, qz, 30);

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM