質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.45%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Mathematica

Mathematicaは、ウルフラム・リサーチによって開発されている数式処理システムです。

MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

3回答

1119閲覧

どのような多面体かを知るコード

wintssk

総合スコア8

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Mathematica

Mathematicaは、ウルフラム・リサーチによって開発されている数式処理システムです。

MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/09/13 02:17

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

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

例えば正20面体に関する以下のようなデータがあるとします。
このデータは正20面体の各頂点0から11に関してどの3点でひとつの三角形、つまり正20面体のひとつの面を作っているかを示します。
この画像のように頂点をつなげていくことができます
この画像のように頂点をつなげていくことができます
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

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

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoorwm

2018/09/13 02:28

どのようなデータになったらどのような多面体なのか?と判断するのかが分からないのですが、geosとかgeometry関係のライブラリでも調べてみたらどうでしょうか?
cateye

2018/09/13 02:46

凸と凹の情報は?など分からないようですが?
yukihisa

2018/09/13 07:19

提示の八十面体の場合、五角形と三角形で作成した三十二面体の五角形部分に五角錐を付ける(凸か凹かは置いておく)形になりますが、どちらでも八十面体は作成できるのでどう判断させるつもりでしょう?
guest

回答3

0

多面体がどのような形をしているかがわかる、コードを探しています。

どのような形をしているかがわかるというのは、具体的には提示された入力に対して、どのようなアウトプットを期待しているのでしょうか。

複数の点とそれを結んだ線から三角形を探したいのであれば、以下のようにします。
意図と違ったらすみません。

グラフから三角形を探す方法

  1. グラフで表現する。
  2. 三角形(長さ3の路) の数を数える。

以下の性質を使い、計算できます。

G が無向グラフでかつ自己ループを持たないとき、G に含まれる三角形の数は、G の隣接行列 A を用いて、trace(A^3) / 6

隣接行列 参照。上記の性質は隣接行列の定義より明らか。

コード

networkx が必要なので、ない場合は pip install networkx でインストールしてください。

python

1import networkx as nx 2import numpy as np 3 4data = '''6 4 0 54 9 0 69 3 0 73 11 0 811 6 0 94 6 1 106 8 1 118 2 1 122 10 1 1310 4 1 148 7 2 157 5 2 165 10 2 1710 9 4 189 10 5 197 11 3 205 7 3 219 5 3 2211 8 6 238 11 7 24''' 25data = np.fromstring(data, sep=" ").reshape(-1, 3) 26print(data.shape) # (20, 3) 27 28# 無向グラフを作成する。 29G = nx.Graph() 30 31# ノードを追加する。 32nodes = np.unique(data) 33print(nodes) # [ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.] 34G.add_nodes_from(nodes) 35 36# エッジを追加する。 37for triangle in data: 38 n1, n2, n3 = triangle 39 G.add_edges_from([(n1, n2), (n2, n3), (n3, n1)]) 40 41# 三角形を探す 42A = nx.to_numpy_matrix(G) # 隣接行列を取得する。 43print(mat) # (12, 12) 44A3 = np.linalg.matrix_power(A, 3) # A^3 を計算する。 45num_triangles = np.trace(A3) / 6 46 47print('Number of Triangle', num_triangles) # 20

投稿2018/09/13 06:57

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

入力データが多面体を為していることが保証されているのであれば、
単に行数を数えれば、それが面数です。
例の2つ目は80面体ですね。

投稿2018/09/13 04:41

set0gut1

総合スコア2413

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

面を構成する要素は三角形固定なのですか?たとえば正六面体なら正方形になるし、正十二面体なら正五角形だし。

そもそもとして

3つの点の組み合わせによって多面体の構造を調べるというのがアプローチとして間違っています。
先述したように多面体の構成要素は三角形だけではありません。
五面体のように複数の多角形(三角形、四角形)を組み合わせる形であり、複数の構造(三角柱、三角錐)をもつ多面体も存在します。

多面体の構造

多面体の構造は頂点の数辺の数面の数のいずれか2つが分かっていれば計算で出すことができます。
式で表すと、頂点の数 = 辺の数 - 面の数 + 2(オイラーの定理)です。
つまり、頂点とそこにつながる頂点(辺)の組み合わせが分かればいいので、{v1,v2}の形のデータがあれば事足りるということになります。
今回のように面の数を出したい(何面体かが知りたい)のであれば面の数 = 辺の数 - 頂点の数 + 2となります。

あとはこれをコーディングでどう実現するかのみです。
ここから先まで回答すると、完全に丸投げになってしまうので、貴方自身で考えてください。
ある程度コーディングをして、どこをどうしたらいいかわからなくなったときにまた質問しましょう。

投稿2018/09/13 02:50

編集2018/09/13 03:09
yukihisa

総合スコア672

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.45%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問