从不规则数据绘制曲面

时间:2017-03-30 18:16:10

标签: matlab visualization data-visualization matlab-figure surf

我从散乱的数据集中制作填充的轮廓或曲面图。

与其他Qs的主要区别在于数据不是凸的。

[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;

内圈为空。

enter image description here

我用

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

制作表面图。

但是,正如您所看到的,内圈已经填满。

enter image description here

1 个答案:

答案 0 :(得分:6)

您不想使用导致凸包的Delaunay三角剖分,而是要使用alphaShape,您可以使用Alpha property对结果曲面边缘的长度施加限制。

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

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

然后,您可以使用alphaSurface对象的enter image description here方法进行三角测量。

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

或者您可以使用plot对象

alphaShape方法
plot(A, 'FaceColor', 'interp', 'CData', zvalue)

enter image description here