¿Cómo trazar esta órbita?

Tengo estos datos para algunas órbitas, sin ninguna explicación sobre el significado de cada dato:

{
  "objects": [
    {
      "name": "Earth",
      "id": "solar.planet.earth",
      "elements": {
        "q": 0.98322073104899
        "a": 0.99920537923658
        "node": 207.00538100359,
        "e": 0.0159973600220234 
        "peri": 256.950444448438,
        "incl": 0.0038067895470298  
        "T": 2459218.90577274
      },
      "position": {
        "y": 0.9297659392321,
        "z": -4.515675204152e-05,
        "x": 0.3275590103186
      }
    },
    {
      "position": {
        "z": 0.06029318307615,
        "x": -0.4584994822692,
        "y": 1.094698818492
      },
      "elements": {
        "q": 0.806176191073582,
        "a": 1.0323483836211,
        "node": 75.5720068963318,
        "e": 0.219085142318127,
        "incl": 4.80809622578363,
        "peri": 179.397909345983,
        "T": 2459318.63483092
      },
      "id": "solar.minorplanet.98943",
      "name": "2001 CC21"
    },
    {
      "name": "1998 KY26",
      "id": "solar.minorplanet.1998KY26",
      "elements": {
        "T": 2459001.17727408,
        "incl": 1.48102189788285,
        "peri": 209.372033608463,
        "e": 0.201828518064676,
        "node": 84.3664587661475,
        "a": 1.23285180453922,
        "q": 0.984027151835704
      },
      "position": {
        "y": 1.407810076987,
        "z": -0.002082322485705,
        "x": 0.2198001273522
      }
    },
    {
      "name": "Hayabusa 2",
      "id": "solar.spacecraft.hayabusa2",
      "elements": {
        "T": 2459212.01173911,
        "incl": 5.99763881195244,
        "peri": 205.214139025915,
        "e": 0.187058473659886,
        "node": 253.856900249799,
        "q": 0.970678629676518,
        "a": 1.19403253275367
      },
      "position": {
        "z": 0.006301058519122,
        "x": 0.3323137692169,
        "y": 0.932379875888
      }
    }
  ],
  "TT": 2459186.10708546,
  "UTC": "2020-12-02T14:33:03"
}

Estoy tratando de trazarlos en 3D en este JSFiddle , pero estoy procediendo al azar... ¿alguien puede ayudarme?

El resultado final debería ser algo como el que se ve en la página que usa estos datos (y en esta página en inglés ), pero quiero representarlo en 3d.

Los valores aceptados para la biblioteca spacekit son:

  • initialValues.a Eje semimayor

  • initialValues.e Excentricidad

  • initialValues.i Inclinación

  • initialValues.epoch Época en JD

  • initialValues.period Periodo en días

  • initialValues.ma Anomalía media

  • initialValues.n Movimiento medio

  • initialValues.L Longitud media

  • initialValues.om Longitud del nodo ascendente

  • initialValues.w Argumento del perihelio

  • initialValues.wBar Longitud del perihelio

Ok para incl , peri y node , puedo adivinar "a" ( initialValues.a - Semimajor axis ), "e" (initialValues.e - Excentricidad), pero ¿qué pasa con "q" y "peri"?

  • valoresIniciales.a Eje semimayor ---> "a"

  • initialValues.e Excentricidad ---> "e"

  • initialValues.i Inclinación ---> "incl"

  • initialValues.epoch Época en JD ---> "T"

  • initialValues.period Periodo en días --->?

  • initialValues.ma Anomalía media --->?

  • initialValues.n Movimiento medio --->?

  • initialValues.L Longitud media --->?

  • initialValues.om Longitud del nodo ascendente ---> "nodo"

  • initialValues.w Argumento de Perihelio ---> "peri"?

  • initialValues.wBar Longitud del perihelio ---> "peri"?

También recuperé datos de NASA Horizons for Earth para compararlos con los disponibles, pero de todos modos no puedo averiguar con qué coinciden "q" y "peri":

  • JD 2459218.905775463,
  • AD 2021-Ene-04 09:44:19.0000,
  • EC Excentricidad, e 0.01637
  • QR Periapsis distancia, q (km) 147092887 km
  • IN Inclinación respecto al plano XY, i (grados) 0,00285
  • OM Longitud del nodo ascendente, OMEGA, (grados) 177
  • W Argumento de perifoco, w (grados) 284,4
  • Tp Tiempo de periapsis (Número de día juliano) 2459216 km
  • N Movimiento medio, n (grados/seg) 0,0001141
  • MA Anomalía media, M (grados) 2,15
  • TA Anomalía verdadera, nu (grados) 2,22
  • A Semieje mayor, a (km) 149541385 km
  • AD Apoapsis distancia (km) 151989883 km
  • PR Período de órbita sideral (seg) 31540276 km

  • "q": 0,98322073104899, Distancia periapsis, q (AU) = 147087727 km
  • "a": 0,99920537923658, semieje mayor, a (AU) = 149478997 km
  • "nodo": 207.00538100359,
  • "e": 0.0159973600220234, Excentricidad, e
  • "peri": 256.950444448438,
  • "incl": 0.0038067895470298, Inclinación respecto al plano XY, i (grados)
  • "T": 2459218.90577274
