lunes, 7 de agosto de 2023

OppenheimeR, el destructor de mundos

Como evolución del ejercicio de representación en 3D de la Tierra que hicimos en 'Fotografiando la Tierra desde el espacio con R', vamos a simular un final nuclear para nuestra civilización, uno de los temores del mayor responsable de la creación de la bomba atómica y a la postre pacifista Robert Oppenheimer.

"I am become Death, the destroyer of worlds"
(J. Robert Oppenheimer, julio 1945)

Me he centrado en animar por su interés geométrico las trayectorias de Misiles balísticos intercontinentales (ICBM). Tras una etapa inicial de lanzamiento que imprime un determinado ángulo y velocidad de partida, el misil sigue una trayectoria puramente balística hasta su objetivo, es decir la propia de un tiro parabólico teóricamente sin más consumo de combustible, si bien en la práctica se llevan a cabo ajustes en la reentrada para precisar el blanco.

Aunque las altitudes a las que operan estos lanzamientos son secreto militar, sí puede calcularse desde un punto de vista teórico la forma de una trayectoria balística pura dados un ángulo y velocidad de lanzamiento iniciales. Por ejemplo para un ángulo de 45º se generan las siguientes trayectorias y puntos de impacto para distintas velocidades de lanzamiento:

Fuente: Eugene I. Butikov, Univ. de San Petersburgo

Se explica en 'Families of Keplerian orbits' que estas trayectorias, debido a la curvatura de la Tierra, abandonan la clásica forma parabólica que tendrían con una aproximación de Tierra plana para revelarse como porciones de elipse, más alejadas de una parábola cuanto mayor es el alcance.

Para la animación he usado un modelo más simple consistente en añadir un incremento de altitud radial basado en el seno sobre el arco parcial abarcado. He mantenido el mismo ángulo de lanzamiento para todos los misiles independientemente de la distancia al objetivo, lo que otorga una mayor altitud a los dirigidos a destinos más lejanos. Se ha establecido una velocidad angular constante igual para todos.


~~~

Sin llegar a un número inmanejable de lanzamientos, se han respetado las nacionalidades que disponen de arsenal nuclear: Rusia, USA, China, Francia, Reino Unido, India, Pakistán, Israel y Corea del Norte (hacer clic para ver a mayor resolución):


Las localizaciones de varios silos nucleares curiosamente son de dominio público, apareciendo incluso en Google Maps. Aparte de porque muchos ya están desmantelados e incluso convertidos en lugares visitables, se asume que en caso de ser atacados lanzarían su carga antes de resultar inutilizados.

Fuente: Google Maps, silo de misiles Minuteman Alpha-6 en Montana (USA)

Fuente: Google Maps, silo de misiles Minuteman Delta-9 en Dakota del Sur (USA)

En Internet se encuentran joyas como este documento de la Guerra Fría (1964), desclasificado en 2001 por la Inteligencia de USA sobre el complejo de misiles soviético de Gladkaya, incluído en la simulación (hacer clic para ver todo el documento):



A las bases en tierra se añaden algunos lanzamientos desde submarinos (SLBM) en localizaciones marítimas plausibles. Las ciudades objetivo se han escogido por ser las más pobladas de cada bando. En total se simulan 82 misiles, la mitad para cada facción, cuyo detalle puede encontrarse aquí.

~~~

El objetivo del ejercicio no es en realidad la simulación como tal sino el reto de desarrollarla enteramente por código en R y sin utilizar ninguna librería gráfica. Los fotogramas ni siquiera se presentan en pantalla, son matrices numéricas guardadas como archivos monocromos de imagen. El resultado en mi opinión ha quedado deliciosamente vintage.

Los aspectos técnicos mas destacables implementados:

  • Rotación, escalado y proyección 3D
  • Cálculo de trayectorias de misiles balísticos siguiendo grandes círculos (mínima distancia hasta el objetivo)
  • Eliminación de partes ocultas del globo y trayectorias de misiles
  • Grafismo: trayectorias en escala de grises, degradado del globo terráqueo y explosiones

La estructura de datos que codifica las trayectorias de los misiles es una lista de dataframes, lo que ha permitido vectorizar la mayoría de cálculos con código muy intuitivo y logrando gran velocidad en la generación de cada fotograma. Paradójicamente lo único que realmente ralentiza los cálculos son las explosiones, ya que los círculos con que se representan son dibujados de una forma tan peculiar como lenta.

El código está básicamente replicado para cada sección de la animación, adaptándose a lo que haya de dibujarse en cada una de ellas. Las principales ecuaciones para realizar los anteriores cálculos pueden verse a continuación (clic para mayor resolución):




~~~

Se sincroniza la acción con el tema 'Playing Dead' de los alemanes And One. El resultado es un archivo de vídeo MP4 generado usando FFmpeg a partir de los frames individuales y un WAV con el audio. Puede verse en oppenheimer.mp4 o en YouTube:


Información prescindible: este vídeo cuenta con la aprobación personal del líder de And One, Steve Naghavi.


~~~

Un misil puede tardar alrededor de 30min en llegar a la otra punta del globo. Esto significa que a un lanzamiento desde Rusia a Madrid por ejemplo le llevaría menos de 15min en caer, mucho menos si es hipersónico.

Es terrible, en caso de un conflicto así los habitantes de una ciudad atacada seguramente no tendrían tiempo no ya de huir, sino ni siquiera de reunirse o hablar con sus seres queridos. Eso suponiendo que se enterasen a tiempo de que están siendo atacados, sino morirían quasi instantáneamente sin saber nunca qué pasó.

Algunos cálculos sobre la probabilidad de vivir una guerra nuclear en 'Qué probabilidad tienes de vivir una guerra nuclear?'.

~~~

Como colofón reutilizamos el código 3D para hacer un guiño a la primera 'Demo' que vi en mi Commodore Amiga 500 allá por finales de los 80. Se trata de una de las secuencias animadas del grupo francés Wild Copper. También he ripeado la música original (hacer clic para ver la animación):


~~~

Repositorio con el código R y archivos auxiliares: GitHub.


No hay comentarios:

Publicar un comentario

Por claridad del blog, por favor trata de utilizar una sintaxis lo más correcta posible y no abusar del uso de emoticonos, mayúsculas y similares.