我正在尝试制作自己的八叉树版本,如果您尝试添加不同大小的点,则会遇到问题,因为降低深度级别只会覆盖所有内容,因此会删除较大块上的任何信息。
我认为解决此问题的最佳方法是向后检查最后一点,并将列表重建到新点的深度。但是,我实际上无法弄清楚如何构建列表,尽管事实上很容易想到我所追求的输出。
这是使用示例开始和结束列表构建列表所需的数据,我需要它的格式为["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] )
我真正需要的是运行时的每个列表,所以如果它可以到达一个可以从循环内打印所有组合的阶段,那就太好了,因为存储所有这些组合不会浪费内存:)