4

我有 20 到 30 个随机生成的 3D 点作为定义多面体的顶点。我曾尝试使用DelaunayTri(points)枚举面并使用叉积的行列式来计算和求和四面体体积,但我不确定它是否适用于非凸面的多面体。

另一种可能的方法是将凹多面体划分为凸多面体(通过检测凸包内的点),但这种不相交划分的算法让我望而却步。

另外,如何绘制这样一个凹形船体?

4

1 回答 1

2

感谢MATLAB Answers™Mike Garrity </a>

alphaShape类似于convhull,但更通用。它将创建非凸形状。

样本点云:

npts = 75;
pts = randn(npts,3);
scatter3(pts(:,1),pts(:,2),pts(:,3),'filled')

样本点云

shp = alphaShape(pts);
h = plot(shp);

阿尔法形状图:

Alpha 形状图

阿尔法形状的体积:

volume(shp)

ans =
    27.3914

另一种指示形状内其他点的方法(绿色):

testpts = randn(150,3);
inmask = inShape(shp,testpts);
h.FaceColor = [.75 .75 .75];
h.FaceAlpha = .25;
hold on
scatter3(testpts(inmask,1),testpts(inmask,2),testpts(inmask,3),'.','MarkerEdgeColor','green')
scatter3(testpts(~inmask,1),testpts(~inmask,2),testpts(~inmask,3),'.','MarkerEdgeColor','red')

绿色形状内的点

于 2016-04-14T12:41:01.870 回答