simulador_relatividad
🌌 General Relativity Simulator
Simulador Interactivo de Relatividad General
Visualiza la curvatura del espaciotiempo, la dilatación temporal y las ondas gravitacionales — en tiempo real, en tu navegador.

¿Qué es esto?
Un simulador interactivo 3D que modela los efectos de la Relatividad General de Einstein: la deformación del espaciotiempo causada por la masa, la dilatación del tiempo cerca de objetos masivos y la propagación de ondas gravitacionales.
Todo implementado en un único archivo HTML, sin frameworks, sin bundlers. Solo JavaScript, Three.js y física.
El proyecto nació con un propósito concreto: entender la Relatividad General implementándola, no solo leyéndola. Cada fórmula en el simulador tiene una razón de ser que se puede ver en pantalla.
Demo
→ Ver demo en vivo (Enlace)
Características
Física
- Curvatura del espaciotiempo — malla 3D que se deforma en tiempo real según la masa de cada cuerpo, usando softening gravitacional para evitar singularidades numéricas
- Dilatación temporal — calculada con la métrica de Schwarzschild; muestra el factor γ y el porcentaje de ralentización del tiempo a 5 unidades del objeto más masivo
- Ondas gravitacionales — se emiten anillos de onda al fusionar dos cuerpos muy masivos
- Sistema de partículas — miles de partículas que orbitan afectadas por el campo gravitacional local, con velocidad y color dependientes de la proximidad a cada masa
Interactividad
- Añadir, mover y eliminar cuerpos masivos con el ratón
- Control de masa, velocidad de simulación y flexibilidad de la malla mediante sliders
- Presets de escenarios: Sistema Solar, estrella de neutrones, colisión de agujeros negros y más
- Toggles para partículas, rejilla de curvatura, nombres y etiquetas
Contenido teórico
- Modal con 5 pestañas que cubre la historia, los fundamentos y las ecuaciones de la Relatividad General
- Fórmulas renderizadas en LaTeX mediante MathJax
- Tabla comparativa Relatividad Especial vs General
- Timeline histórico desde Newton hasta la detección de ondas gravitacionales
UX
- Interfaz completamente bilingüe (Español / English) con cambio instantáneo sin recarga
- Métricas en tiempo real: masa total del sistema, curvatura máxima, dilatación temporal
- Tooltips contextuales en todos los controles con explicaciones físicas
- Diseño responsivo
Tecnologías
| Tecnología | Uso |
|---|
| Three.js | Renderizado 3D, geometría de la malla, sistema de partículas |
| MathJax 3 | Renderizado de fórmulas LaTeX en el módulo teórico |
| Web APIs | requestAnimationFrame, localStorage, ResizeObserver |
| CSS | Backdrop-filter, variables CSS, animaciones, layout con Grid y Flexbox |
Sin npm. Sin build step. Sin dependencias locales.
Física implementada
Curvatura de la malla
La deformación vertical de cada vértice de la malla se calcula como:
z(x, y) = -Σ [ (CURV_GAIN × mᵢ × flex) / (dᵢ² + CURV_SOFT²) ]
Donde dᵢ es la distancia al astro i y CURV_SOFT es el factor de suavizado que evita divergencias cerca del origen.
Esta misma fórmula se aplica a la posición Z de cada astro, de forma que los cuerpos se sitúan exactamente sobre la superficie de la malla.
Dilatación temporal (Schwarzschild)
τ/t = √(1 - rₛ/r) donde rₛ = 2GM/c²
El simulador aproxima rₛ a partir de la masa normalizada y calcula la dilatación a una distancia de referencia de 5 unidades del objeto más masivo.
Partículas
Cada partícula tiene un radio orbital y velocidad angular base. En cada frame, la velocidad se multiplica por un gravFactor calculado como el producto de los términos (1 - mᵢ × k / dᵢ) de todos los astros, lo que produce una ralentización orbital realista cerca de masas grandes.
Uso
No hay instalación. Descarga o clona el repositorio y abre simulador_v5.html directamente en el navegador.
git clone https://github.com/davidtenerife04/davidtenerife04.github.io.git
cd tu-repo
# Abre simulador_v5.html en tu navegador
Funciona en cualquier navegador moderno con soporte WebGL (Chrome, Firefox, Edge, Safari 15+).
Controles básicos
| Acción | Control |
|---|
| Añadir cuerpo | Clic en la malla |
| Mover cuerpo | Arrastrar |
| Eliminar cuerpo | Botón × en su tarjeta |
| Cambiar idioma | Botón ES / EN (esquina superior derecha) |
| Ver teoría | Botón "Teoría" / "Theory" |
Estructura del proyecto
simulador_v5.html
│
├── <style> CSS completo (variables, layout, modal, tooltips...)
├── <body> HTML de la interfaz (panel, modal, tarjetas de astros)
└── <script>
├── Three.js setup (escena, cámara, renderer, iluminación)
├── Malla (generación y deformación dinámica)
├── Astros (creación, movimiento, físicas)
├── Partículas (sistema orbital con gravedad)
├── Ondas (anillos de onda gravitacional)
├── UI / controles (sliders, toggles, presets)
├── Modal teórico (tabs, MathJax)
└── i18n (sistema de traducción ES/EN)
Posibles mejoras futuras
Licencia
MIT — libre para usar, modificar y distribuir.
Construido para aprender física implementándola.