我有两个不同尺寸的点云(XYZ坐标),并希望能够计算它们之间的差异(结果为XYZ数组,Z为它们之间的距离),然后将两者绘制为曲面与差异一起作为不同的颜色。
这个问题看似相关,但并不是我想要的:Subtract two trisurf plots from one another
以下是一些示例数据和代码。我无法弄清楚如何将一个数据集插入另一个数据集。
%Point Cloud 1
X1 = randn(100,1);
Y1 = randn(100,1);
Z1 =(exp(-X1.^2-Y1.^2));
% Point Cloud 2
X2 = randn(107,1);
Y2 = randn(107,1);
Z2 = (exp(-X2.^2-Y2.^2));
tri1 = delaunay(X1, Y1);
tri2 = delaunay(X2, Y2);
trisurf(tri1, X1, Y1, Z1, 1)
hold on
trisurf(tri2, X2, Y2, Z2, 100)
hold off
我上面提到的问题指向这里:How Do I Generate a 3-D Surface From Isolines?但我不熟悉Matlab中的3d数据插值,似乎无法弄明白。任何帮助,将不胜感激。感谢。
答案 0 :(得分:3)
我认为这会有所帮助,实际上它只是你没有的插值方法。
%Point Cloud 1
X1 = randn(100,1);
Y1 = randn(100,1);
Z1 =(exp(-X1.^2-Y1.^2));
% Point Cloud 2
X2 = randn(107,1);
Y2 = randn(107,1);
Z2 = (exp(-X2.^2-Y2.^2));
% Mesh for interpolation
x=linspace(min([X1;X2]),max([X1;X2]),40);
y=linspace(min([Y1;Y2]),max([Y1;Y2]),40);
[X,Y]=meshgrid(x,y);
% Calculate interpolants
V1=TriScatteredInterp(X1,Y1,Z1);
V2=TriScatteredInterp(X2,Y2,Z2);
F1=V1(X,Y);
F2=V2(X,Y);
% Plot to check results!
figure(1)
scatter3(X1,Y1,Z1)
hold on
mesh(X,Y,F1)
hold off
figure(2)
scatter3(X2,Y2,Z2)
hold on
mesh(X,Y,F2)
hold off
您还可以使用griddata
:
% Calculate interpolants
F1=griddata(X1,Y1,Z1,X,Y);
F2=griddata(X2,Y2,Z2,X,Y);