识别不规则几乎凸多面体的面从顶点的坐标和绘制在三维固体

问题描述 投票:1回答:2

我有一个不规则的几乎凸多面体的顶点,例如东西,看起来像一个二十面体:

xyz = [0.8198   -0.1474 -0.5534;
   0.3944   0.4688  0.7904;
   0.6851   0.6826  -0.2545;
  -0.6855   0.4451  0.5762;
   0.2117   -0.8247 -0.5245;
   0.8263   -0.3318 0.455;
  -0.8393   -0.502  -0.2086;
  -0.0868   -0.9484 0.305;
  -0.1256   0.9915  -0.0353;
  -0.304    -0.3252 0.8954;
  -0.7964   0.4053  -0.4489;
  -0.0817   0.1043  -0.9912];

我想找出边缘和多边形的面孔和情节的固体3D。这是我已经试过,但,虽然足够接近,它看起来不正确:

x = xyz(:, 1);
y = xyz(:, 2);
z = xyz(:, 3);
tri = delaunay(x, y, z);
tetramesh(tri, xyz)

编辑 - >继克里斯泰勒的回答,我已认识我应该还指定所期望的输出“面”应为一个单元阵列,其中每个元素是代表面的顶点ķ索引的向量;并且类似地“边缘”应该是一个矩阵,其中每一行是2个索引表示其边缘连接所述顶点的矢量

任何想法?

附:我试图添加标签:多面体,固体,德劳内和tetramesh但系统并没有让我这样做 - 也许有人用特权来创建新的标签可以为我做到这一点?也许删除,如“暗算”,“边缘”,“顶点”,“多边形”不太精确的标签?

matlab plot polygon vertices edges
2个回答
0
投票

这是否你想要做什么?

>> tri = delaunay3(x, y, z); // coordinates of *tetrahedrons* not triangles
>> tetramesh(tri, xyz);


0
投票

克里斯·泰勒的评论之后,我已经试过这样:

x = xyz(:, 1);
y = xyz(:, 2);
z = xyz(:, 3);
dt = DelaunayTri(xyz);
[ch v] = convexHull(dt);
h_tri = trisurf(ch, dt.X(:,1), dt.X(:,2), dt.X(:,3), 'FaceColor', 'cyan');
hold on
h_plot = scatter3(x, y, z, 'filled', 'MarkerFaceColor', 'r');
axis square
axis off

这似乎更像是我脑子里想的,和可变“CH”存储每个三角面,这是相当多我想要的顶点。

我发现令人失望的唯一的事情 - 但是这可能需要在我身边更多的分析 - 是我知道这多面体应该看起来像一个不规则二十面体(可能不是凸的,但“几乎”凸),而报告上面只有代码发现外部弱凸多面体,其中我的不规则二十面体内接。正如我所说的,我想我将不得不在此做更多的工作。

© www.soinside.com 2019 - 2024. All rights reserved.