如何将 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])