Python 3.9.0 阻力物理模拟异常排查(仅抛射体向右运动时触发)
问题排查结果
- 核心问题1:阻力方向计算错误
空气阻力的加速度方向与抛射体运动方向完全相反,你当前代码计算的加速度和速度方向一致,相当于给抛射体额外加了同方向的推力,这就是向右运动时逻辑异常的核心原因。 - 核心问题2:角度计算函数选型错误
math.atan(self.velocity[1]/self.velocity[0])存在两个严重缺陷:- 当水平速度
self.velocity[0]为0时会触发除零运行错误 - 无法正确区分第二、第三象限的角度,当水平速度为负时角度计算完全错误
应该替换为Python内置的math.atan2(y, x)函数,该函数可以自动处理四象限角度计算,也兼容x=0的场景。
- 当水平速度
修复后的代码
import math # 省略类定义部分 def CalculateAcceleration(self): # 替换atan为atan2,正确获取速度方向角 currentTheta = math.atan2(self.velocity[1], self.velocity[0]) # 计算速度平方,直接相乘比math.pow性能更好 currentSquaredVelocity = self.velocity[0] ** 2 + self.velocity[1] ** 2 accelerationMagnitude = currentSquaredVelocity * self.coeffD # 阻力方向与速度相反,添加负号 self.acceleration = [-math.cos(currentTheta) * accelerationMagnitude, -math.sin(currentTheta) * accelerationMagnitude] # 叠加重力加速度(保持原有坐标系逻辑,y轴向上时重力向下做减法) self.acceleration = [self.acceleration[0], self.acceleration[1] - self.g]
内容的提问来源于stack exchange,提问作者ShlonkeyJouves
相关产品推荐
相关产品推荐

