我被困在李·沃恩不切实际的Python项目书的第13章(模拟外星火山)的一个特定项目上
在这本书中,我们要模拟木星卫星木卫一上的火山。代码可以在here中找到:
我的问题是:
我知道粒子的位移首先通过以下公式计算:
radians = math.radians(orient)
self.dx = self.vel * math.cos(radians)
self.dy = -self.vel * math.sin(radians) # negative as y increases down
然后重力被加到Y轴上,因此:
self.dy += Particle.GRAVITY
pg.draw.line(self.background, self.color, (self.x, self.y), (self.x + self.dx, self.y + self.dy))
self.x += self.dx
self.y += self.dy
我的问题是:在上述所有情况下,在某一点上,重力必须足够大,以至于粒子开始下降而不是上升;然而,self.dy只是两个常数(初始速度、重力)的函数。所以它应该继续沿着一条直线前进。例如,对于以特定角度(例如z)喷射的粒子:
self.dy = self.vel*math.sin(z) + particle.GRAVITY
这里,
因此,“dy”在任何给定的时间段内都会保持不变。然而,模拟显示了弹丸的运动……如何
重力不是添加到
self.y
,而是添加到self.dy
。这在每一帧中都会发生。因此,在每个帧中self.dy
的量稍微增加,并且对象的位置在每个帧中稍微改变。这会导致运动加速和下落速度加快相关问题 更多 >
编程相关推荐