33. Escalas, unidades y sistemas de coordenadas para simulaciones orbitales

Una ecuación correcta puede producir una simulación absurda si mezcla kilómetros con metros, grados con radianes o estados expresados en marcos distintos. Definir la representación es parte del modelo físico.

33.1 Antes de programar: fijar convenciones

Una simulación debe declarar por escrito sus unidades de longitud, masa y tiempo; el origen; la orientación de los ejes; el sentido positivo de los ángulos y el marco de referencia.

Estas decisiones no son detalles de presentación. Determinan cómo interpretar cada número almacenado y cada operación vectorial.

33.2 Coherencia dimensional

En la aceleración gravitatoria:

a⃗ = −μr⃗/|r⃗|³

Si r se expresa en metros y el tiempo en segundos, μ debe estar en m³/s² y el resultado queda en m/s². Con r en kilómetros, μ debe estar en km³/s².

33.3 Sistema Internacional

El SI usa metros, kilogramos y segundos. Para la Tierra:

μT ≈ 3,986004 × 10¹⁴ m³/s²

Su ventaja es la compatibilidad directa con la mayoría de magnitudes físicas. Su desventaja práctica es trabajar con números muy grandes para distancias astronómicas y muy pequeños para algunas perturbaciones.

33.4 Kilómetros y segundos

En astrodinámica es habitual usar kilómetros y segundos:

μT ≈ 398.600,4 km³/s²

Como 1 km³ = 10⁹ m³, el valor numérico de μ se divide por 10⁹ al pasar de metros a kilómetros. Las velocidades pasan de m/s a km/s dividiendo por 1.000.

33.5 El error silencioso más común

Si se usa r = 7.000 km con μ = 3,986 × 10¹⁴ m³/s², JavaScript no detectará el problema: ambos son números sin información de unidad.

La aceleración calculada será mil millones de veces mayor que la correcta. Conviene convertir todo al ingresar los datos y mantener un único sistema dentro del núcleo físico.

33.6 Unidades angulares

Las funciones trigonométricas de JavaScript reciben radianes:

radianes = grados × π/180

Guardar ángulos internamente en radianes evita conversiones repetidas. Los grados pueden reservarse para la interfaz y los informes.

33.7 Notación científica y precisión

JavaScript utiliza números IEEE 754 de doble precisión. Ofrecen unas 15 o 16 cifras decimales significativas, suficientes para muchas simulaciones educativas y orbitales.

La precisión es relativa: al sumar una corrección diminuta a una coordenada enorme pueden perderse cifras. Elegir un origen cercano o usar variables relativas mejora la resolución numérica.

33.8 Escalas características

Podemos elegir una longitud L₀, una masa M₀ y un tiempo T₀. Las variables sin dimensión son:

r⃗′ = r⃗/L₀    t′ = t/T₀    m′ = m/M₀
v⃗′ = v⃗/(L₀/T₀)    a⃗′ = a⃗/(L₀/T₀²)

Los primos representan números normalizados, normalmente cercanos a la unidad.

33.9 Elegir una escala temporal natural

Para un cuerpo central con parámetro μ₀ y longitud L₀, una elección útil es:

T₀ = √(L₀³/μ₀)

Con esta definición, μ′ = μ₀T₀²/L₀³ = 1. La velocidad natural es V₀ = L₀/T₀ = √(μ₀/L₀).

33.10 Ejemplo de unidades terrestres canónicas

Si L₀ es el radio terrestre 6.378,1 km y μ₀ = 398.600,4 km³/s²:

T₀ ≈ 806,8 s
V₀ ≈ 7,905 km/s
μ′ = 1

Una órbita circular en r′ = 1 tiene v′ = 1 y período P′ = 2π.

33.11 Unidades astronómicas

Para un sistema heliocéntrico puede elegirse L₀ = 1 UA y M₀ = 1 masa solar. Si el tiempo se mide en años, el parámetro solar numérico es aproximadamente 4π² UA³/año².

Si se elige T₀ = √(UA³/μSol), entonces μ′ = 1 y T₀ equivale a un año dividido por 2π. Ambas convenciones son válidas, pero no deben mezclarse.

33.12 Coordenadas cartesianas

El estado cartesiano se expresa como (x, y, z, vx, vy, vz). Es la forma más directa para integrar ecuaciones vectoriales y sumar fuerzas.

Los elementos orbitales son excelentes para describir una órbita, pero presentan singularidades y no reemplazan siempre al estado cartesiano durante la integración.

33.13 Coordenadas polares y esféricas

En el plano:

x = r cos θ    y = r sen θ
r = √(x² + y²)    θ = atan2(y, x)

Math.atan2(y, x) conserva el cuadrante y maneja x = 0. Usar Math.atan(y / x) puede devolver un ángulo ambiguo o indefinido.

33.14 Sistema de ejes y orientación

Un sistema cartesiano debe indicar si es dextrógiro: x̂ × ŷ = ẑ. También debe definir el plano de referencia y la dirección del eje x.

En Canvas, el eje vertical de píxeles crece hacia abajo. Para dibujar un plano físico con y hacia arriba suele usarse ypantalla = ycentro − escala · yfísica.

33.15 Marco inercial y marco trasladado

Un marco inercial no rota ni acelera. Trasladar el origen con posición R⃗ y velocidad V⃗ produce:

r⃗′ = r⃗ − R⃗    v⃗′ = v⃗ − V⃗

Si el nuevo origen acelera, el marco deja de ser inercial y deben incorporarse fuerzas aparentes para escribir allí las ecuaciones de movimiento.

33.16 Marco baricéntrico

