Construindo órbitas de corpos celestes usando Python



Sistemas de referência para determinar a órbita


Para encontrar as trajetórias dos movimentos relativos na mecânica clássica, é utilizada a suposição do tempo absoluto em todos os referenciais (inerciais e não inerciais).

Usando essa suposição, consideramos o movimento do mesmo ponto em dois quadros de referência diferentes K e K dos quais o segundo se move em relação ao primeiro a uma velocidade arbitrária  v e c V ( t ) = p o n t o v e c R ( t )   onde  v e c R ( t ) vetor de raio que descreve a posição da origem do sistema de coordenadas K em relação ao quadro de referência K )

Vamos descrever o movimento de um ponto no sistema K vetor de raio  v e c r (T) direcionado a partir da origem do sistema K para a posição atual do ponto. Então o movimento do ponto em consideração em relação ao quadro de referência K descrito por um vetor de raio  v e c r ( t ) :

 v e c r ( t ) = v e c r ' (T)+vecR(t)  (1)

e velocidade relativa  vecv(t)

 vecv(t)= ponto vecr(t)+ ponto vecR(t) (2)

onde  ponto vecr(t) - velocidade do ponto em relação ao sistema K ;  ponto vecR(t) velocidade do quadro K em relação ao quadro de referência K .



Assim, encontrar a lei do movimento de um ponto em um referencial arbitrário K necessário:

1) definir a lei de moção do ponto -  vecr(t) em relação ao quadro de referência K ;
2) definir a lei do movimento -  vecR(t) sistemas de referência K em relação ao quadro de referência K
3) determinar a lei de moção do ponto -  vecr(t)= vecr(t)+ vecR(t) em relação ao quadro de referência K .

Construção da órbita da lua no quadro de referência heliocêntrico





No sistema de referência heliocêntrico (sistema K ) Terra se move em um círculo de raio
R1=1.496 cdot108 km (período de circulação T1=3.156 cdot107 s.). A lua, por sua vez, se move em torno da Terra (sistema K ') em torno de um círculo de raio R2=3,844 cdot105 km (período de circulação T2=2,36 cdot106 s Como é sabido [1,2], quando um ponto de material se move ao longo de um círculo de raio R com velocidade angular constante  omega as coordenadas do vetor do raio traçadas desde a origem até a posição atual do ponto mudam de acordo com a lei:

 vecR(t)= binomR cdotcos( omega cdott+ varphi0)R cdotsin( omega cdott+ varphi0)= binomR cdotcos( frac2 piT)+ varphi0)R cdotsin( frac2 piT+ varphi0),(3)



onde  varphi0 - a fase inicial que caracteriza a posição da partícula no momento t=0 , que no futuro assumiremos como sendo zero. Substituindo em (3) R em R1 e R2 e substituindo em (1), obtemos a dependência do vetor raio da lua no sistema de coordenadas heliocêntricas no tempo:

 vecr(t)= binomx(t)y(t)= binomR2cos( frac2 piT2t)+R1cos( frac2 piT1t)R2sin( frac2 piT2t)+R1sin( frac2 piT1t),(4)



A expressão (4) define a órbita da Lua ( y=y(x(t)) ) na forma paramétrica, em que o parâmetro é time. Para construir a órbita desejada usando Python, definimos os raios das órbitas e os períodos de rotação da Terra e da Lua.

A Terra se move em um sistema de coordenadas heliocêntricas ( K ) seu raio de órbita e o período de revolução são respectivamente iguais R1=1.496 cdot108km,T1=3.156 cdot107s A lua se move ao redor da terra em um sistema de coordenadas ( K ) seu raio de órbita e o período de revolução são respectivamente iguais R2=3,844 cdot105km,T2=2,36 cdot106s .

