24. Determinar una órbita a partir de la posición y la velocidad

Un vector de posición y uno de velocidad contienen la información instantánea necesaria para reconstruir la cónica, su tamaño, su forma, su plano y la ubicación del cuerpo sobre ella.

24.1 El vector de estado

En un instante, el movimiento se describe mediante la posición r⃗ y la velocidad v⃗. Juntas forman el vector de estado orbital:

estado = (r⃗, v⃗)

Si conocemos además el parámetro gravitacional μ, el modelo de dos cuerpos determina tanto la trayectoria pasada como la futura.

En tres dimensiones hay seis componentes escalares: x, y, z, vx, vy y vz.

24.2 Posición y velocidad relativas

Las ecuaciones orbitales usan la posición y velocidad del cuerpo respecto del centro de atracción. Si conocemos estados en un sistema inercial común:

r⃗ = r⃗cuerpo − r⃗central
v⃗ = v⃗cuerpo − v⃗central

Usar una posición relativa con una velocidad absoluta mezcla referencias y genera elementos incorrectos.

24.3 Datos y unidades necesarios

Antes de calcular debemos comprobar:

  • μ > 0 y expresado en unidades compatibles;
  • |r⃗| > 0;
  • posición y velocidad referidas al mismo instante y sistema;
  • ejes con orientación conocida y, preferentemente, inerciales.

Con kilómetros, μ debe estar en km³/s² y la velocidad en km/s. Con metros, μ debe estar en m³/s².

24.4 Primer paso: módulos y producto radial

r = |r⃗| = √(x² + y² + z²)
v = |v⃗| = √(vx² + vy² + vz²)
r⃗ · v⃗ = xvx + yvy + zvz

El signo de r⃗ · v⃗ indica si el cuerpo se aleja o se acerca: positivo para movimiento saliente, negativo para entrante y cero en una ápside o en una órbita circular.

24.5 Energía y clase general

La energía específica se calcula directamente desde el estado:

ε = v²/2 − μ/r
  • ε < 0: trayectoria ligada;
  • ε ≈ 0: trayectoria parabólica;
  • ε > 0: trayectoria hiperbólica.

En cálculos numéricos debemos comparar con una tolerancia relativa a la escala μ/r, no exigir igualdad exacta con cero.

24.6 Semieje mayor desde la energía

Para ε distinta de cero:

a = −μ/(2ε)

Una elipse produce a positivo; una hipérbola, a negativo bajo la convención firmada. En el límite parabólico a es infinito.

Este cálculo determina la escala energética, pero todavía no la forma ni la orientación.

24.7 Momento angular y plano

El momento angular específico se obtiene mediante:

h⃗ = r⃗ × v⃗

h⃗ es normal al plano orbital. Su módulo permite calcular el semilado recto:

p = h²/μ

Si h es prácticamente cero, el movimiento es radial y varios elementos angulares dejan de estar definidos.

24.8 Vector de excentricidad

La forma y la dirección de la periapsis quedan reunidas en:

e⃗ = (v⃗ × h⃗)/μ − r⃗/r

Su módulo e = |e⃗| es la excentricidad y su dirección apunta desde el foco hacia la periapsis.

Una forma equivalente, útil para evitar otro producto vectorial, es e⃗ = [(v² − μ/r)r⃗ − (r⃗ · v⃗)v⃗]/μ.

24.9 Clasificación completa por excentricidad

ExcentricidadTrayectoriaEnergía
e ≈ 0CircularNegativa
0 < e < 1ElípticaNegativa
e ≈ 1ParabólicaCero
e > 1HiperbólicaPositiva

Energía y excentricidad deben producir clasificaciones compatibles. Una discrepancia importante suele revelar un error de unidades o de implementación.

24.10 Radios extremos

El radio de periapsis funciona para elipses, parábolas e hipérbolas no degeneradas:

rp = p/(1 + e)

En una elipse también existe una apoapsis finita:

ra = p/(1 − e) = a(1 + e)

Para e ≥ 1 la trayectoria es abierta y no hay apoapsis.

24.11 Ubicación mediante la anomalía verdadera

Para e > 0, la anomalía verdadera ν es el ángulo orientado desde e⃗ hasta r⃗ dentro del plano orbital. Una forma robusta usa seno y coseno:

cos ν = (e⃗ · r⃗)/(er)
sen ν = [h⃗ · (e⃗ × r⃗)]/(her)
ν = atan2(sen ν, cos ν)

atan2 conserva el cuadrante y distingue el tramo entrante del saliente.

24.12 Inclinación

Respecto de un plano de referencia xy, la inclinación se calcula desde la normal +z:

i = arccos(hz/h)

Conviene limitar numéricamente el cociente al intervalo [−1, 1] antes de aplicar Math.acos, porque el redondeo puede producir valores apenas fuera del dominio.

