我正在一个简单的2D平面上绘制一个物体运动通过另一个引力吸引的物体的路径。

在每个循环中,时间增加一秒,然后计算并打印出人体的新位置。
然后,将结果粘贴到电子表格中并对其进行图形化处理。

一切正常,直到人体的x分量变为负数-然后轨迹变为线性,并在左上方滑行。

python - 在Python中绘制轨道,但是当x <0时,轨迹突然变为线性-LMLPHP

这都是我个人的娱乐活动,我不是学生。因此,在挠了一下头之后,我终于集结起来,向某人寻求帮助。
我可能错过了一些显而易见的事情。我怀疑我的三角学缺少某些东西。

我正在使用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)来计算。

10-06 12:00