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帐户或创建新的。