我正在一个简单的2D平面上绘制一个物体运动通过另一个引力吸引的物体的路径。
在每个循环中,时间增加一秒,然后计算并打印出人体的新位置。
然后,将结果粘贴到电子表格中并对其进行图形化处理。
一切正常,直到人体的x分量变为负数-然后轨迹变为线性,并在左上方滑行。
这都是我个人的娱乐活动,我不是学生。因此,在挠了一下头之后,我终于集结起来,向某人寻求帮助。
我可能错过了一些显而易见的事情。我怀疑我的三角学缺少某些东西。
我正在使用Python 2.7.10
import sys
import os
import math
mu = 4.0*(10**14)
massAst = 1
earthRadius = 6371000.
alt = 100000.
r = earthRadius+ alt
rTheta = 270.
rAngtoX = math.radians(rTheta)
tInc = 1 ## increment time by 1 seconds - one update of pos&velocity per second of travel
calcTime = 1100 ## simulation runtime (86400 seconds = 1 day) 10 mins
t = 1 ## integral of time t to use in the calcs in the loop.
printbell = 120 ## print results now
printclock = 0
hourCount = 0
## Initialise velocity vectors for Asteroid:
uAstX = 1500.
uAstY = 0.
vAstX = 0.
vAstY = 0.
## Displacement
dAstX = r*math.cos(rAngtoX)
dAstY = r*math.sin(rAngtoX)
for i in range(0, calcTime):
acc = -1*(mu/r**2)
accX = acc*math.cos(rAngtoX)
accY = acc*math.sin(rAngtoX)
vAstX = uAstX + accX*t ## new value for velocity in X direction
vAstY = uAstY + accY*t ## and in Y
deltaDAstX = uAstX*t + 0.5*accX*(t**2) ## change in position over this time interval
deltaDAstY = uAstY*t + 0.5*accY*(t**2)
dAstX = dAstX + deltaDAstX
dAstY = dAstY + deltaDAstY
uAstX = vAstX
uAstY = vAstY
## Now calculate new angle and range
## tan(theta) = dAstY/dAstX, so:
rAngtoX = math.atan(dAstY/dAstX) ##+(2*3.141592654)
##print 'theta:', math.degrees(rAngtoX)
r = dAstY/math.sin(rAngtoX)
## if i == print
print dAstX, ' ', dAstY
最佳答案
当dAstX
接近零时,dAstY/dAstX
将接近被零除...这将引起各种问题(至少是舍入问题)。
我建议将距离/速度/加速度的x / y分量分开。当然,物体之间的距离很重要,但是可以使用r=sqrt(dAstX**2 + dAstY**2)
来计算。