Puede hacer 3 gráficos 2D, los planos xy, yz y xz. Pero puede definir otros planos inclinados que no sean paralelos a los ejes x, y y z.
Procediendo aleatoriamente, actualicé mi JSFiddle, asignando "q" y "peri" a Mean Anomlay y Argument of Perihelion ... ¿quién sabe si es correcto? jsfiddle.net/spacexplorer2020/6cqdLhzj/20
parece que se proporcionan datos redundantes: usando la fórmula sugerida en la respuesta de @Ryan C para la distancia periapsis ( =a(1-e) ), obtengo para hayabusa: 1.19403253275367 * (1-0.187058473659886 ) = 0,9706786296765 20 , que es muy cerca del valor proporcionado como "q" ( 0.9706786296765 18 )

Respuestas (3)

Trabajo en progreso, seguirán nuevas cifras.

Tomé los datos de la órbita de Hayabusa2 y pudimos trazar la elipse magenta. Usé initialValues.a Semimajor axis y initialValues.e Eccentricity . Los dos puntos rojos son los focos de la elipse.

El punto azul es la única posición de Hayabusa2 que obtuvimos, solo se usaron x e y.

El sol está en el centro x = 0 y y = 0, por supuesto, también hay un punto de enfoque.

Luego giré la elipse por el ángulo "node": 253.856900249799 para obtener el ángulo verde. La única posición de Hayabusa (punto azul) ahora está en la elipse rotada pero no en la elipse magenta.

ingrese la descripción de la imagen aquí

Agregué los ejes, las líneas en magenta son los ejes de la elipse (magenta también) alineados al sistema de coordenadas. Las líneas verdes son los ejes rotados pertenecientes a la elipse verde. Los marcadores 'x' en magenta son los focos de la elipse sin rotar. El marcador x en el origen también es un foco de la elipse rotada verde. El arco negro muestra el ángulo del nodo. Agregué algunas anotaciones.

ingrese la descripción de la imagen aquí

En el siguiente paso, este plano 2D debe insertarse en el gráfico 3D. El Sol debe estar en el centro para gráficos 2D y 3D. Hayabusa2 debe estar en la posición xyz dada. El "incl": 0.0038067895470298, Inclination wrt XY plane, i (grados) también debería ser correcto.

Pero necesitamos 3 puntos para definir la orientación correcta del plano. Podemos ver si la órbita de la Tierra se puede usar para obtener información adicional. Pero deberíamos tener un tiempo en el que tanto la Tierra como Hayabusa estén en el mismo lugar. Cruzar la órbita de la Tierra por sí solo no ayudaría cuando la Tierra está muy lejos de ese punto cuando Hayabusa está allí. Los dos pequeños cuerpos también deberían estar cerca de la órbita de Hayabusa.

ingrese la descripción de la imagen aquí

El gráfico 3D para incluir el gráfico 2D anterior.

rad cuidadosamente la pregunta: "Estoy tratando de trazarlo en este JSFiddle" (es javascript, respondiste con python) y "De todos modos, no puedo averiguar qué" q "y" peri "coinciden con:" (y no no mencionar "q" y "peri")
además, "solar.spacecraft.hayabusa2" no es un planeta, y los datos de los planetas se cargan desde el archivo de421.bsp, no desde mi archivo.
No necesito datos de otras fuentes, necesito trazar los datos proporcionados en mi pregunta.
parece que no hay solución a este problema, debido a la falta de datos (en realidad, solo tenemos 5 elementos orbitales, por lo que las órbitas solo se pueden trazar en 2d, vea mi respuesta)
dibujar también los ejes de las elipses ayudaría un poco a comprender el método que utilizó.
Trazar los ejes es una muy buena idea, lo haré a continuación.
Tenemos dos tiempos diferentes en los datos disponibles: un "TT" global y una "T" para cada objeto; No sé por qué son dos y cómo usarlos; según tengo entendido, se proporcionan tiempos de objeto para saber cuándo los objetos están ubicados en la posición x, y, z, pero no entiendo qué significa "TT".
La diferencia entre "T": 2459212.01173911, "TT": 2459186.10708546, no es pequeña, son 26 días. Estas son fechas julianas utilizadas en cálculos astronómicos, ver Wikipedia . Una diferencia de 0,25 son 6 horas.
Es obvio que son fechas julianas... pero ¿fechas julianas de qué?

Debe aprender un poco sobre las muchas formas en que se pueden representar los datos de la órbita, comenzando con un tutorial básico como https://en.wikipedia.org/wiki/Orbital_elements

