【问题标题】:How to convert 3D Obj file to adjacency matrix of a graph matrix如何将 3D Obj 文件转换为图矩阵的邻接矩阵
【发布时间】:2021-04-25 11:38:01
【问题描述】:

我有一个 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]
}

【问题讨论】:

  • 你能告诉我们输入文件和预期输出吗?
  • @JakubDóka 输入文件包含顶点和面信息。我将如何使用该信息来构建邻接矩阵的问题
  • @JakubDóka 我编辑了问题
  • 这看起来不像 3D obj 文件
  • 哦,我明白了,我会在几秒钟内弄清楚

标签: python 3d


【解决方案1】:

所以你想要这个?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    相关资源
    最近更新 更多