Уведомления

Группа в Telegram: @pythonsu

#1 Июль 2, 2012 19:41:30

leo_nide
Зарегистрирован: 2012-07-02
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Движение спутника в Python

Добрый вечер, прошу помочь с программой на Python
Цель: смоделировать траекторию движения спутника (на спутник ничто кроме Земли не влияет, сам спутник в виде материальной точки). По идее должен получиться круг.
Делаю с помощью библиотеки matplotlib, плюс vector - мой модуль, где прописаны сложение и умножение векторов и вектора на число. ПРога либо зацикливается , либо выводит прямую, то есть во втором варианте скорее всего неправильно написан ylist. А что именно – не доходит.. Насколько я понимаю, результат возвращаться должен в векторах. Заранее благодарю

#!/usr/bin/python
# -*- coding: utf-8 -*-

import math
import pylab
from matplotlib import mlab
from vector import vector

M_earth = 5.9736e-24
G = 6.67429e-11
R0 = vector( 0, 10000000.0 ) # радиус-вектор
V0 = vector( 10000.0, 0 ) #начальная скорость
def ar () : # ускорение
R = R0
V = V0
RR = ( G * M_earth / (R.abs*R.abs*1/R.abs)*R)
dt = 0.5
T = 60 # одна минута

for n in range(0,int(T//dt)) :
R1 = R + dt*V
V = V + dt*RR
R = R1

xmin = -100000.0
xmax = 100000.0
ymin = -100000.0
ymax = 100000.0
dx = 0.1
xlist = mlab.frange (xmin, xmax, dx)
ylist =
pylab.plot (xlist, ylist)
pylab.show()

модуль vector:
#!/usr/bin/python
# -*- coding: utf-8 -*-

import math

class vector ( object ) :

def __init__( self, x, y ) :
self.__X = float(x)
self.__Y = float(y)

def __repr__ ( self ) :
return “( %f, %f )” % ( self.__X, self.__Y )

@property
def abs( self ) : # длина
return math.sqrt( self.__X * self.__X +
self.__Y * self.__Y )

def __add__( self, other ) : #сложение
return vector( self.__X + other.__X,
self.__Y + other.__Y )

def __mul__( self, number ) :
return vector( float(number)*self.__X,
float(number)*self.__Y )

def __rmul__( self, number ) :
return self * number

Офлайн

#2 Июль 2, 2012 19:46:50

leo_nide
Зарегистрирован: 2012-07-02
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Движение спутника в Python

приложу еще в виде файлов

Прикреплённый файлы:
attachment Sputnik.zip (1,1 KБ)

Офлайн

#3 Июль 2, 2012 20:20:48

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Движение спутника в Python

M_earth = 5.9736e-24 масса протона для сравнения 1.672621777e−27
те ваша земля очень легкая, размером со среднюю органическую молекулу. Может поэтому спутник к ней слабо притягивается?



Отредактировано doza_and (Июль 2, 2012 20:27:09)

Офлайн

#4 Июль 3, 2012 01:23:31

leo_nide
Зарегистрирован: 2012-07-02
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Движение спутника в Python

doza_and, спасибо, и правда. Не должно быть там минуса.
Только дело все равно не в нем

Офлайн

#5 Июль 3, 2012 02:32:34

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

Движение спутника в Python

wiki. g

leo_nide
RR = ( G * M_earth / (R.abs*R.abs*1/R.abs)*R) 
это что ?

leo_nide
Только дело все равно не в нем
сформулируй решение задачи
должно получиться множество точек



Офлайн

#6 Июль 3, 2012 10:28:22

leo_nide
Зарегистрирован: 2012-07-02
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Движение спутника в Python

py.user.next
это что ?
ага, это вектор ускорения свободного падения. G * M_earth / (R.abs*R.abs) - скаляр,( 1/R.abs)*R - единичный вектор, ибо далее идет работа с векторами. Ну, я предполагаю, что она должна идти с векторами.

Решение задачи - вывести на график траекторию (в декартовой ск), которую чертит спутник, то есть (насколько я понимаю) создать цикл, который бы выводил последовательно каждую точку. Цикл, в общем-то, создается. Только зацикливается он раньше, чем переходит к процессу рисования линии.
Программу планирую долго и мучительно доделывать, поэтому не хотелось бы брать сразу “с полки” значения.

Офлайн

#7 Июль 4, 2012 01:33:30

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

Движение спутника в Python

1) цикл у тебя не бесконечный, а на 2000001 значение
2) R1 = R + dt*V вот это на чём основано ?

инфа1. виды движений
инфа2. способы задания движения

leo_nide
RR = ( G * M_earth / (R.abs*R.abs*1/R.abs)*R) 
ага, это вектор ускорения свободного падения
во-первых, скобки не там
g = G * M_earth / (R.abs * R.abs)
an = g * (1 / R.abs) * R
а во-вторых, вектор R направлен от центра Земли в сторону точки, а надо найти вектор нормали, который направлен от точки в сторону Земли
g = G * M_earth / (R.abs * R.abs)
an = g * (-1 * 1 / R.abs) * R

leo_nide
Решение задачи - вывести на график траекторию (в декартовой ск), которую чертит спутник
для этого надо сначала всё это вручную сделать на небольшом промежутке, а потом получить функцию, которая возвращает координаты каждой точки траектории в зависимости от передаваемого ей параметра t



Отредактировано py.user.next (Июль 4, 2012 01:47:35)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version