Найти - Пользователи
Полная версия: Движение спутника в Python
Начало » Центр помощи » Движение спутника в Python
1
leo_nide
Добрый вечер, прошу помочь с программой на 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

leo_nide
приложу еще в виде файлов
doza_and
M_earth = 5.9736e-24 масса протона для сравнения 1.672621777e−27
те ваша земля очень легкая, размером со среднюю органическую молекулу. Может поэтому спутник к ней слабо притягивается?
leo_nide
doza_and, спасибо, и правда. Не должно быть там минуса.
Только дело все равно не в нем
py.user.next
wiki. g

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

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

Решение задачи - вывести на график траекторию (в декартовой ск), которую чертит спутник, то есть (насколько я понимаю) создать цикл, который бы выводил последовательно каждую точку. Цикл, в общем-то, создается. Только зацикливается он раньше, чем переходит к процессу рисования линии.
Программу планирую долго и мучительно доделывать, поэтому не хотелось бы брать сразу “с полки” значения.
py.user.next
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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB