按顺序将列表项与另一个列表项进行比较,然后在 VPython 应用程序中逐项使用
Compare items of a list sequentially with another one then use one by one in VPython application
我在 Vpython 中使用以下代码创建了对象网格:
iX = [(x - pointW // 2) * sclFact for x in range(pointW)]
iY = [(x - pointH // 2) * sclFact for x in range(pointH)]
iYr = iY[::-1]
xy = list(itertools.product(iX,iYr,))
ixyz = np.array(list(itertools.product(iX,iYr,[-0.0])))
for element in ixyz:
cube = box(pos = element,
size=( .1, .1, .1 ),)
ixyz 列表打印将如下所示:
[[-0.5 0. -0. ]
[-0.5 -0.5 -0. ]
[ 0. 0. -0. ]
[ 0. -0.5 -0. ]
[ 0.5 0. -0. ]
[ 0.5 -0.5 -0. ]]
我还有其他列表,其中 z 值有时会根据特定输入而变化,并且它始终会更新,它看起来像这样
[[-0.5 0. -0. ]
[-0.5 -0.5 -0. ]
[ 0. 0. -0. ]
[ 0. -0.5 -0. ]
[ 0.5 0. -2.3570226]
[ 0.5 -0.5 -0. ]]
我想根据新列表移动对象,我尝试了不同的版本但没有用,它总是查看第二个列表中的最后一项
while True:
.... some code here (the one getting the new list)
...
...
# then I added this:
for obj in scene.objects:
if isinstance(obj, box):
for i in xyz: # xyz is the new list
if obj.pos != i:
obj.pos = i
此变体将使所有框成为一个框并根据列表中的最后一个位置移动
我做错了什么或者有其他方法可以做到吗?
或者我应该改变创建对象并移动它们的整个过程吗?
我真的是 VPython 和 python 本身的新手。
编辑
我修复了两个列表,以便更好地呈现这样
[(-0.5,0.0,-0.0),(-0.5,-0.5,-0.0),...(0.5,-0.5,-0.0)]
您在更新的位置列表中重复设置每个元素的位置:
box.pos = 1
box.pos = 2
box.pos = 3
您需要设置一次位置;所以计算一个索引:
i = 0
for obj....
if isinstance ...
obj.pos = xyz [i]
i += 1
我在 Vpython 中使用以下代码创建了对象网格:
iX = [(x - pointW // 2) * sclFact for x in range(pointW)]
iY = [(x - pointH // 2) * sclFact for x in range(pointH)]
iYr = iY[::-1]
xy = list(itertools.product(iX,iYr,))
ixyz = np.array(list(itertools.product(iX,iYr,[-0.0])))
for element in ixyz:
cube = box(pos = element,
size=( .1, .1, .1 ),)
ixyz 列表打印将如下所示:
[[-0.5 0. -0. ]
[-0.5 -0.5 -0. ]
[ 0. 0. -0. ]
[ 0. -0.5 -0. ]
[ 0.5 0. -0. ]
[ 0.5 -0.5 -0. ]]
我还有其他列表,其中 z 值有时会根据特定输入而变化,并且它始终会更新,它看起来像这样
[[-0.5 0. -0. ]
[-0.5 -0.5 -0. ]
[ 0. 0. -0. ]
[ 0. -0.5 -0. ]
[ 0.5 0. -2.3570226]
[ 0.5 -0.5 -0. ]]
我想根据新列表移动对象,我尝试了不同的版本但没有用,它总是查看第二个列表中的最后一项
while True:
.... some code here (the one getting the new list)
...
...
# then I added this:
for obj in scene.objects:
if isinstance(obj, box):
for i in xyz: # xyz is the new list
if obj.pos != i:
obj.pos = i
此变体将使所有框成为一个框并根据列表中的最后一个位置移动
我做错了什么或者有其他方法可以做到吗? 或者我应该改变创建对象并移动它们的整个过程吗? 我真的是 VPython 和 python 本身的新手。
编辑 我修复了两个列表,以便更好地呈现这样
[(-0.5,0.0,-0.0),(-0.5,-0.5,-0.0),...(0.5,-0.5,-0.0)]
您在更新的位置列表中重复设置每个元素的位置:
box.pos = 1
box.pos = 2
box.pos = 3
您需要设置一次位置;所以计算一个索引:
i = 0
for obj....
if isinstance ...
obj.pos = xyz [i]
i += 1