24.13 Línea de nodos

La intersección entre el plano orbital y el plano de referencia se denomina línea de nodos. Su dirección hacia el nodo ascendente se obtiene con:

n⃗ = k⃗ × h⃗ = (−hy, hx, 0)

Si la órbita es ecuatorial, n = 0 y no existe una línea de nodos única.

24.14 Longitud del nodo ascendente

Cuando n > 0, la orientación de la línea de nodos en el plano de referencia es:

Ω = atan2(ny, nx)

Si el resultado es negativo puede normalizarse sumando 2π. Ω se expresa habitualmente entre 0° y 360°.

24.15 Argumento de periapsis

El argumento de periapsis ω mide, dentro del plano orbital, el ángulo desde el nodo ascendente hasta e⃗. Para n > 0 y e > 0:

cos ω = (n⃗ · e⃗)/(ne)
sen ω = [h⃗ · (n⃗ × e⃗)]/(hne)
ω = atan2(sen ω, cos ω)

Los tres ángulos Ω, i y ω orientan la elipse en el espacio.

24.16 Casos singulares

Algunos elementos clásicos pierden significado en geometrías simétricas:

  • en una órbita circular, e⃗ = 0 y no hay periapsis única;
  • en una órbita ecuatorial, n⃗ = 0 y no hay nodo ascendente único;
  • en movimiento radial, h⃗ = 0 y no hay plano orbital único.

Un programa robusto debe informar estos casos y utilizar ángulos alternativos, no dividir por números casi nulos.

24.17 Flujo de cálculo recomendado

  1. validar unidades, μ y módulo de r⃗;
  2. calcular r, v y r⃗ · v⃗;
  3. obtener ε y a;
  4. obtener h⃗, h y p;
  5. obtener e⃗ y e;
  6. clasificar y calcular las ápsides;
  7. calcular ν, i, n⃗, Ω y ω cuando estén definidos;
  8. reconstruir el estado para comprobar el resultado.

24.18 Utilidades vectoriales en JavaScript

const punto = (a, b) => a.x * b.x + a.y * b.y + a.z * b.z;
const modulo = a => Math.hypot(a.x, a.y, a.z);
const cruz = (a, b) => ({
  x: a.y * b.z - a.z * b.y,
  y: a.z * b.x - a.x * b.z,
  z: a.x * b.y - a.y * b.x
});
const escalar = (k, a) => ({ x: k * a.x, y: k * a.y, z: k * a.z });
const restar = (a, b) => ({ x: a.x - b.x, y: a.y - b.y, z: a.z - b.z });

const r = { x: 7000, y: 0, z: 0 };
const v = { x: 0, y: 8, z: 1 };
const h = cruz(r, v);

console.log("r:", modulo(r).toFixed(2), "km");
console.log("v:", modulo(v).toFixed(3), "km/s");
console.log("r · v:", punto(r, v).toFixed(3), "km²/s");
console.log("h⃗:", h);

24.19 Elementos principales con JavaScript

function elementosPrincipales(mu, rVector, vVector) {
  const dot = (a, b) => a.x * b.x + a.y * b.y + a.z * b.z;
  const norm = a => Math.hypot(a.x, a.y, a.z);
  const cross = (a, b) => ({
    x: a.y * b.z - a.z * b.y,
    y: a.z * b.x - a.x * b.z,
    z: a.x * b.y - a.y * b.x
  });

  const r = norm(rVector);
  const v = norm(vVector);
  const hVector = cross(rVector, vVector);
  const h = norm(hVector);
  const vxh = cross(vVector, hVector);
  const eVector = {
    x: vxh.x / mu - rVector.x / r,
    y: vxh.y / mu - rVector.y / r,
    z: vxh.z / mu - rVector.z / r
  };
  const e = norm(eVector);
  const energy = v ** 2 / 2 - mu / r;
  const tolerance = mu / r * 1e-10;
  const a = Math.abs(energy) > tolerance ? -mu / (2 * energy) : Infinity;
  const p = h ** 2 / mu;
  const rp = p / (1 + e);
  const ra = e < 1 ? p / (1 - e) : Infinity;

  let type = "parabólica";
  if (e < 1e-8) type = "circular";
  else if (energy < -tolerance) type = "elíptica";
  else if (energy > tolerance) type = "hiperbólica";

  return { r, v, energy, a, hVector, h, eVector, e, p, rp, ra, type };
}

const elementos = elementosPrincipales(
  3.986e5,
  { x: 7000, y: 0, z: 0 },
  { x: 0, y: 8, z: 1 }
);
console.log("tipo:", elementos.type);
console.log("a:", elementos.a.toFixed(2), "km");
console.log("e:", elementos.e.toFixed(6));
console.log("rp:", elementos.rp.toFixed(2), "km");

