Construyendo órbitas de cuerpos celestes usando Python



Sistemas de referencia para determinar la órbita.


Para encontrar las trayectorias de los movimientos relativos en la mecánica clásica, se utiliza la suposición del tiempo absoluto en todos los marcos de referencia (tanto inerciales como no inerciales).

Usando esta suposición, consideramos el movimiento del mismo punto en dos marcos de referencia diferentes K y K de los cuales el segundo se mueve con relación al primero a una velocidad arbitraria  vecV(t)= dot vecR(t) donde  vecR(t) vector de radio que describe la posición del origen del sistema de coordenadas K relativo al marco de referencia K )

Describiremos el movimiento de un punto en el sistema. K vector de radio  vecr(t) dirigido desde el origen del sistema K a la posición actual del punto. Luego, el movimiento del punto considerado en relación con el marco de referencia K descrito por un vector de radio  vecr(t) :

 vecr(t)= vecr(t)+ vecR(t) , (1)

y velocidad relativa  vecv(t)

 vecv(t)= dot vecr(t)+ dot vecR(t) , (2)

donde  dot vecr(t) - velocidad del punto relativo al sistema K ;  dot vecR(t) velocidad de cuadro K relativo al marco de referencia K .



Por lo tanto, para encontrar la ley de movimiento de un punto en un marco de referencia arbitrario K necesario:

1) establecer la ley de movimiento del punto -  vecr(t) relativo al marco de referencia K ;
2) establecer la ley de movimiento -  vecR(t) sistemas de referencia K relativo al marco de referencia K
3) determinar la ley de movimiento del punto -  vecr(t)= vecr(t)+ vecR(t) relativo al marco de referencia K .

Construcción de la órbita de la luna en el marco de referencia heliocéntrico.





En el sistema de referencia heliocéntrico (sistema K ) La Tierra se mueve en un círculo de radio
R1=1.496 cdot108 km (período de circulación T1=3,156 cdot107 s.). La luna, a su vez, se mueve alrededor de la Tierra (sistema K ') alrededor de un círculo de radio. R2=3.844 cdot105 km (período de circulación T2=2.36 cdot106 s Como se sabe [1,2], cuando un punto material se mueve a lo largo de un círculo de radio R con velocidad angular constante  omega Las coordenadas del vector de radio dibujado desde el origen hasta la posición actual del punto cambian de acuerdo con la ley:

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



donde  varphi0 - la fase inicial que caracteriza la posición de la partícula en el tiempo t=0 , que en el futuro asumiremos que es igual a cero. Sustitución en (3) R en R1 y R2 y sustituyendo en (1), obtenemos la dependencia del vector de radio de la luna en el sistema de coordenadas heliocéntricas en el tiempo:

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



La expresión (4) establece la órbita de la Luna ( y=y(x(t)) ) en forma paramétrica, donde el parámetro es el tiempo. Para construir la órbita deseada usando Python, establecemos los radios de las órbitas y los períodos de rotación de la Tierra y la Luna.

La Tierra se mueve en un sistema de coordenadas heliocéntricas ( K ) su radio orbital y el período de revolución son respectivamente iguales R1=1.496 cdot108km,T1=3.156 cdot107s La luna se mueve alrededor de la tierra en un sistema de coordenadas ( K ) su radio orbital y el período de revolución son respectivamente iguales R2=3.844 cdot105km,T2=2.36 cdot106s .

En vista de (4), determinamos las funciones de la dependencia de las coordenadas en el tiempo:

 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), obtenemos un par de coordenadas para la órbita de la luna:

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



Establecemos el número de puntos en los que se calculan las coordenadas N = 1000 y el tiempo discreto en el intervalo del período de rotación de la Tierra. dt= fracT1N . Escribiremos un programa y crearemos un gráfico para el área de cambio de coordenadas positivas:

Determinación de las órbitas de la Tierra y la Luna.
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() 

Obtenemos:


Fig. 1

El horario creado le permite expandir la tarea de entrenamiento y ver cuál será la órbita de la luna si el radio de la órbita de la luna es R2=3.844 cdot107 . . Está claro para el lector que ni siquiera tiene un conocimiento especial en astronomía que la Luna no puede tener esa órbita en campos no gravitacionales de la Tierra, y se utiliza un radio hipotético para estudiar las condiciones para la aparición de bucles . Haremos los cambios apropiados al programa:

