我有一个描述3D圆柱(xx,yy,zz,C)的点云的数据集:

我想从这个数据集制作一个表面图,类似于此

为了做到这一点,我想我可以使用TriScatteredInterp常规网格将我的散乱数据插值,然后使用surf以下方法绘制它:
F = TriScatteredInterp(xx,yy,zz);
max_x = max(xx); min_x = min(xx);
max_y = max(yy); min_y = min(yy);
max_z = max(zz); min_z = min(zz);
xi = min_x:abs(stepSize):max_x;
yi = min_y:abs(stepSize):max_y;
zi = min_z:abs(stepSize):max_z;
[qx,qy] = meshgrid(xi,yi);
qz = F(qx,qy);
F = TriScatteredInterp(xx,yy,C);
qc = F(qx,qy);
figure
surf(qx,qy,qz,qc);
axis image
Run Code Online (Sandbox Code Playgroud)
这对于凸面和凹面的物体非常有效,但对于圆柱体则以此结束:

任何人都可以帮助我如何实现更好的情节?
我想创建一个3D表面的图,它跨越[X,Y,Z]点云的所有点.例如,这是我的点云的散点图:
scatter3(X,Y,Z,5,C)

如您所见,每个数据点都有一个强度值C.
我现在进行三角测量
dt = DelaunayTri(X,Y,Z);
[tri Xb]= freeBoundary(dt);
Run Code Online (Sandbox Code Playgroud)
我得到了三角形表面
figure
trisurf(tri,Xb(:,1),Xb(:,2),Xb(:,3), 'FaceColor', 'cyan', 'faceAlpha', 0.8);
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用时设置表面的颜色
trisurf(tri,Xb(:,1),Xb(:,2),Xb(:,3),C,'EdgeAlpha',0,'FaceColor','interp')
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:"警告:颜色数据未设置为插值着色",这是由于大小C不匹配Xb或tri.
如何确保获得正确的插值表面颜色?