我正在使用 VPython 创建一个虚拟台球/台球游戏。我想让它每隔 dt 的“时间”更新一次位置(我使用 rate() 来限制循环时间),而不是更快。
我的位置计算展望任何潜在的碰撞 0
例如:如果 dt=1,并且我在 0.25 秒检测到碰撞,我将位置提前 0.25 秒,计算新速度,然后在接下来的 0.75 秒内检查碰撞。重复此过程,直到在当前时间跳跃中未检测到碰撞。然后我想展示对象位置的这种变化。(然后 rate() 导致等待直到下一次通过)
我的问题是: 在检测到将所有位置和速度向量更改为元组并返回之前,通过拉取诸如 sphere.position = sphere.position+sphere.velocity*t1 之类的东西来做向量数学是否更快?到向量,然后进行向量数学运算,然后在分配新的 t=t+dt 位置/速度值之前转换为元组和向量。
转换是必要的,因为向量是可变数据,因此将值拉到新变量并进行数学运算仍会更改 sphere.position 值,因此会导致屏幕上的位置更新。
本质上,Vpython 是在视觉上更新位置时暂停其他进程,还是在数字尽可能快地紧缩时尽可能快地运行?
如果我需要更清楚地解释某些事情,请告诉我
编辑:
意识到我可以为此使用廉价的解决方案。
>>> h=vector(5,6,2)
>>> j=h
>>> j.mag*=2
>>> j
vector(10, 12, 4)
>>> h
vector(10, 12, 4)
上面的部分显示了如果直接复制向量会发生什么。但是如果你在复制过程中乘以一,它会产生一个新的向量,因为从技术上讲值已经改变了,但在数字上它是一样的
>>> k=h*1
>>> k
vector(10, 12, 4)
>>> k*=2
>>> k
vector(20, 24, 8)
>>> h
vector(10, 12, 4)