从不规则数据绘制表面

Plot surface from irregular data

我要根据分散的数据集制作填充等高线图或曲面图。

与其他Q的一个主要区别是数据不是凸的。

[r,th] = meshgrid(10:15,0:180);
[x,y] = deal(r.*sind(th), r.*cosd(th));
z = x.^2+y.^2;
scatter(x(:),y(:),[],z(:),'fill'); axis equal off;

内圈为空

我用

tri = delaunay(x,y);
trisurf(tri,x,y,z);  view(2); axis equal off;

制作曲面图。

但是,如您所见,内圈已填充。

与其使用产生凸包的 Delaunay 三角剖分,不如使用 alphaShape 可以对生成的曲面边缘的长度施加限制。

您可以指定 Alpha property(通过指定第三个输入),它是最大边长的倒数。对于您的示例,我选择了 1 的 Alpha

A = alphaShape(x(:), y(:), 1);

然后您可以使用 alphaSurface 对象的 alphaTriangulation 方法得到三角剖分。

[faces, vertices] = A.alphaTriangulation();
zvalue = sum(vertices.^2, 2);

或者你可以使用alphaShape对象的plot方法

plot(A, 'FaceColor', 'interp', 'CData', zvalue)