2016-07-06 4 views
2

Когда я запускаю свой код, земля, похоже, стремится к пределу, а не к орбите вокруг Солнца, мне не хватает уравнений или что-то не так с моим кодом?Как имитировать орбиты

Здесь ошибка я получаю:

Warning (from warnings module): 
    File "C:\Python32\lib\site-packages\visual\visual_all.py", line 52 
    return numpy(x) 
RuntimeWarning: invalid value encountered in sqrt 

Вот код, который я написал:

from visual import * 

def SUVAT(A,B): 
     global EarthFinalV 
     global Acceleration 
     EarthFinalV = sqrt((A) + 2*Acceleration*(B)) 

GravitationalConstant = 1 

Sun = sphere(pos=(0,0,0), radius=10, color=color.red, 
      make_trail=True) 

Earth = sphere(pos=(50,0,0), radius=5, color=color.yellow, 
       make_trail=True) 

Sun.mass = 50 
Earth.mass = 10 

EarthInitialV = vector(0,1000,0) 
EarthFinalV = vector(0,0,0) 

while True: 
    rate(1) 
    Distance = Earth.pos - Sun.pos 

    GravitationalEquation = (GravitationalConstant*Sun.mass*Earth.mass)/mag(Distance)**2 
    Acceleration = GravitationalEquation/Earth.mass 

    SUVAT(EarthInitialV,Distance) 

    Earth.pos = Earth.pos - EarthFinalV 
+0

Это полный след предупреждения? Кроме того, так же, как нит-кик. Вы не должны использовать импорт glob (т. Е. От визуального импорта *), это может время от времени вызывать проблемы. Вы знаете, какая часть кода вызывает проблему? –

+1

Я не знаю, как SUVAT получает 'Acceleration', так как он должен быть недоступен. Можете ли вы опубликовать то, что, по-вашему, ваши уравнения должны быть в менее программном, более математическом смысле? –

ответ

0

Я заметил ваше гравитация уравнение является неправильным. Вы должны разделить на квадрат радиуса, а не в два раза больше радиуса. Вместо mag(Distance)*2 попробуйте Distance * Distance, или Distance**2

+0

У меня есть ошибка, потому что это 3D-вектор. Если у меня нет величины вектора, он не запускает код. –

+0

Право, Mag (вектор) = длина вектора. Это имеет смысл, прошло уже некоторое время с класса физики. НО: F = g * m1 * m2/(r * r). Поэтому сделайте знаменатель Mag (Расстояние) ** 2, а не Mag (Расстояние) * 2. Дополнительная звездочка приведет к квадрату радиуса вместо удвоения. – PfunnyGuy

+0

Я отредактировал его сейчас, чтобы расстояние было квадратным, но теперь оно имеет тенденцию к пределу без ошибок, оно по-прежнему не вращается вокруг Солнца. Как вы думаете, почему? –

Смежные вопросы