Determinación de las órbitas de la Tierra y la Luna.
estudiando
  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() 


Obtenemos:


Fig.2

Al comparar las órbitas de la luna que se muestran en la Fig. 1 y 2, encontramos sus diferencias significativas. Para explicar las razones de estas diferencias, es necesario comparar las velocidades lineales de la luna en el primer y segundo caso y la velocidad lineal de la tierra.

Dado que la dirección de la velocidad lineal de la Tierra en relación con el Sol, así como la dirección de la velocidad lineal de la Luna en relación con la Tierra, cambia en el tiempo y la velocidad permanece constante en magnitud.

Como una característica cuantitativa de la relación de las velocidades lineales de la luna y la tierra en un sistema de coordenadas heliocéntricas, uno debe elegir la diferencia entre el módulo de velocidad lineal de la tierra y la proyección de la velocidad lineal de la luna en la dirección de la velocidad lineal de la tierra:

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



Definimos las funciones que describen las leyes de cambio de los componentes de la velocidad de la Tierra y la Luna:

\ begin {matrix} 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 la velocidad resultante, teniendo en cuenta la proyección, usamos la relación:

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)

Escribiremos un programa teniendo en cuenta (5), (8), (9) y el radio de la órbita de la luna R2=3.844 cdot105 km.:

La Luna y la Tierra se mueven en la misma dirección.
 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() 


Obtenemos:


Fig.3.

Escribiremos un programa teniendo en cuenta (5), (8), (9) y el radio de la órbita de la Luna R2 = 3.844 * 10 ** 7 km:

La luna se mueve periódicamente en la dirección opuesta a la Tierra.
 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() 


Obtenemos:


Fig.4.

El análisis de las dependencias nos permite explicar la razón de las diferencias en las órbitas. La función D (t) para R2=3.844 cdot105 km siempre es positivo, es decir, la luna siempre se mueve en la dirección del movimiento de la Tierra y no se forman bucles. En R2=3.844 cdot107 valor de km D(t) toma valores negativos, y hay momentos en que la luna se mueve en la dirección opuesta a la dirección del movimiento de la tierra, y por lo tanto la órbita tiene bucles. Este era el significado de usar la órbita inexistente de la luna en los cálculos.

Construcción de la órbita de Marte en el marco de referencia asociado con la Tierra.

.


En el sistema de referencia heliocéntrico (sistema K), la Tierra se mueve en un círculo de radio R1=1.496 cdot108 km, periodo de circulación T1=$365.2 día, Marte se mueve a lo largo de una elipse, cuyo eje semi mayor am=2.28 cdot108 km, el período de revolución de Marte Tm=$689,9 días., la excentricidad de la órbita e=$0.09 [3] El movimiento de la Tierra se describe mediante el vector de radio R (t) definido por la expresión (3). Debido al hecho de que la órbita de Marte es una elipse, dependencias x=x(t),y=y(t) desde el tiempo se configuran paramétricamente [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)

Una revolución de elipse completa corresponde a un cambio en el parámetro <img  varepsilon de 0 a 2 pi . Para construir la órbita de Marte, es necesario calcular las coordenadas de los vectores de radio en los mismos momentos que describen la posición de la Tierra y Marte en el marco de referencia heliocéntrico, luego de acuerdo con la relación  vecr(t)= vecr(t) vecR(t) Calcule las coordenadas de Marte en el marco de referencia asociado con la Tierra.

Para construir la órbita de Marte en el marco de referencia conectado con la Tierra, utilizamos los parámetros dados previamente de las órbitas de la Tierra y Marte, las relaciones (10) - (12), y también las relaciones para las coordenadas de la Tierra:

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

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

Cabe señalar que el número de períodos de revolución de Marte alrededor del Sol es K=9 , entonces el número de puntos en los que se debe hacer el cálculo y la distancia entre ellos se determinará a partir de las relaciones:

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

Orbita de Marte en el marco de referencia de la Tierra
 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() 


Obtenemos:


Fig.5

Calculamos las coordenadas del vector de radio que describe la posición de Marte en el marco de referencia conectado con la Tierra, y construimos las órbitas (Fig. 6) usando la relación:

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


