从不规则数据绘制表面图

3
我将从散点数据绘制填充等高线图或表面图。与其他问题的主要区别在于数据不是凸的。
[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个回答

6
与使用得到凸包的Delaunay三角剖分不同,您需要使用一个alphaShape,它可以在生成曲面边缘时对长度施加限制。您可以通过指定Alpha属性(通过指定第三个输入)来指定最大边长的倒数。对于您的示���,我选择了Alpha的值为1。
A = alphaShape(x(:), y(:), 1);

您可以使用alphaSurface对象的alphaTriangulation方法来获取三角剖分结果。

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

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

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

enter image description here


感谢提供 alphaTriangulation 的补充。非常完美。 - wsdzbm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接