2016-07-04 2 views
-2

Это код, который я написал на VPython до сих пор, я новичок в Vpython, и я не настолько опытен в python, так что немного перепутаю, пожалуйста, ошибка, которую я получаю:Проблема с имитацией орбит в Visual Python

Traceback (most recent call last): File "C:\Users\Makka Pakka\Documents\Planetary Orbits.py", line 28 
    SUVAT(EarthInitialV,Distance) File "C:\Users\Makka Pakka\Documents\Planetary Orbits.py", line 4, in SUVAT 
    EarthFinalV.x = sqrt((A.x) + 2*Acceleration*(B.x)) TypeError: unsupported operand type(s) for +: 'float' and 'vector' 
from visual import * 

def SUVAT(A,B): 
     EarthFinalV.x = sqrt((A.x) + 2*Acceleration*(B.x)) 
     EarthFinalV.y = sqrt((A.y) + 2*Acceleration*(B.y)) 
     EarthFinalV.z = sqrt((A.z) + 2*Acceleration*(B.z)) 

GravitationalConstant = 10 

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(5,5,5) 
EarthFinalV = vector(0,0,0) 

while 1 != 2: 
    Distance = Earth.pos - Sun.pos 

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

    SUVAT(EarthInitialV,Distance) 

    Earth.x.pos = Earth.x.pos + EarthFinalV.x 
    Earth.y.pos = Earth.y.pos + EarthFinalV.y 
    Earth.z.pos = Earth.z.pos + EarthFinalV.z 
+3

В чем проблема, в частности, вы сталкиваетесь? Что вы наблюдаете с вышеуказанным кодом? Ответ на них в вашем Вопросе поможет получить больше ответов. – nbryans

+0

О, извините, что я включил это, плохо отредактировал его сейчас –

ответ

0

Кроме физика уравнений не является правильным, ошибка вызвана добавлением ряда (компонент) и вектор (3 компоненты). Для того, чтобы заставить его работать, вам нужно переписать функцию

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

Затем в цикле while (почему бы не сказать while True:) после SUVAT заменить 3 заявления с

Earth.pos = Earth.pos + EarthFinalV 

Шары имеют атрибуты Earth.pos (вектор), или Earth.pos.x (компонент), но не Earth.x.pos.

В любом случае, ваш код должен работать, но физика нуждается в исправлении.

+0

Спасибо, что помогли мне, код действительно работал –

+0

Примите ответ, затем :) – DeltaG

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