假设我有一个包含运动学对象实例的字典。每个运动学对象都有一个位置、速度等。对于程序的每个时间步更新,我要检查两个活动对象(不是同一个对象,请注意)是否在参考帧中占据相同的位置。如果它们这样做了,这将模拟一个碰撞,所涉及的两个对象将被销毁,它们的实例将从活动对象字典中删除
dict actives{ 'missile' : object_c(x1, y1, z1),
'target' : object_c(x2, y2, z2),
'clutter' : object_c(x3, y3, z3),
... }
...
for key1 in self.actives.keys():
for key2 in self.actives.keys():
if not key1 == key2:
# Get Inertial Positions and Distance
Pos21 = self.actives[key2].Pos - self.actives[key1].Pos
distance = math.sqrt(sum(Pos21**2))
# If Distance <= Critical Distance
if distance <= 1.0e0
# Remove key1 and key2 from Actives
# -- This is where I need help --
我不能使用del
:键(和对象)将从活动中删除,但是for
循环的条件无法识别这一点,并且将遇到一个键错误。在访问循环条件的键时,如何从活动中删除这些对象
我认为Maximilian Peters的基本思想是正确的,但是要删除的项应该保存在} 生成器函数,以便只测试唯一的对象对
set
而不是list
中,以避免活动键多次出现在其中的问题。为了进一步加快碰撞检测过程,我将比较循环更改为使用^{我还必须添加大量的脚手架,使它有可能在一个上下文中测试代码,就像你可能有它运行在
输出:
在循环时,可以再次检查密钥是否仍然存在:
简单的解决方案是,将要删除的键添加到列表中,然后在遍历所有元素后删除它们:
相关问题 更多 >
编程相关推荐