在Matlab中插入3D圆柱体的表面

spa*_*tia 10 3d matlab matlab-figure

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

我想从这个数据集制作一个表面图,类似于此 在此输入图像描述

为了做到这一点,我想我可以使用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)

这对于凸面和凹面的物体非常有效,但对于圆柱体则以此结束: 在此输入图像描述

任何人都可以帮助我如何实现更好的情节?

Rod*_*uis 0

圆柱体是与直线等距的所有点的集合。所以你知道你的xxyyzz数据有一个共同点,那就是它们都应该与对称线距离相等。您可以使用它来生成一个新的圆柱体(在此示例中对称线取为 z 轴):

% best-fitting radius 
% NOTE: only works if z-axis is cylinder's line of symmetry
R = mean( sqrt(xx.^2+yy.^2) );

% generate some cylinder
[x y z] = cylinder(ones(numel(xx),1));

% adjust z-range and set best-fitting radius
z = z * (max(zz(:))-min(zz(:))) + min(zz(:));
x=x*R;
y=y*R;

% plot cylinder
surf(x,y,z)
Run Code Online (Sandbox Code Playgroud)