我从散乱的数据集中制作填充的轮廓或曲面图。
与其他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;
内圈为空。
我用
tri = delaunay(x,y);
trisurf(tri,x,y,z); view(2); axis equal off;
制作表面图。
但是,正如您所看到的,内圈已经填满。
答案 0 :(得分:6)
您不想使用导致凸包的Delaunay三角剖分,而是要使用alphaShape
,您可以使用Alpha
property对结果曲面边缘的长度施加限制。
您可以指定alphaTriangulation
(通过指定第三个输入),它是最大边长的倒数。对于您的示例,我选择了Alpha
为1。
A = alphaShape(x(:), y(:), 1);
然后,您可以使用alphaSurface
对象的方法进行三角测量。
[faces, vertices] = A.alphaTriangulation();
zvalue = sum(vertices.^2, 2);
或者您可以使用plot
对象
alphaShape
方法
plot(A, 'FaceColor', 'interp', 'CData', zvalue)