Em vista de (4), determinamos as funções da dependência das coordenadas no tempo:

 binom(X(t)=R1 cdotcos( frac2 piT1 cdott),Y(t)=R1 cdotsin( frac2 piT1 cdott)x(t)=R2 cdotcos( frac2 piT2 cdott),y(t)=R2 cdotsin( frac2 piT2 cdott),(5)



Usando (5), obtemos um par de coordenadas para a órbita da lua:

 binomXg(t)=X(t)+x(t)Yg(t)=Y(t)+y(t),(6)



Definimos o número de pontos nos quais as coordenadas N = 1000 e o tempo discreto no intervalo do período de rotação da Terra são calculados dt= fracT1N . Escreveremos um programa e construiremos um gráfico para a área de mudança de coordenadas positiva:

Determinação das órbitas da Terra e da Lua
from numpy import* from matplotlib.pyplot import* R1=1.496*10**8#       [6] T1=3.156*10**7 R2=3.844*10**5 T2=2.36*10**6 N=1000.0 def X(t): return R1*cos(2*pi*t/T1) def Y(t): return R1*sin(2*pi*t/T1) def x(t): return R2*cos(2*pi*t/T2) def y(t): return R2*sin(2*pi*t/T2) k=100 t=[T1*i/N for i in arange(0,k,1)] X=array([X(w) for w in t]) Y=array([Y(w) for w in t]) x=array([x(w) for w in t]) y=array([y(w) for w in t]) XG=X+x YG=Y+y figure() title("    .\n    ") xlabel('$X(t_{k})$,$X_{g}(t_{k})$') ylabel('$Y(t_{k})$,$Y_{g}(t_{k})$') axis([1.2*10**8,1.5*10**8,0,1*10**8]) plot(X,Y,label=' ') plot(XG,YG,label=' ') legend(loc='best') grid(True) show() 

Temos:


Fig. 1

O cronograma criado permite expandir a tarefa de treinamento e ver qual será a órbita da lua se o raio da órbita da lua for R2=3,844 cdot107 . . É claro para o leitor que nem sequer tem conhecimento especial em astronomia que a Lua não pode ter uma órbita assim em campos não-gravitacionais da Terra, e um raio hipotético é usado para estudar as condições para o aparecimento de loops . Faremos as alterações apropriadas no programa:

Determinação das órbitas da Terra e da Lua
estudando
  from numpy import* from matplotlib.pyplot import* R1=1.496*10**8#       [6] T1=3.156*10**7 R2=3.844*10**7 T2=2.36*10**6 N=1000.0 def X(t): return R1*cos(2*pi*t/T1) def Y(t): return R1*sin(2*pi*t/T1) def x(t): return R2*cos(2*pi*t/T2) def y(t): return R2*sin(2*pi*t/T2) t=[T1*i/N for i in arange(0,N,1)] X=array([X(w) for w in t]) Y=array([Y(w) for w in t]) x=array([x(w) for w in t]) y=array([y(w) for w in t]) XG=X+x YG=Y+y figure() title("    ") xlabel('$X(t_{k})$,$X_{g}(t_{k})$') ylabel('$Y(t_{k})$,$Y_{g}(t_{k})$') axis([-2.0*10**8,2.0*10**8,-2.0*10**8,2.0*10**8]) plot(X,Y,label=' ') plot(XG,YG,label=' ') legend(loc='best') grid(True) show() 


Temos:


Fig.2

Comparando as órbitas da lua mostradas na Fig. 1 e 2, encontramos suas diferenças significativas. Para explicar as razões dessas diferenças, é necessário comparar as velocidades lineares da lua no primeiro e segundo casos e a velocidade linear da Terra.

Como a direção da velocidade linear da Terra em relação ao Sol, bem como a direção da velocidade linear da Lua em relação à Terra, muda no tempo e a velocidade permanece constante em magnitude.

Como característica quantitativa da razão das velocidades lineares da lua e da terra no sistema de coordenadas heliocêntricas, deve-se escolher a diferença entre o módulo de velocidade linear da terra e a projeção da velocidade linear da lua na direção do vetor de velocidade linear da terra:

vo(t)= esquerda| vecV(t) direita| frac( vecV(t) cdot vecv(t)) left| vecV(t) right|,(7)



Definimos as funções que descrevem as leis da mudança dos componentes da velocidade da Terra e da Lua:

\ begin {matriz} V_ {x} (t) = \ frac {d} {dt} X (t), V_ {y} (t) = \ frac {d} {dt} Y (t) & \\ vx (t) = \ frac {d} {dt} x (t), vy (t) = \ frac {d} {dt} y (t) \ end {matrix}, (8)



Para determinar a velocidade resultante, levando em consideração a projeção, usamos a relação:

D(t)= sqrtVx(t)2+Vy(t)2 sqrtvx(t)2+vy(t)2 cdot fracVx(t) cdotvx(t)+Vy(t) cdotvy(t) sqrtVx(t)2+Vy(t)2 cdot sqrtvx(t)2+vy(t)2,(9)

Escreveremos um programa levando em consideração (5), (8), (9) e o raio da órbita da lua R2=3,844 cdot105 km:

Lua e Terra estão se movendo na mesma direção
 from numpy import* from matplotlib.pyplot import* R1=1.496*10**8#       [6] T1=3.156*10**7 R2=3.844*10**5 T2=2.36*10**6 N=1000.0 k1=2*pi/T1 k2=2*pi/T2 def Vx(t): return -k1*R1*sin(k1*t) def Vy(t): return k1*R1*cos(k1*t) def vx(t): return -k2*R2*sin(k2*t) def vy(t): return k2*R2*cos(k2*t) def D(t): return sqrt(Vx(t)**2+Vy(t)**2)-sqrt(vx(t)**2+vy(t)**2)*(Vx(t)*vx(t)+Vy(t)*vy(t))/((sqrt(Vx(t)**2+Vy(t)**2))*(sqrt(vx(t)**2+vy(t)**2))) x=[T1*i/N for i in arange(0,N,1)] y=[D(t) for t in x] title("       \n    R2=3.844*10**5 .") xlabel('t') ylabel('D(t)') plot(x,y) show() 


Temos:


Fig. 3.

Escreveremos um programa levando em consideração (5), (8), (9) e o raio da órbita da Lua R2 = 3,844 * 10 ** 7 km:

A lua se move periodicamente na direção oposta à Terra
 from matplotlib.pyplot import* R1=1.496*10**8#       [6] T1=3.156*10**7 R2=3.844*10**7 T2=2.36*10**6 N=1000.0 k1=2*pi/T1 k2=2*pi/T2 def Vx(t): return -k1*R1*sin(k1*t) def Vy(t): return k1*R1*cos(k1*t) def vx(t): return -k2*R2*sin(k2*t) def vy(t): return k2*R2*cos(k2*t) def D(t): return sqrt(Vx(t)**2+Vy(t)**2)-sqrt(vx(t)**2+vy(t)**2)*(Vx(t)*vx(t)+Vy(t)*vy(t))/((sqrt(Vx(t)**2+Vy(t)**2))*(sqrt(vx(t)**2+vy(t)**2))) x=[T1*i/N for i in arange(0,N,1)] y=[D(t) for t in x] title("        \n .    R2=3.844*10**7 .") xlabel('t') ylabel('D(t)') plot(x,y) show() 


Temos:


Fig. 4.

A análise de dependências nos permite explicar o motivo das diferenças nas órbitas. A função D (t) para R2=3,844 cdot105 km é sempre positivo, ou seja, a lua sempre se move na direção do movimento da Terra e não se formam laços. At R2=3,844 cdot107 valor em km D(t) assume valores negativos, e há momentos em que a lua se move na direção oposta à direção do movimento da Terra e, portanto, a órbita tem laços. Este era o significado de usar a órbita inexistente da lua nos cálculos.

Construção da órbita de Marte no quadro de referência associado à Terra

.


No sistema de referência heliocêntrico (sistema K), a Terra se move em um círculo de raio R1=1.496 cdot108 km, período de circulação T1=$365,2 dia, Marte se move ao longo de uma elipse, cujo eixo semi-principal am=2,28 cdot108 km, o período da revolução de Marte Tm=$689,9 dias., a excentricidade da órbita e=$0,09 [3] O movimento da Terra é descrito pelo vetor de raio R (t) definido pela expressão (3). Devido ao fato de a órbita de Marte ser uma elipse, dependências x=x(t),y=y(t) desde o tempo são configurados parametricamente [4]:

x( varepsilon)=am cdot(cos( varepsilon)e) (10)

y( varepsilon)=am cdot sqrt1e2 cdotsin( varepsilon) (11)

t( varepsilon)= fracTm2 pi cdot( varepsilone cdotsin( varepsilon)) (12)

Uma revolução completa da elipse corresponde a uma alteração no parâmetro <img  varepsilon de 0 a 2 pi . Para construir a órbita de Marte, é necessário calcular as coordenadas dos vetores de raio nos mesmos momentos que descrevem a posição da Terra e de Marte no referencial heliocêntrico e, em seguida, de acordo com a relação  vecr(t)= vecr(t) vecR(t) calcular as coordenadas de Marte no quadro de referência associado à Terra.

Para construir a órbita de Marte no quadro de referência conectado à Terra, usamos os parâmetros anteriormente fornecidos das órbitas da Terra e Marte, relações (10) - (12) e também as relações para as coordenadas da Terra:

X(t)=R1 cdotcos( frac2 piT1t) (13)

Y(t)=R1 cdotsin( frac2 piT1t) (14)

Deve-se notar que o número de períodos de revolução de Marte ao redor do Sol é K=9 , o número de pontos nos quais o cálculo deve ser feito e a distância entre eles será determinada a partir das relações:

N=4000 cdotK, varepsiloni= frac2 piN cdoti,i=0...N (15)

Órbita de Marte no referencial da Terra
 from numpy import* from matplotlib.pyplot import* R1=1.496*10e8#       [4] T1=365.24 am=2.28*10e8 Tm=689.98 ee=0.093 N=36000 def x(g): return am*(cos(g)-ee) def y(g): return am*sqrt(1-ee**2)*sin(g) def t(g): return Tm*(g-ee*sin(g))/2*pi def X(g): return R1*cos(2*pi*t(g)/T1) def Y(g): return R1*sin(2*pi*t(g)/T1) y=array([y(2*pi*i/N) for i in arange(0,N,1)]) x=array([x(2*pi*i/N) for i in arange(0,N,1)]) X=array([X(2*pi*i/N) for i in arange(0,N,1)]) Y=array([Y(2*pi*i/N) for i in arange(0,N,1)]) t=array([t(2*pi*i/N) for i in arange(0,N,1)]) figure() title("    ") xlabel('x(g),X(g)') ylabel('y(g),Y(g)') plot(x,y,label=' ') plot(X,Y,label=' ') legend(loc='best') figure() title("       ") xlabel('x1/10e8') ylabel('y1(g/10e8') x1=(xX) y1=(yY) plot(x1/10e8,y1/10e8) figure() title("      \n    ") xlabel('t/365.24') ylabel('sqrt(x1**2+y1**2)/10e8') y2=sqrt(x1**2+y1**2)/10e8 x2=t/365.24 plot(x2,y2) show() 


Temos:


Fig.5

Calculamos as coordenadas do vetor de raio que descrevem a posição de Marte no referencial conectado à Terra e construímos as órbitas (Fig. 6) usando a relação:

x1i=x( varepsiloni)X(t( varepsiloni)),y1i=y( varepsiloni)Y(t( varepsiloni)) (16)


Fig.6

Outra característica importante do movimento de Marte (principalmente para vôos espaciais interplanetários) é a distância entre a Terra e Marte s (t), que é determinada pelo módulo do vetor de raio que descreve a posição de Marte no quadro de referência associado à Terra. A dependência da distância entre a Terra e Marte do tempo medido em anos terrestres é apresentada na Fig. 7.


Fig. 7

Uma análise da dependência mostrada na Fig. 7 mostra que a distância entre a Terra e Marte é uma função periódica complexa do tempo. Se usarmos a terminologia da teoria dos sinais [5], podemos dizer sobre a dependência s (t) que é um sinal modulado em amplitude, que geralmente é representado como o produto de duas funções de uma função de alta frequência (portadora) e baixa frequência que define a modulação de amplitude (envelope) :

u(t)=( baru+a cdotsin( omega1t)) cdot(1+ Deltaa cdotsin( omega2t)) (17)

onde  baru - componente constante da função u(t) ; a - amplitude do sinal;  omega1 - frequência portadora;  Deltaa - a amplitude da função que define a profundidade da modulação de amplitude;  omega2 - frequência da função de modulação.

A partir da Fig. 7, pode-se observar que o período da transportadora é de aproximadamente 2 anos, o período da função de modulação é de aproximadamente 17 anos] 6].