Una de las cosas importantes a tener en cuenta es que no hay más de seis números independientes de ese conjunto, pero no se pueden elegir seis cualquiera. Si ingresa valores para demasiados, las cosas saldrán mal porque no serán consistentes entre sí. Por ejemplo, si tiene semi-eje mayor a y excentricidad mi , entonces, por definición, la distancia del periapsis es a ( 1 mi ) y la distancia apoapsis es a ( 1 + mi ) , así que especifique no más de dos de esos cuatro o invitará a problemas. De manera similar, el movimiento medio, el período y el semieje mayor son redundantes entre sí, suponiendo que sepa qué cuerpo está en órbita (porque la conversión involucra su masa). La anomalía verdadera, la anomalía media y el tiempo transcurrido desde el paso del perigeo u otra época de referencia son otro conjunto del que debe elegir como máximo uno como entrada.

El orden tradicional de los elementos orbitales keplerianos es semi-eje mayor a , excentricidad mi , inclinación i , ascensión recta del nodo ascendente (RAAN) Ω , argumento del periapsis ω , y verdadera anomalía v . Tenga en cuenta que algunas de estas definiciones se rompen si algunas de las otras toman ciertos valores. Por ejemplo, si la inclinación es exactamente cero, entonces no hay un nodo ascendente por lo que no tiene un Ω , pero eso aún especifica el plano de la órbita de forma única. De manera similar, si la excentricidad es exactamente cero, entonces no hay periapsis (todos los puntos están a la misma distancia del centro, porque la elipse con mi = 0 es un círculo), por lo que necesita definir ϖ en vez de ω decir por dónde empezar a medir v = 0 .

Esta es una explicación interesante, pero no una respuesta a mi pregunta.

Parece que no hay una respuesta posible a esta pregunta: los datos disponibles no son suficientes para trazar una órbita en 3D. Aunque aparentemente hay 6 elementos orbitales, en realidad son solo 5; de hecho se proporcionan estos tres datos:

 - "e": 0.187058473659886
 - "a": 1.19403253275367
 - "q": 0.970678629676518

Pero:

 periapsis distance = a * ( 1 - e) = 1.19403253275367 * (1 - 0.187058473659886 ) 
 = 0,970678629676520

Entonces, de hecho, solo tenemos 5 elementos orbitales:

 - "incl": 5.99763881195244,
 - "peri": 205.214139025915,
 - "e": 0.187058473659886,
 - "node": 253.856900249799,
 - ("q": 0.970678629676518,)  <<<====== can be calculated from a and e
 - "a": 1.19403253275367

No son suficientes para trazar una órbita en 3D; la página original que usa estos datos solo traza órbitas en 2d; Al invertir la ingeniería del código fuente, podemos ver que el parámetro "q" no se usa en absoluto:


key: "calcEllipse",    
value: function calcEllipse(object) {


////// "a" and "e"//////
var cx = -factor * object.elements.a * object.elements.e;     
var cy = 0;    
var rx = factor * object.elements.a;    
var ry = factor * object.elements.a * Math.sqrt(1 - Math.pow(object.elements.e, 2));    


////// "node", "incl" and "peri" //////
var transform = "\n              rotate(".concat(-1.0 * object.elements.node, ")\n    
scale(1.0, ").concat(Math.cos(object.elements.incl / 180 * Math.PI), ")\n    
rotate(").concat(-1.0 * object.elements.peri, ")");  
return {    
cx: cx,    
cy: cy,    
rx: rx,    
ry: ry,   
transform: transform

Pasar solo 5 parámetros a la biblioteca spacekit.js da como resultado un error:

NaN position value - you may have bad or incomplete data in the following ephemeris:` 
a: 0.937550412197935, 
e: 0.140879661549663, 
i: 0.0748349916816544, 
om: 1.2865260962475196,
w: 2.0673222342313817`
Fue un poco difícil de leer. Mejoré el formato.
No usé "formato de código" por una razón: porque no permite usar negrita para el texto; con solo agregar "formato de código" causó un pequeño lío debido a los asteriscos errantes aquí y allá... Tuve que eliminarlos y reemplazarlos por comentarios que no están presentes en el código fuente original.
La diferencia entre los dos números "q": 0.970 678 629 676 518 y la distancia del periapsis = 0,970 678 629 676 520 no son problema, creo. Los números de coma flotante de precisión doble de 64 bits tienen una precisión de 15 a 17 dígitos decimales significativos. Entonces una diferencia de 0.000 000 000 000 002 es tolerable.
@Uwe Por supuesto que no es un problema: es por eso que escribí que en realidad tenemos 5 en lugar de 6 parámetros: porque el q proporcionado es inútil, ya que podemos calcularlo a partir de a y e .
@jumpjack, aunque es posible que no resuelva la "fuente en negrita" para el problema de texto, ¿considera agregar una respuesta para activar el resaltado sensible al idioma para bloques de código/script? en meta y votando a favor en todas partes si crees que es una buena idea?