

多面体を作る方法について

PythonでもCでもMatlabでも言語は問いません。

例えば正20面体に関する以下のようなデータがあるとします。  
このデータは正20面体の各頂点0から11に関してどの3点でひとつの三角形、つまり正20面体のひとつの面を作っているかを示します。  
この画像のように頂点をつなげていくことができます  
[![画像の説明をここに入力](https://i.stack.imgur.com/y53C0.jpg)](https://i.stack.imgur.com/y53C0.jpg)  
データ1

[code]

    6 4 0 
    4 9 0 
    9 3 0 
    3 11 0 
    11 6 0
    4 6 1 
    6 8 1 
    8 2 1 
    2 10 1 
    10 4 1 
    8 7 2 
    7 5 2 
    5 10 2 
    10 9 4 
    9 10 5 
    7 11 3 
    5 7 3 
    9 5 3 
    11 8 6 
    8 11 7
    
[/code]

私はこのような形式のデータから多面体がどのような形をしているかがわかる、コードを探しています。  
上のようなデータであれば自明かもしれませんが下のように複雑なデータになればすぐにはわからないと思います。  
データ2

[code]

    14 0 12 
    13 14 12 
    13 6 14 
    12 4 13 
    12 0 15 
    16 12 15 
    16 4 12 
    15 9 16 
    15 0 17 
    18 15 17 
    18 9 15 
    17 3 18 
    17 0 19 
    20 17 19
    20 3 17 
    19 11 20 
    19 0 14 
    21 19 14 
    21 11 19 
    14 6 21 
    23 1 22 
    13 23 22 
    13 4 23 
    22 6 13 
    22 1 24 
    25 22 24 
    25 6 22 
    24 8 25 
    24 1 26 
    27 24 26 
    27 8 24 
    26 2 27 
    26 1 28 
    29 26 28 
    29 2 26 
    28 10 29 
    28 1 23 
    30 28 23 
    30 10 28 
    23 4 30
    27 2 31 
    32 27 31 
    32 8 27 
    31 7 32 
    31 2 33 
    34 31 33 
    34 7 31 
    33 5 34 
    33 2 29 
    35 33 29 
    35 5 33 
    29 10 35 
    30 4 16 
    36 30 16 
    36 10 30 
    16 9 36 
    37 5 35 
    36 37 35 
    36 9 37 
    35 10 36 
    39 3 20 
    38 39 20 
    38 7 39 
    20 11 38 
    40 3 39 
    34 40 39 
    34 5 40 
    39 7 34 
    18 3 40 
    37 18 40 
    37 9 18 
    40 5 37 
    21 6 25 
    41 21 25 
    41 11 21 
    25 8 41 
    32 7 38 
    41 32 38 
    41 8 32 
    38 11 41 
    
[/code]

私が実現したいこと達成するためのコードをご存じの方がいらっしゃったら教えてください。


CC BY-SA 4.0
2018-09-13T02:22:13.537
48345
2018-10-20T12:51:16.157
2018-10-20T12:51:16.157
15171
30088
question
アルゴリズム グラフ理論
どのような多面体かを知るコード


この質問は、`Graph`で扱える問題です。`Graph`にはいろいろありますが、ウィキペディア日本語版では[「グラフ
(データ構造)」](https://ja.wikipedia.org/wiki/%E3%82%B0%E3%83%A9%E3%83%95_\(%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0\))の`Graph`です。

以下に、Pythonの`NetworkX`を使ったサンプルコードとその結果を書いておきます。

[code]

    import numpy as np
    import matplotlib.pyplot as plt
    import networkx as nx
    
    s = '''
    14 0 12 
    13 14 12 
    13 6 14 
    12 4 13 
    12 0 15 
    16 12 15 
    16 4 12 
    15 9 16 
    15 0 17 
    18 15 17 
    18 9 15 
    17 3 18 
    17 0 19 
    20 17 19
    20 3 17 
    19 11 20 
    19 0 14 
    21 19 14 
    21 11 19 
    14 6 21 
    23 1 22 
    13 23 22 
    13 4 23 
    22 6 13 
    22 1 24 
    25 22 24 
    25 6 22 
    24 8 25 
    24 1 26 
    27 24 26 
    27 8 24 
    26 2 27 
    26 1 28 
    29 26 28 
    29 2 26 
    28 10 29 
    28 1 23 
    30 28 23 
    30 10 28 
    23 4 30
    27 2 31 
    32 27 31 
    32 8 27 
    31 7 32 
    31 2 33 
    34 31 33 
    34 7 31 
    33 5 34 
    33 2 29 
    35 33 29 
    35 5 33 
    29 10 35 
    30 4 16 
    36 30 16 
    36 10 30 
    16 9 36 
    37 5 35 
    36 37 35 
    36 9 37 
    35 10 36 
    39 3 20 
    38 39 20 
    38 7 39 
    20 11 38 
    40 3 39 
    34 40 39 
    34 5 40 
    39 7 34 
    18 3 40 
    37 18 40 
    37 9 18 
    40 5 37 
    21 6 25 
    41 21 25 
    41 11 21 
    25 8 41 
    32 7 38 
    41 32 38 
    41 8 32 
    38 11 41
    '''
    data = np.fromstring(s, sep=" ").reshape(-1, 3)
    
    G = nx.Graph()
    
    # ノードの追加
    nodes = np.unique(data)
    G.add_nodes_from(nodes)
    
    # エッジの追加
    for d in data:
        G.add_edges_from([(d[0], d[1]), (d[1], d[2]), (d[2], d[0])])
    
    # レイアウトの取得
    pos = nx.spring_layout(G)
    
    # 可視化
    plt.figure(figsize=(6, 6))
    nx.draw_networkx_edges(G, pos)
    nx.draw_networkx_nodes(G, pos)
    plt.axis()
    plt.show()
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/qtstL.png)](https://i.stack.imgur.com/qtstL.png)

英語版 Wikipedia の [Graph
drawing](https://ja.wikipedia.org/wiki/%E3%82%B0%E3%83%A9%E3%83%95_\(%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0\))には、`Graph
drawing`のソフトウェアがたくさん紹介されているので、それらのソフトウェアを使った回答を書いてもらえるとうれしいです。


CC BY-SA 4.0
2018-09-15T12:21:58.917
48427
2018-09-16T23:31:56.833
2018-09-16T23:31:56.833
15171
15171
48345
answer