Construção da órbita heliocêntrica do cometa Halley




A última vez que o cometa Halley passou por seu periélio (o ponto de órbita mais próximo do Sol) em 9 de fevereiro de 1986. (O próprio Sol é considerado localizado na origem.)

As coordenadas e componentes de velocidade do cometa Halley naquele momento eram iguais p0=(0,325514,0,459460,0,166229) e v0=(9.096111,6.916686,1.305721) respectivamente, e a distância aqui é expressa em unidades astronômicas de comprimento - a.u.d., ou simplesmente a.u. (unidade astronômica, ou seja, o comprimento da maior semiaxe principal da órbita da Terra) e o tempo em anos. Nestas unidades de medida, as equações tridimensionais de movimento do cometa têm a forma

\ left \ {\ begin {matrix} \ frac {d ^ {2} x} {dt ^ {2}} = - \ frac {\ mu \ cdot x} {r ^ {3}} \\ \ frac { d ^ {2} y} {dt ^ {2}} = - \ frac {\ mu \ cdot y} {r ^ {3}} \\ \ frac {d ^ {2} z} {dt ^ {2} } = - \ frac {\ mu \ cdot z} {r ^ {3}} \ end {matrix} \ right., (18)

(18)

onde:  mu=4 pi2,r= sqrtx2+y2+z2

Construção da órbita heliocêntrica do cometa Halley
 from numpy import* from scipy.integrate import odeint import matplotlib.pyplot as plt from matplotlib.patches import Circle def f(y, t): y1, y2, y3, y4,y5,y6 = y return [y2, -(4*pi*pi*y1)/(y1**2+y3**2 +y5**2)**(3/2),y4,-(4*pi*pi*y3)/(y1**2+y3**2 +y5**2)**(3/2),y6,-(4*pi*pi*y5)/(y1**2+y3**2 +y5**2)**(3/2)] t = linspace(0,300,10001) y0 = [0.325514,-9.096111, -0.459460,-6.916686,0.166229,-1.305721] [y1,y2, y3, y4,y5,y6]=odeint(f, y0, t, full_output=False).T fig, ax = plt.subplots() plt.title("  (  ..,   ) \n    ") plt.xlabel('x(t)') plt.ylabel('y(t)') fig.set_facecolor('white') ax.plot(y1,y3,linewidth=1) circle = Circle((0, 0), 0.2, facecolor='orange') ax.add_patch(circle) plt.axis([1,-21,-1,29]) plt.grid(True) fig, ax = plt.subplots() plt.title("   \n    ") plt.xlabel('x(t)') plt.ylabel('z(t)') fig.set_facecolor('white') ax.plot(y1,y5,linewidth=1) circle = Circle((0, 0), 0.1, facecolor='orange') ax.add_patch(circle) plt.axis([1,-21,1,-11]) plt.grid(True) fig, ax = plt.subplots() plt.title("   \n    ") plt.xlabel('y(t)') plt.ylabel('z(t)') fig.set_facecolor('white') ax.plot(y3,y5,linewidth=1) circle = Circle((0, 0), 0.2, facecolor='orange') ax.add_patch(circle) plt.axis([-1,29,1,-11]) plt.grid(True) fig, ax = plt.subplots() plt.title("     \n   ZOX  ZOY ") ax.plot(t,y1,linewidth=1) ax.plot(t,y3,linewidth=1) plt.show() 


Temos:









Seu próprio cometa

Tente um experimento. À noite, você monta seu telescópio no topo de uma colina não muito longe de sua casa. A noite deve estar clara, sem nuvens, estrelada e, se a sorte lhe sorriu: às 0:30 da manhã, você notará um novo cometa.

Após repetidas observações nas noites seguintes, você poderá calcular suas coordenadas na primeira noite. Coordenadas no sistema de coordenadas heliocêntricas: P0 = (x0, y0, z0) e o vetor de velocidade v0 = (vx0, vy0, vz0).

Usando esses dados, determine:

  • a distância do cometa do Sol no periélio (o ponto de órbita mais próximo do Sol) e no afélio (o ponto de órbita mais distante do Sol);
  • velocidade do cometa ao passar pelo periélio e pelo afélio;
  • o período de revolução do cometa em torno do sol;
  • Nas próximas duas datas, o cometa passa pelo periélio.

Se medirmos a distância em unidades astronômicas e o tempo em anos, a equação de movimento do cometa assumirá a forma (18). Para o seu próprio cometa, selecione coordenadas de partida arbitrárias e velocidades da mesma ordem que o cometa de Halley.

Se necessário, refaça uma escolha arbitrária da posição inicial e do vetor de velocidade até obter uma órbita excêntrica plausível que vá além da órbita da Terra (como a maioria dos cometas reais).

Referências:


  1. Feynman R., Leighton R., Sands M. Feynman Palestras em Física. 3rd ed. T. 1,2. M .: Mir, 1977.
  2. Matveev A.N. Mecânica e Teoria da Relatividade. M.: Mais alto. escola., 1986.
  3. Enciclopédia Física. T. 3. M.: Big Russian Encyclopedia, 1992.
  4. Landau L.D., Lifshits E.M. Curso em Física Teórica. A mecânica M.: Fu-matgiz, 1958.
  5. Baskakov S.I. Circuitos e sinais de engenharia de rádio. M.: Mais alto. escola., 1988.
  6. Porshnev C.V. Simulação computacional de processos físicos usando o pacote mathcad .

Source: https://habr.com/ru/post/pt419911/


All Articles