1

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

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)

编辑->按照克里斯·泰勒的回答,我意识到我还应该指定所需的输出“面”应该是一个单元格数组,其中每个元素都是代表该面顶点的 k 个索引的向量;同样,“边”应该是一个矩阵,其中每一行是一个由 2 个索引组成的向量,表示边连接的顶点

任何想法?

PS 我尝试添加标签:多面体、实体、delaunay 和 tetramesh,但系统不允许我这样做 - 也许有权创建新标签的人可以为我做这件事?也许删除不太精确的标签,如“情节”、“边”、“顶点”、“多边形”?

4

2 回答 2

0

这是做你想做的吗?

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

在此处输入图像描述

于 2013-10-27T11:14:31.333 回答
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”存储了每个三角形面的顶点,这几乎是我想要的。

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

于 2013-10-27T23:01:08.033 回答