我要根据分散的数据集制作填充等高线图或曲面图。
与其他 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);
然后您可以使用 alphaTriangulation
得到三角测量结果alphaSurface
对象的方法。
[faces, vertices] = A.alphaTriangulation();
zvalue = sum(vertices.^2, 2);
或者你可以使用alphaShape
对象的plot
方法
plot(A, 'FaceColor', 'interp', 'CData', zvalue)
关于matlab - 从不规则数据绘制表面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43125475/