我刚刚使用以下代码在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
是包含3D曲面点坐标的352x3
矩阵。
F
是一个700x3
矩阵,包含连接点的面。
V
是一个352x1
矩阵,其中包含3D曲面352个点中每个点的值。
现在问题是:如何在曲面上绘制3D轮廓!!?
我已经尝试了contour3
函数,但它要求输入矩阵的尺寸与现在不同。 (我可能需要使用meshgrid,但不幸的是我的XYZ点是不规则分布的。但是我不确定我是否可以这样做,因为我正在使用补丁功能。)
请帮我解决这个问题。
答案 0 :(得分:1)
可能一种可能的解决方案是将数据插值到常规网格,然后使用contour3
函数。查看TriScatteredInterp
功能的手册。简而言之,您应该首先构建插值:
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);
最后,您可以使用contour3
:
contour3(qx, qy, qz, 30);
希望它有所帮助。