En un sistema aislado es conveniente restar la posición y la velocidad del centro de masa. Así el baricentro permanece cerca del origen y se evita representar una traslación global irrelevante.

El marco baricéntrico no significa que el cuerpo más masivo esté inmóvil: todos los cuerpos orbitan alrededor del centro de masa común.

33.17 Rotar coordenadas

Para expresar un vector plano en ejes girados un ángulo θ respecto del marco original:

x′ = x cos θ + y sen θ
y′ = −x sen θ + y cos θ

Esta es una rotación pasiva de los ejes. Rotar físicamente el vector usa la matriz con el signo contrario; distinguir ambas operaciones evita inversiones.

33.18 Velocidad en un marco rotante

No alcanza con rotar las componentes de velocidad. Si el marco gira con velocidad angular ω⃗:

v⃗rot = R(−θ)[v⃗ − V⃗O − ω⃗ × (r⃗ − R⃗O)]

El término ω⃗ × r⃗ explica por qué un punto fijo en el marco inercial parece moverse desde los ejes rotantes.

33.19 Convertir y normalizar con JavaScript

const unidades = {
  kmAMetros: valor => valor * 1000,
  metrosAKm: valor => valor / 1000,
  gradosARadianes: valor => valor * Math.PI / 180
};

function escalasCanonicas(longitud, mu) {
  const tiempo = Math.sqrt(longitud ** 3 / mu);
  return { longitud, tiempo, velocidad: longitud / tiempo };
}

const tierra = escalasCanonicas(6378.1, 398600.4);
console.log("T₀:", tierra.tiempo.toFixed(2), "s");
console.log("V₀:", tierra.velocidad.toFixed(4), "km/s");
console.log("45°:", unidades.gradosARadianes(45).toFixed(6), "rad");

33.20 Transformar un estado con JavaScript

function estadoEnMarcoRotante(estado, angulo, omega) {
  const c = Math.cos(angulo), s = Math.sin(angulo);
  const velocidadRelativa = {
    x: estado.vx + omega * estado.y,
    y: estado.vy - omega * estado.x
  };
  return {
    x: c * estado.x + s * estado.y,
    y: -s * estado.x + c * estado.y,
    vx: c * velocidadRelativa.x + s * velocidadRelativa.y,
    vy: -s * velocidadRelativa.x + c * velocidadRelativa.y
  };
}

const estado = { x: 7000, y: 0, vx: 0, vy: 7.5 };
const rotante = estadoEnMarcoRotante(estado, Math.PI / 6, 0.001);
console.log(rotante);

33.21 Laboratorio: una órbita, varias representaciones

El estado corresponde a una órbita circular terrestre. Modificá la altitud, la anomalía y la orientación de un sistema de ejes girado. Luego alterná las unidades sin cambiar la situación física.

Posición inercial (x, y)5.422,1; 4.549,7 km
Velocidad inercial (vₓ, vᵧ)−4,82; 5,75 km/s
Posición en ejes girados6.651,2; 2.420,9 km
Parámetro μ398.600,4 km³/s²
Período98,77 min
Comprobación v²r/μ1,000000
r′ = r/L₀  |  v′ = v/V₀  |  μ′ = μT₀²/L₀³

Los valores están expresados en kilómetros y segundos; la órbita física no cambió.

33.22 Ejercicio propuesto

Un estado terrestre tiene r = 7.000 km y rapidez v = 7,5 km/s. Usá L₀ = 6.378,1 km y μ = 398.600,4 km³/s².

  1. Calculá T₀ y V₀.
  2. Convertí r y v a unidades canónicas.
  3. Comprobá el valor de μ′.
Ver solución

T₀ ≈ 806,81 s y V₀ ≈ 7,9054 km/s. Por lo tanto, r′ ≈ 1,0975 y v′ ≈ 0,9487.

μ′ = μT₀²/L₀³ = 1 por construcción.

const longitud0 = 6378.1;
const mu = 398600.4;
const tiempo0 = Math.sqrt(longitud0 ** 3 / mu);
const velocidad0 = longitud0 / tiempo0;
const radioNormalizado = 7000 / longitud0;
const velocidadNormalizada = 7.5 / velocidad0;
const muNormalizado = mu * tiempo0 ** 2 / longitud0 ** 3;

console.log("T₀:", tiempo0.toFixed(2), "s");
console.log("V₀:", velocidad0.toFixed(4), "km/s");
console.log("r′:", radioNormalizado.toFixed(4));
console.log("v′:", velocidadNormalizada.toFixed(4));
console.log("μ′:", muNormalizado.toFixed(6));

33.23 Errores frecuentes

  • combinar kilómetros con un μ expresado en metros cúbicos;
  • pasar grados directamente a Math.sin o Math.cos;
  • transformar la posición pero no la velocidad;
  • olvidar el término ω⃗ × r⃗ en un marco rotante;
  • confundir una rotación activa del vector con una rotación pasiva de ejes;
  • dibujar y física con el mismo signo vertical de Canvas;
  • mostrar pocas cifras y usar ese valor redondeado para continuar el cálculo.

33.24 Ideas para recordar

  • Todo número físico necesita una unidad y un marco de referencia.
  • El núcleo de la simulación debe usar un sistema de unidades único.
  • Normalizar mantiene las variables cerca de uno y puede mejorar el cálculo.
  • La escala T₀ = √(L₀³/μ₀) hace μ′ = 1.
  • Las coordenadas cartesianas son prácticas para integrar y sumar fuerzas.
  • Un cambio de marco debe transformar posición y velocidad coherentemente.
  • Una representación distinta no cambia el estado físico ni sus invariantes.

En el próximo tema aprenderemos a representar cuerpos y calcular aceleraciones gravitatorias con JavaScript.