【问题标题】:Draw surface of 3D cloud in matlab在matlab中绘制3D云的表面
【发布时间】:2017-12-12 19:23:58
【问题描述】:

我有 3D 点云。我需要将它们绘制为表面。我尝试了使用 meshdrid、griddata、scatterInterpolant、trisurf-delaunay 的变体。没有任何效果。我知道这个问题被讨论了很多,但似乎我不明白一些重要的细节。我现在拥有的代码:

load('coords.mat')
figure()
subplot(1,2,1)
plot3(x,y,z,'.')
axis off
view(3)

subplot(1,2,2)
C=gray(numel(x)); % unsuccessful attempt
[~,idx]=sort(z);  %      to have 
C=C(idx,:);       %    illumination
scatter3(x,y,z,50,C,'filled')
axis off
view(3)

生成以下图像:

你能帮帮我吗:

1) 想办法用表面函数绘制它。

因为表面内可能有一些点(可能是我的问题)

2) 如何去除“隐形”点?

我需要针对不同情况的解决方案,图片和数据只是一个例子。

mat文件可以下载here.

附言

以防万一——我将这些点的坐标作为随机贝塞尔曲线的旋转获得。

更新

如果上面的数据太大,我会生成另一个点数较少的集合:

坐标是here

【问题讨论】:

    标签: matlab 3d surface


    【解决方案1】:

    您从哪里获得这些数据?它表示为向量,但如果将其重塑为矩阵,则可以使用 surf 函数。试试这个代码:

    z=reshape(z,100,100);
    y=reshape(y,100,100);
    x=reshape(x,100,100);
    surf(x,y,z)
    

    【讨论】:

    • 酷!!!谢谢!!我自己生成这些向量 - 对于我的问题来说,这是一个很长且不重要的代码。
    • 对不起,但我有一个愚蠢的问题,x,y,z 并非总是可以在方阵中重塑(参见第二个数据集)。我应该通过一些插值吗?
    • @zlon 这就是为什么我想谈谈数据的来源 =) 你的向量是 x 方向的切片。这就是为什么用 100x100 的大小重新整形的原因。不是因为它是平方数,而是因为有 100 片。对于较小的数据集,您需要将其整形为 100x60 的大小。当您生成数据时,这些事情更容易控制。
    猜你喜欢
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    相关资源
    最近更新 更多