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)