在MATLAB中从一组内部3D散点图绘制曲面

Ada*_*erl 9 3d matlab data-visualization

我有一个大的(~60,000)三元组数据点,代表x,y和z坐标,它们分散在整个笛卡尔体积中.

我正在寻找一种方法来使用Matlab来可视化由点的最大范围描述的非凸形状/体积.

我当然可以使用这些点来显示各个点scatter3,但是由于点的噪点,形状的细节会被大量的点所掩盖.

作为一个类比,想象你用一个随机大小的球体填充一小时玻璃,如BBs,乒乓球和kix,然后给出每个物体的每个物体的中心坐标.您如何获取这些坐标并可视化包含它们的沙漏的形状?

我的例子使用不同大小的对象,因为数据点之间的间距是不均匀的并且是有效随机的; 它使用沙漏,因为形状是非凸的.

gno*_*ice 12

如果包围点的表面可以描述为凸多面体(即像立方体或十二面体的表面,没有凹坑或锯齿状尖部),那么我将首先创建点的三维Delaunay三角剖分.这将用点作为顶点的一系列四面体单元填充点周围的体积,然后您可以使用类的convexHull方法找到构成体积外壳的三角形面的集合DelaunayTri.

这是一个生成在单位立方体内均匀分布的200个随机点的示例,为这些点创建四面体网格,然后找到该体积的三维凸包:

interiorPoints = rand(200,3);      %# Generate 200 3-D points
DT = DelaunayTri(interiorPoints);  %# Create the tetrahedral mesh
hullFacets = convexHull(DT);       %# Find the facets of the convex hull

%# Plot the scattered points:
subplot(2,2,1);
scatter3(interiorPoints(:,1),interiorPoints(:,2),interiorPoints(:,3),'.');
axis equal;
title('Interior points');

%# Plot the tetrahedral mesh:
subplot(2,2,2);
tetramesh(DT);
axis equal;
title('Tetrahedral mesh');

%# Plot the 3-D convex hull:
subplot(2,2,3);
trisurf(hullFacets,DT.X(:,1),DT.X(:,2),DT.X(:,3),'FaceColor','c')
axis equal;
title('Convex hull');
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述