由散乱的三维点集计算凹多面体的体积 [英] MATLAB: Calculate volume of concave polyhedron from set of scattered 3D points

查看:0
本文介绍了由散乱的三维点集计算凹多面体的体积的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

另一种可能的方法是将凹多面体划分为凸多面体(通过检测凸壳内部的点),但我无法找到这种不相交划分的算法。

还有,怎么会画出这样一个凹陷的船体呢?

推荐答案

感谢Mike Garrity来自MATLAB Answers™

alphaShape类似于convhull,但更一般。它将创建非凸形。

样本点云:

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

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

Alpha形状图:

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')

这篇关于由散乱的三维点集计算凹多面体的体积的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