24.20 Laboratorio interactivo: del estado a la órbita

El estado se toma sobre el eje +x alrededor de la Tierra. Elegí la distancia, la rapidez relativa a la circular local y el ángulo de trayectoria respecto de la tangente. El laboratorio reconstruye y dibuja la cónica.

TrayectoriaElíptica
Energía ε−20,6 km²/s²
Excentricidad e0,227
Semieje mayor a9677 km
Periapsis7484 km
Apoapsis11 871 km
Anomalía verdadera27,6°

ε = v²/2 − μ/r  |  h⃗ = r⃗ × v⃗  |  e⃗ = (v⃗ × h⃗)/μ − r̂

El estado produce una elipse que no intersecta la Tierra.

  • Mantené r y v: cambiá el ángulo y observá que la energía y a no varían, pero sí e.
  • Elegí √2 vc: la energía llega a cero y la trayectoria se vuelve parabólica.
  • Reducí la rapidez: comprobá si la periapsis calculada atraviesa la Tierra.

24.21 Validar reconstruyendo el estado

Un resultado fiable debe reproducir las invariantes y el estado original. Algunas comprobaciones son:

  • p ≈ a(1 − e²) para una elipse;
  • r ≈ p/(1 + e cos ν);
  • v² ≈ μ(2/r − 1/a);
  • e² ≈ 1 + 2εh²/μ²;
  • r⃗ · h⃗ ≈ 0 y e⃗ · h⃗ ≈ 0.

Los residuos deben compararse con escalas relativas. Una diferencia absoluta pequeña puede ser grande para un valor diminuto, y viceversa.

24.22 Errores frecuentes

  • mezclar estados absolutos y relativos;
  • usar componentes expresadas en unidades incompatibles;
  • intercambiar el orden de un producto vectorial;
  • clasificar comparando números flotantes exactamente con cero o uno;
  • usar acos sin recuperar el cuadrante del ángulo;
  • dividir por e, n o h en casos singulares;
  • no comprobar si la periapsis intersecta el cuerpo central.

24.23 Ejercicio propuesto

Alrededor de la Tierra, con μ = 398 600 km³/s², un satélite tiene r⃗ = (8000, 0, 0) km y v⃗ = (1, 8, 0) km/s.

  1. Calculá energía, semieje mayor y tipo de trayectoria.
  2. Calculá h y el vector de excentricidad.
  3. Calculá e, periapsis y apoapsis.
  4. Determiná si el satélite se acerca o se aleja.
Ver solución

v² = 65 km²/s² y ε = 32,5 − 49,825 = −17,325 km²/s². La trayectoria es elíptica y a ≈ 11 504 km.

h = 64 000 km²/s. El vector de excentricidad es aproximadamente (0,2845; −0,1606; 0), con e ≈ 0,3267. Resultan rp ≈ 7746 km y ra ≈ 15 262 km. Como r⃗ · v⃗ > 0, el satélite se aleja.

const mu = 398600;
const r = { x: 8000, y: 0 };
const v = { x: 1, y: 8 };
const radio = Math.hypot(r.x, r.y);
const rapidez2 = v.x ** 2 + v.y ** 2;
const energia = rapidez2 / 2 - mu / radio;
const a = -mu / (2 * energia);
const h = r.x * v.y - r.y * v.x;
const eVector = {
  x: v.y * h / mu - r.x / radio,
  y: -v.x * h / mu - r.y / radio
};
const e = Math.hypot(eVector.x, eVector.y);
const p = h ** 2 / mu;
const rp = p / (1 + e);
const ra = p / (1 - e);

console.log("ε:", energia.toFixed(3), "km²/s²");
console.log("a:", a.toFixed(1), "km");
console.log("h:", h.toFixed(1), "km²/s");
console.log("e⃗:", eVector);
console.log("e:", e.toFixed(5));
console.log("rp / ra:", rp.toFixed(1), ra.toFixed(1), "km");
console.log("movimiento:", r.x * v.x > 0 ? "saliente" : "entrante");

24.24 Ideas para recordar

  • El estado orbital combina posición y velocidad relativas en un mismo instante.
  • La energía determina la clase energética y el semieje mayor.
  • h⃗ = r⃗ × v⃗ determina el plano y el semilado recto.
  • El vector e⃗ determina la excentricidad y apunta hacia la periapsis.
  • La anomalía verdadera ubica el cuerpo dentro de la cónica.
  • Los elementos angulares requieren tratar los casos circulares, ecuatoriales y radiales.
  • Reconstruir invariantes y estado es la mejor comprobación del cálculo.

En el próximo tema abandonaremos la aproximación de centro fijo para estudiar el problema de dos cuerpos, el centro de masa y el baricentro.