由网友(执伞青衣袖)分享简介:我有20到30个随机生成的3D点作为定义多面体的顶点。我尝试过使用DelaunayTri(points)来枚举面,并使用叉积的行列式来计算和求和四面体的体积,但我不确定它是否适用于非凸多面体。另一种可能的方法是将凹多面体划分为凸多面体(通过检测凸壳内部的点),但我无法找到这种不相交划分的算法。还有,怎么会画出这样一个凹...我有20到30个随机生成的3D点作为定义多面体的顶点。我尝试过使用![如图.在多面体中.四边形是正方形.是正三角形.. .. 1 求证 平面, 2 求多面体的体积. 题目和参考答案 青夏教育精英家教网](https://p.xsw88.cn/allimgs/daicuo/20230903/3639.png)
DelaunayTri(points)
来枚举面,并使用叉积的行列式来计算和求和四面体的体积,但我不确定它是否适用于非凸多面体。
另一种可能的方法是将凹多面体划分为凸多面体(通过检测凸壳内部的点),但我无法找到这种不相交划分的算法。
还有,怎么会画出这样一个凹陷的船体呢?
推荐答案
![如图.在多面体中.四边形是正方形.是正三角形.. .. 1 求证 平面, 2 求多面体的体积. 题目和参考答案 青夏教育精英家教网](https://p.xsw88.cn/allimgs/daicuo/20230903/3639.png)
感谢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')
相关推荐
最新文章