Fig.6

Otra característica importante del movimiento de Marte (principalmente para vuelos espaciales interplanetarios) es la distancia entre la Tierra y Marte s (t), que está determinada por el módulo del vector de radio que describe la posición de Marte en el marco de referencia asociado con la Tierra. La figura 7 presenta la dependencia de la distancia entre la Tierra y Marte en el tiempo medido en años terrestres.


Fig. 7

Un análisis de la dependencia que se muestra en la Fig. 7 muestra que la distancia entre la Tierra y Marte es una función periódica compleja del tiempo. Si usamos la terminología de la teoría de la señal [5], entonces podemos decir acerca de la dependencia s (t) de que es una señal de amplitud modulada, que generalmente se representa como el producto de dos funciones de una función de alta frecuencia (portadora) y de baja frecuencia que define la modulación de amplitud (envolvente) :

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

donde  baru - componente constante de la función u(t) ; a - amplitud de señal;  omega1 - frecuencia portadora;  Deltaa - la amplitud de la función que establece la profundidad de la modulación de amplitud;  omega2 - frecuencia de la función de modulación.

De la Fig. 7 se puede ver que el período del portador es de aproximadamente 2 años, el período de la función de modulación es de aproximadamente 17 años [6].

Construcción de la órbita heliocéntrica del cometa Halley




La última vez que el cometa Halley pasó a través de su perihelio (el punto de órbita más cercano al Sol) el 9 de febrero de 1986. (Se considera que el Sol mismo está ubicado en el origen).

Las coordenadas y componentes de velocidad del cometa Halley en ese momento eran iguales p0=(0.325514,0.459460,0.166229) y v0=(9.096111,6.916686,1.305721) respectivamente, y la distancia aquí se expresa en unidades astronómicas de longitud - a.u.d., o simplemente a.u. (unidad astronómica, es decir, la longitud de los principales semiaxis principales de la órbita de la Tierra), y el tiempo en años. En estas unidades de medida, las ecuaciones tridimensionales de movimiento del cometa tienen la 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)

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

Construcción de la órbita heliocéntrica del 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() 


Obtenemos:









Tu propio cometa

Prueba un experimento. Por la noche, montas tu telescopio en la cima de una colina no muy lejos de tu casa. La noche debe ser clara, sin nubes, estrellada y, si la fortuna te sonríe: a las 0.30 a.m. notarás un nuevo cometa.

Después de repetidas observaciones en las siguientes noches, podrá calcular sus coordenadas en esa primera noche. Coordenadas en el sistema de coordenadas heliocéntricas: P0 = (x0, y0, z0) y el vector de velocidad v0 = (vx0, vy0, vz0).

Usando estos datos, determine:

  • la distancia del cometa al Sol en el perihelio (el punto de órbita más cercano al Sol) y en el afelio (el punto de órbita más alejado del Sol);
  • velocidad del cometa cuando pasa a través del perihelio y a través del afelio;
  • el período de revolución del cometa alrededor del Sol;
  • En las dos fechas siguientes, el cometa pasa a través del perihelio.

Si medimos la distancia en unidades astronómicas y el tiempo en años, entonces la ecuación de movimiento del cometa tomará la forma (18). Para su propio cometa, seleccione coordenadas iniciales arbitrarias y velocidades del mismo orden que el cometa Halley.

Si es necesario, vuelva a hacer una elección arbitraria de la posición inicial y el vector de velocidad hasta obtener una órbita excéntrica plausible que vaya más allá de la órbita de la Tierra (como la mayoría de los cometas reales).

Referencias


  1. Feynman R., Leighton R., Sands M. Feynman Lectures in Physics. 3ra ed. T. 1.-2. M .: Mir, 1977.
  2. Matveev A.N. Mecánica y teoría de la relatividad. M .: Superior. escuela., 1986.
  3. Enciclopedia Física T. 3. M .: Big Russian Encyclopedia, 1992.
  4. Landau L.D., Lifshits E.M. Curso de Física Teórica. La mecanica. M .: Fu-matgiz, 1958.
  5. Baskakov S.I. Circuitos y señales de ingeniería de radio. M .: Superior. escuela., 1988.
  6. Porshnev C.V. Simulación por computadora de procesos físicos utilizando el paquete mathcad .

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


All Articles