私はそれを自分で考え出したので、これで混乱している将来の人のための説明です。
例として
、ここでは本当に重要ではない
import numpy as np
import itertools as it
from matplotlib import pyplot as plt
import scipy as sp
inputs = list(it.product([0,1,2],[0,1,2]))
i = 0
lattice = range(0,len(inputs))
for pair in inputs:
lattice[i] = mksite(pair[0], pair[1])
i = i +1
詳細を以下のように、それは正三角形を生成言えば十分のは、私が発生、私は私のコードにして働いていた点を、単純な格子を使用してみましょう格子点間の距離と6つの最近傍のいずれか
plt.plot(*np.transpose(lattice), marker = 'o', ls = '')
axes().set_aspect('equal')
それをプロットする1
あります
は今、三角測量の計算:
dela = sp.spatial.Delaunay
triang = dela(lattice)
だが、これは私たちを与えるものを見てみましょう。
triang.points
出力:
array([[ 0. , 0. ],
[ 0.5 , 0.8660254 ],
[ 1. , 1.73205081],
[ 1. , 0. ],
[ 1.5 , 0.8660254 ],
[ 2. , 1.73205081],
[ 2. , 0. ],
[ 2.5 , 0.8660254 ],
[ 3. , 1.73205081]])
簡単、上記例示格子内のすべての9点のちょうどアレイ。
triang.vertices
出力:方法のは、見てみましょう。このアレイにおいて
array([[4, 3, 6],
[5, 4, 2],
[1, 3, 0],
[1, 4, 2],
[1, 4, 3],
[7, 4, 6],
[7, 5, 8],
[7, 5, 4]], dtype=int32)
、各行は、三角測量の一方シンプレックス(三角形)を表します。各行の3つのエントリは、先ほど見たポイント配列のそのシンプレックスの頂点のインデックスです。したがって、たとえば、この配列内の最初のシンプレックスは、[4, 3, 6]
ポイントから構成されている:
[ 1.5 , 0.8660254 ]
[ 1. , 0. ]
[ 2. , 0. ]
その、紙の上に格子を描画する各点を標識そのインデックスに従って、次にトレースすることによって、これを見やすいですtriang.vertices
の各行を通じて
これは私の質問で指定した関数を書くために必要なすべての情報です。 次のようになります。
def find_neighbors(pindex, triang):
neighbors = list()
for simplex in triang.vertices:
if pindex in simplex:
neighbors.extend([simplex[i] for i in range(len(simplex)) if simplex[i] != pindex])
'''
this is a one liner for if a simplex contains the point we`re interested in,
extend the neighbors list by appending all the *other* point indices in the simplex
'''
#now we just have to strip out all the dulicate indices and return the neighbors list:
return list(set(neighbors))
これだけです!私は上記の関数がいくつかの最適化を行うことができると確信しています。ちょうど私が数分間で思いついたものです。誰かが何か提案があれば、投稿してください。うまくいけば、これは私のようにこれについて混乱している将来の誰かに役立ちます。ここで
私はそれを自分で見つけました! –
スタックオーバーフローでは、[自分の質問に答える]人々をサポートしています(http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/)。あなた自身の質問に答える努力をして、それを解決済みとマークすることができますか?(回答欄の左側にあるチェックマークにチェックを入れて) – Sicco
は、明らかに10名未満の評判を持つユーザーは、投稿後8時間は自分の質問に答えることができません:/私はtxtファイルに書いたものを保存し、今夜まで投稿します。 –