独自のバージョンの octree を作成しようとしていますが、異なるサイズのポイントを追加しようとすると問題が発生します。深度レベルを下げるとすべてが上書きされるため、大きなブロックの情報が削除されます。
これを修正する最善の方法は、最後のポイントを逆方向にチェックし、新しいポイントの深さまでリストを再構築することだと思いました。しかし、私が求めている出力を考えるのは本当に簡単であるという事実にもかかわらず、実際にリストを作成する方法を理解することはできません.
開始リストと終了リストの例を使用してリストを作成するために必要なデータは次のとおりです["Nodes",(coordinate),"Nodes",(coordinate)...]
。各座標がstructure
リスト内のすべての項目を最後に到達するまでカバーする形式でデータが必要です。
structure = [(-1, -1, -1), (-1, -1, 1), (-1, 1, -1), (-1, 1, 1), (1, -1, -1), (1, -1, 1), (1, 1, -1), (1, 1, 1)]
start = ['Nodes', (1, 1, 1), 'Nodes', (-1, -1, -1)]
end = ['Nodes', (1, 1, 1), 'Nodes', (-1, -1, -1), 'Nodes', (1, 1, 1), 'Nodes', (-1, -1, -1), 'Nodes', (1, -1, -1), 'Nodes', (-1, -1, -1)]
length = len( end )-len( start )
これは極端な例 (深度 4 から 0 への移行) であり、4096 の異なる値を生成しますが、99% の確率でこれほど大きな値にはならないため、パフォーマンスはそれほど重要ではありません。
開始値と終了値の例の場合、各長さの値は必要ありません。次のように、すべて最大長にする必要があります-
['Nodes', (1, 1, 1), 'Nodes', (-1, -1, -1), 'Nodes', (-1, -1, -1), 'Nodes', (-1, -1, -1), 'Nodes', (-1, -1, -1), 'Nodes', (-1, -1, -1)]
['Nodes', (1, 1, 1), 'Nodes', (-1, -1, -1), 'Nodes', (-1, -1, 1), 'Nodes', (-1, -1, -1), 'Nodes', (-1, -1, -1), 'Nodes', (-1, -1, -1)]
['Nodes', (1, 1, 1), 'Nodes', (-1, -1, -1), 'Nodes', (-1, 1, -1), 'Nodes', (-1, -1, -1), 'Nodes', (-1, -1, -1), 'Nodes', (-1, -1, -1)]
#4002 values later
['Nodes', (1, 1, 1), 'Nodes', (-1, -1, -1), 'Nodes', (1, 1, 1), 'Nodes', (1, 1, 1), 'Nodes', (1, 1, 1), 'Nodes', (1, 1, 1)]
私は試みましたが、実際には再帰的ではないことに気付きました。とにかくここにあります-
newThing = {}
for i in range( length/2 ):
try:
#Set it to previous level so you can append
newThing[i] = newThing[i-1]
except:
#Start off the dictionary
newThing[i] = {}
for j in range( len( structure ) ):
newThing[i][j] = start
#Add structure value for each one
for j in range( len( structure ) ):
newThing[i][j].append( "Nodes" )
newThing[i][j].append( structure[j] )
私が本当に必要とするのは実行時の各リストだけなので、ループ内からすべての組み合わせを出力できる段階に到達できれば、それらすべてを保存するためにメモリが無駄にならないので、それは素晴らしいことです:)