繁体   English   中英

如何将 3D Obj 文件转换为图矩阵的邻接矩阵

[英]How to convert 3D Obj file to adjacency matrix of a graph matrix

我有一个 3D OBJ 文件,我想将其转换为图形的邻接矩阵。 我知道如果顶点之间有边,相邻矩阵会重复,给 OBJ 文件有面索引,我将如何将其转换为 adjacnet 矩阵?

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])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM