gpt4 book ai didi

python - 广度优先树生成的问题

转载 作者:太空宇宙 更新时间:2023-11-04 11:04:48 24 4
gpt4 key购买 nike

我对广度优先算法有疑问,我的脚本在 Maya 中生成曲线,定位它们,旋转和缩放它们,以便它们给我树形,我有这些变量

cs=当前状态,

p= parent ,

nodes=未访问节点列表

lvl=当前深度

maxlvl=最大深度

问题是我无法确定当前深度,并在那里终止树,它在没有访问所有节点的情况下存在

这是我的脚本

import random
import math
import maya.cmds as mc
#----define set-----
#--- curve, #children,angle,l--------
#----define rule----
# l=80% ch<=3 angle<=45
l=0.8
ch=6
ang=50
#---list to track----
nodes=[]
#--- begin-----
#---start curve-----
nodes.append(mc.curve(n="a",d=3,p=((0,0,0),(0,1,0),(0,3,0),(0,5,0),(0,6,0)),k=(0,0,0,1,2,2,2)))
cs="" #---current state----
p="a" #---paretn of the current state----
maxlvl=6 #--max depth for the tree
lvl=1 #-- cuurent level----
while (len(nodes)!=0 and lvl<5):
#---generate children number----
chN=random.randint(0,ch)
for j in range(chN):
#----generate node----
mc.select(p,r=1)
cs=mc.duplicate(rr=1)[0]
#---append to node lst----
nodes.append(cs)
#---adjust pos---
pos=mc.pointPosition(p+".cv[4]")
mc.xform(cs,t=(pos[0],pos[1],pos[2]),ws=1)
#---adjust rotation---
mc.rotate(0,0,(random.random()*45+5)*math.pow(-1,j%2),cs,r=1)
#---adjust scale---
mc.scale(0,math.pow(0.8,lvl),0,cs)
j+=1
#--- go to next parent---
nodes.pop(0)
if nodes:
p=nodes[0]
lvl+=1

提前谢谢你

最佳答案

您需要将深度与每个节点相关联。要么把它作为节点类的成员,要么让你的队列条目像这样存储深度和节点:

nodes.append((1, firstNode))
while nodes and lvl<5:
lvl, p = nodes.pop(0)

For each child:
#...create child
nodes.append((lvl+1, cs))

一些不相关的注释:

  • 使用 collections.deque 而不是 list:FIFO 队列更快。

  • for循环中不需要j+=1语句。

关于python - 广度优先树生成的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2171733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com