如何将 3D Obj 文件转换为图形矩阵的邻接矩阵
How to convert 3D Obj file to adjacency matrix of a graph matrix
我有一个 3D OBJ 文件,我想将其转换为图形的邻接矩阵。我知道如果顶点之间有边则表示邻接矩阵,给定 OBJ 文件有面索引,我如何将它转换为邻接矩阵?
OBJ 文件给出
顶点和面作为三角形的索引。
所以我想给顶点和面信息一个像这样的图:
gr2 = {
1 : [2, 6],
2: [1, 3],
3: [2, 4, 7],
4: [3, 5, 8, 9],
5: [4, 6, 8],
6: [1, 5, 9],
7: [1, 3],
8: [4, 5, 6],
9: [3, 6]
}
所以你想要这个?
cf = open("cube.obj")
vertices = []
faces = []
def valid(a):
return a.strip() != ""
def spl(a, fn):
return list(map(fn, filter(valid ,a.split(" "))))
for l in cf:
if l[0] == "v":
vertices.append(spl(l[2:], float))
if l[0] == "f":
faces.append(spl(l[2:], int))
graph = {}
for f in faces:
for i in f:
if not i in graph:
graph[i] = set()
graph[f[0]] |= set(f[1:])
graph[f[1]] |= set([f[0],f[2]])
graph[f[2]] |= set(f[:2])
for g in graph:
print(g, ":", graph[g])
我有一个 3D OBJ 文件,我想将其转换为图形的邻接矩阵。我知道如果顶点之间有边则表示邻接矩阵,给定 OBJ 文件有面索引,我如何将它转换为邻接矩阵?
OBJ 文件给出
顶点和面作为三角形的索引。
所以我想给顶点和面信息一个像这样的图:
gr2 = {
1 : [2, 6],
2: [1, 3],
3: [2, 4, 7],
4: [3, 5, 8, 9],
5: [4, 6, 8],
6: [1, 5, 9],
7: [1, 3],
8: [4, 5, 6],
9: [3, 6]
}
所以你想要这个?
cf = open("cube.obj")
vertices = []
faces = []
def valid(a):
return a.strip() != ""
def spl(a, fn):
return list(map(fn, filter(valid ,a.split(" "))))
for l in cf:
if l[0] == "v":
vertices.append(spl(l[2:], float))
if l[0] == "f":
faces.append(spl(l[2:], int))
graph = {}
for f in faces:
for i in f:
if not i in graph:
graph[i] = set()
graph[f[0]] |= set(f[1:])
graph[f[1]] |= set([f[0],f[2]])
graph[f[2]] |= set(f[:2])
for g in graph:
print(g, ":", graph[g])