找到多面体的边集,不重复
Find the set of edges of a polyhedron, without duplication
我有一个多面体,它由一系列顶点定义,这些顶点是 R^3 中的向量,还有三角形面,它们由定义面的三个顶点的映射定义。
举个例子,这里是V和F
V=[-0.8379 0.1526 -0.0429;
-0.6595 -0.3555 0.0664;
-0.6066 0.3035 0.2454;
-0.1323 -0.3591 0.1816;
0.1148 -0.5169 0.0972;
0.2875 -0.2619 -0.3980;
0.2995 0.4483 0.2802;
0.5233 0.2003 -0.3184;
0.5382 -0.3219 0.2870;
0.7498 0.1377 0.1593]
F=[2 3 1;
7 3 4;
3 2 4;
7 9 10;
10 8 7;
9 5 6;
9 8 10;
1 6 2;
7 8 1;
2 6 5;
8 9 6;
5 9 4;
9 7 4;
4 2 5;
7 1 3;
6 1 8]
Euler's formula给出面、边、顶点的关系
V-E+F = 2
我试图从顶点找到多面体的唯一一组边。通过执行以下操作,我已经可以找到每个面的所有边(每个面有 3 个边,每个边都是两个相邻面的成员)
Fa = F(:,1);
Fb = F(:,2);
Fc = F(:,3);
e1=V(Fb,:)-V(Fa,:);
e2=V(Fc,:)-V(Fb,:);
e3=V(Fa,:)-V(Fc,:);
但是,这会找到每个面的所有边并包括重复项。面 A 上的边 e_i 在面 B 上也是 -e_i。
谁有找到唯一的一组边(正方向和负方向)或确定 e1、e2、e3 内将正边链接到负边的映射的好方法?
最好使用与面部编码相同的方式编码边缘:例如,[3 7]
是顶点 3 和 7 之间的边缘。从这个表示中,您可以得到坐标只需减去这些顶点即可得到向量。
这是从 F 获取唯一一组边的单行命令:
E = unique(sort([F(:,[1,2]); F(:,[1,3]); F(:,[2,3])], 2), 'rows');
sort 的第一个参数是一个矩阵,其中两列包含所有边,并且有重复。然后对其进行排序,使行 7 3
变为 3 7
。最后,unique
returns 只有唯一行。输出:
1 2
1 3
1 6
1 7
1 8
2 3
2 4
2 5
2 6
3 4
3 7
4 5
4 7
4 9
5 6
5 9
6 8
6 9
7 8
7 9
7 10
8 9
8 10
9 10
然后你可以得到边的坐标形式 coords = V(E(:,1))-V(E(:,2))
我有一个多面体,它由一系列顶点定义,这些顶点是 R^3 中的向量,还有三角形面,它们由定义面的三个顶点的映射定义。
举个例子,这里是V和F
V=[-0.8379 0.1526 -0.0429;
-0.6595 -0.3555 0.0664;
-0.6066 0.3035 0.2454;
-0.1323 -0.3591 0.1816;
0.1148 -0.5169 0.0972;
0.2875 -0.2619 -0.3980;
0.2995 0.4483 0.2802;
0.5233 0.2003 -0.3184;
0.5382 -0.3219 0.2870;
0.7498 0.1377 0.1593]
F=[2 3 1;
7 3 4;
3 2 4;
7 9 10;
10 8 7;
9 5 6;
9 8 10;
1 6 2;
7 8 1;
2 6 5;
8 9 6;
5 9 4;
9 7 4;
4 2 5;
7 1 3;
6 1 8]
Euler's formula给出面、边、顶点的关系
V-E+F = 2
我试图从顶点找到多面体的唯一一组边。通过执行以下操作,我已经可以找到每个面的所有边(每个面有 3 个边,每个边都是两个相邻面的成员)
Fa = F(:,1);
Fb = F(:,2);
Fc = F(:,3);
e1=V(Fb,:)-V(Fa,:);
e2=V(Fc,:)-V(Fb,:);
e3=V(Fa,:)-V(Fc,:);
但是,这会找到每个面的所有边并包括重复项。面 A 上的边 e_i 在面 B 上也是 -e_i。
谁有找到唯一的一组边(正方向和负方向)或确定 e1、e2、e3 内将正边链接到负边的映射的好方法?
最好使用与面部编码相同的方式编码边缘:例如,[3 7]
是顶点 3 和 7 之间的边缘。从这个表示中,您可以得到坐标只需减去这些顶点即可得到向量。
这是从 F 获取唯一一组边的单行命令:
E = unique(sort([F(:,[1,2]); F(:,[1,3]); F(:,[2,3])], 2), 'rows');
sort 的第一个参数是一个矩阵,其中两列包含所有边,并且有重复。然后对其进行排序,使行 7 3
变为 3 7
。最后,unique
returns 只有唯一行。输出:
1 2
1 3
1 6
1 7
1 8
2 3
2 4
2 5
2 6
3 4
3 7
4 5
4 7
4 9
5 6
5 9
6 8
6 9
7 8
7 9
7 10
8 9
8 10
9 10
然后你可以得到边的坐标形式 coords = V(E(:,1))-V(E(:,2))