我有一个不规则的几乎凸多面体的顶点,例如看起来像二十面体的东西:
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)
编辑 - >按照Chris Taylor的回答,我已经意识到我还应该指定所需的输出“faces”应该是一个单元格数组,其中每个元素是表示该面的顶点的k个索引的向量;类似地,“edge”应该是一个矩阵,其中每一行是2个索引的向量,表示边连接的顶点
有什么想法吗?
P.S。我试图添加标签:polyhedron,solid,delaunay和tetramesh但是系统不允许我这样做 - 也许有权创建新标签的人可以为我做这件事吗?也许删除不太精确的标签,如“情节”,“边缘”,“顶点”,“多边形”?
答案 0 :(得分:0)
这样做你想要的吗?
>> tri = delaunay3(x, y, z); // coordinates of *tetrahedrons* not triangles
>> tetramesh(tri, xyz);
答案 1 :(得分:0)
在Chris Taylor的评论之后,我试过了这个:
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”存储每个三角形面的顶点,这几乎是我想要的。
我唯一觉得令人失望的事情 - 但这可能需要我更多的分析 - 我知道这个多面体应该看起来像一个不规则的二十面体(可能不是凸面的,但是“几乎是“凸”的,而上面报道的代码只能找到外部的弱凸多面体,其中刻有我的不规则二十面体。正如我所说,我想我将不得不继续努力。