将一个3D形状划分成等体积的子区域?

13次浏览(最近30天)
凯
2020年2月24日
编辑: 2020年2月26日
我有一个3D形状,可以近似与Delauny三角化或凸包。我想 划分形状 分成若干等容量的分区域;理想情况下,每个子区域的表面积几乎相同。这里有几个地方我看过但做了 找到一个解决方案,
下面是一个锥形3D形状的示例。如何将形状包围的体积划分为100个等体积子区域?子区域都可以完全由外壳包围,使形状的某些体积不被子区域封闭,就像要用冰块填充锥形容器一样。
在xyz中对区域进行网格化并调整网格间距直到得到100个立方体,这是最好的方法吗?
负载(“海山垫”“x”“是的”“z”);% Matlab附带的通用数据;包含3 d点
DT = delaunayTriangulation (x, y, z);点的三维三角化
[C, volHull] = convexHull(DT);%计算凸包,它是锥形的
图(“名字”“凸壳”);
hPatch = trisurf (C, DT.Points (: 1), DT.Points (:, 2), DT.Points (:, 3),...
“FaceAlpha”, 0.1);
现在如何在这个形状中找到100个相同体积的子区域
7评论
凯
2020年2月25日
也许我该从这个事实中得到启发 体素 通常显示为立方体,并坚持立方体形状。感谢您的建议,让我们更清楚地定义这个问题:我正在尝试为一个采样问题想出一个3D形状中的常规位置。所以我将把这个形状分成大小相等的三维立方体,要求这些立方体完全适合里面。我在我的回答里写了一份如何做这件事的草稿。

登录评论。

公认的答案

凯
2020年2月26日
编辑: 2020年2月26日
根据评论,我原来的问题太开放了,所以我回答这个问题是为了结束它。将体积内的空间简单地三维分割成立方体就足够了,比如,
负载(“海山垫”“x”“是的”“z”);% Matlab附带的通用数据;包含3 d点
使示例形状不那么平坦!
x = x * 5000;
y=y*8000;
DT = delaunayTriangulation (x, y, z);点的三维三角化
[C, volHull] = convexHull(DT);%计算凸包,它是锥形的
图(“名字”“凸壳”);
hPatch = trisurf (C, DT.Points (: 1), DT.Points (:, 2), DT.Points (:, 3),...
“FaceAlpha”, 0.1);
nCubesDesired=100;
立方长度=范围(z)/圆形(nCubesDesired^(1/3));
xGrid = min (x): cubeLength:马克斯(x);
yGrid=最小(y):立方长度:最大(y);
zGrid=min(z):立方长度:max(z);
%循环遍历每个多维数据集,并使用
% in_polyhedreon文件交换
% //www.tianjin-qmedu.com/matlabcentral/fileexchange/48041-in_polyhedron
%如果它不在卷内,将立方体扔出。
set(gca,“克斯蒂克”xGrid,“ytick”,伊格里德,“ztick”,zGrid);
网格在…上
%在cubeLength上迭代,直到获得所需的立方体数
2的评论
凯
2020年2月26日
对不起,我不清楚。我只是想把3D空间的体积切成大小相等的立方体。我把如何做的草稿从我的评论移到了答案上。

登录评论。

更多的答案(0)

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始打猎吧!