如何从我的数据中为surf()创建一个2D矩阵?

时间:2015-02-15 08:28:19

标签: matlab matrix

我有一个25000x3矩阵,每行包含x-,y-和z-值。现在我想做一些图形图。但是对于使用例如surf(Z),我必须使用mxn矩阵作为Z,其中m等于x的大小,n等于y的大小。如何将我所拥有的矩阵重塑为所需的mxn矩阵?问题是我的x和y值不是整数,而是浮点数,所以我假设我必须先进行插值。真的吗?用plot3绘制的数据如下:
enter image description here

2 个答案:

答案 0 :(得分:4)

你的x和y值不是整数的事实根本不是问题。真正的问题是:你的(x,y)点是否形成网格?

  • 如果您的点正在形成网格,那么您必须重新整形您的列以形成m-by-n数组。根据第一列,然后是第二列,您可能需要sort数据,然后使用reshape函数。

  • 如果您的点没有形成网格,则必须进行插值。偶然scatterinterpolant class可以很好地帮助你这样做。

答案 1 :(得分:1)

如您所见,您提供的数据既没有以网格方式提供,也没有点云清晰。但是,您可以尝试执行以下操作:

  1. 将点云投影到x-y平面上
  2. 对这些点进行三角测量
  3. 将这些点返回原来的z坐标。
  4. 使用trisurf
  5. 绘制曲面

    这是一个执行此操作的MATLAB代码:

    %// Generate some points P
    [X,Y] = ndgrid(0:30);
    P = [X(:), Y(:), X(:).^2+Y(:)];
    %%// Here the actual computation starts
    [~,I] = unique(P(:,1:2),'rows'); %// Remove points with duplicate (x,y)-coords
    P = P(I,:);
    T = delaunay(P(:,1),P(:,2)); %// Triangulate the 2D-projection
    surface = triangulation(T, P(:,1), P(:,2), P(:,3)); %// Project back to 3D
    trisurf(surface); %// Plot
    

    但您可能希望先删除杂散点。