本周的文件交换选择

我们最好的用户提交

Polygon2Voxel

肖恩本周的选择是Polygon2voxel.经过Dirk-Jan Kroon

我最近被问到:“你怎么能找到两个多面体的交叉量?”

R2017b介绍polyshape用MATLAB来实现二维多边形的处理。但是,它不支持3D。金宝app

获得体积近似的一种方法是将多面体转换为三维图像,并找到重叠的体素。Dirk-Jan的Polygon2voxel.帮助解决这个问题。

首先,让我们创建两个3D形状,一个凸面,一个凸形。

XYZ =画廊('sublicatdata', [30 3], 0)*100;DT = delaunayTriangulation(某某);图tetramesh (DT)

XYZ =画廊('sublicatdata',[30 3],1)* 100;AS = alphashape(XYZ,40);图情节(AS)

现在让我们把这些转换成体素。我将只使用自由边界,即表面,delaunay三角。

[f,t] = freeboundary(dt);ConvexImage = Polygon2voxel(结构(“面孔”, F,'顶点',t),[100 100 100],'汽车');

对于一个alphaShape,边界档案将返回表面。

[f,t] =边界档(AS);凹凸= Polygon2voxel(结构(“面孔”, F,'顶点',t),[100 100 100],'汽车');

我们可以观看两个卷作为电影。

implay([凸图凹页])

卷中的孔尚未填充;imfill可以为我们做到。

Conveximage = Imfill(凸剪层,'洞');凹凸= Imfill(凹陷,'洞');implay([凸图凹页])

现在逻辑索引可用于查找重叠卷:

voxelintersection =凸图&凹陷;图isosurface(voxelintersection)

可以仅计算卷,只能成为体素的总和:

volumevoxels =总和(VoxelIntersection,'全部');DISP(“交叉量是:”+ Volumevoxels +“单位”
交叉量是:272741单位

评论

您是否在Matlab中有3D Polyshapes的用例?试一试,让我们知道你的想法在这里或离开A.评论Dirk-Jan。

发布与MATLAB®R2019B

|

评论

要发表评论,请点击在这里登录您的MathWorks帐户或创建新的。