1

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点分布不规则。但是我不确定我是否可以这样做,因为我正在使用补丁功能。)

请帮助我。

4

1 回答 1

1

一种可能的解决方案可能是将数据插值到常规网格,然后使用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);

希望能帮助到你。

于 2013-02-16T17:52:23.243 回答