MATLAB:根据散点创建彩色表面
MATLAB: Create a colored surface based on scatter points
使用 [x,y,z,value]
格式的数据集,我可以创建如图所示的 3D 散点图,其中位置 (x,y,z)
处每个点的颜色基于 value
.请注意,所有图像都属于同一图,只是来自不同的视图。它旨在成为球体八分圆的表面。
有没有一种方法可以在 3D 中对颜色进行插值,以便我们看到实体表面而不是单个点?我正在寻找与 imagesc
类似的东西,但在 3D 中。我尝试了各种各样的功能,包括 scatteredInterpolant
、patch
、mesh
和 surf
,但这些功能似乎无法像我那样在 3 维中工作我喜欢。
根据您的示例数据(具有多个 shell),我将此程序组合在一起。它使用 trisurf
,因此不需要网格化数据。
function PlotColoredSpheres(x,y,z)
tol = 0.01;
r = sqrt(x.^2 + y.^2 + z.^2);
data = num2cell(sortrows([r, x, y, z], [1,2,3,4]),1);
[R, X, Y, Z] = data{:};
figure(1)
RUnique = uniquetol(r, tol);
for Ru = RUnique(:)'
j = abs(R - Ru) < tol;
tri = delaunay(X(j),Y(j));
trisurf(tri, X(j), Y(j), Z(j));
lighting phong
shading interp
hold on
end
hold off
end
使用 [x,y,z,value]
格式的数据集,我可以创建如图所示的 3D 散点图,其中位置 (x,y,z)
处每个点的颜色基于 value
.请注意,所有图像都属于同一图,只是来自不同的视图。它旨在成为球体八分圆的表面。
有没有一种方法可以在 3D 中对颜色进行插值,以便我们看到实体表面而不是单个点?我正在寻找与 imagesc
类似的东西,但在 3D 中。我尝试了各种各样的功能,包括 scatteredInterpolant
、patch
、mesh
和 surf
,但这些功能似乎无法像我那样在 3 维中工作我喜欢。
根据您的示例数据(具有多个 shell),我将此程序组合在一起。它使用 trisurf
,因此不需要网格化数据。
function PlotColoredSpheres(x,y,z)
tol = 0.01;
r = sqrt(x.^2 + y.^2 + z.^2);
data = num2cell(sortrows([r, x, y, z], [1,2,3,4]),1);
[R, X, Y, Z] = data{:};
figure(1)
RUnique = uniquetol(r, tol);
for Ru = RUnique(:)'
j = abs(R - Ru) < tol;
tri = delaunay(X(j),Y(j));
trisurf(tri, X(j), Y(j), Z(j));
lighting phong
shading interp
hold on
end
hold off
end