从不规则数据绘制表面
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)
我要根据分散的数据集制作填充等高线图或曲面图。
与其他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)