30.1 Objetivo y alcance del proyecto
Simularemos un objeto soltado desde una altura conocida. El programa calculará su altura y velocidad mediante pasos de Euler, detendrá la evolución al tocar el suelo y mostrará el error frente a la solución exacta.
El modelo usa movimiento vertical en una dimensión, gravedad uniforme y ausencia de resistencia del aire. El impacto termina el experimento; no se modelan rebote ni deformación.
Este alcance acotado permite integrar los conceptos del curso sin ocultar las decisiones físicas detrás del código.
30.2 Definir sistema, eje y unidades
El sistema es el objeto. Elegimos altura y positiva hacia arriba; el suelo está en y = 0. La aceleración es −g porque apunta hacia abajo.
- altura en metros;
- velocidad en m/s;
- aceleración en m/s²;
- masa en kg;
- tiempo y dt en segundos.
La masa permite calcular el peso y la energía, aunque no modifica la aceleración ideal de caída.
30.3 Condiciones iniciales y parámetros
El estado inicial contiene tiempo 0, altura seleccionada y velocidad 0. Los parámetros contienen masa, gravedad y paso temporal. Separarlos facilita reiniciar y repetir experimentos.
function crearExperimento(altura, masa, gravedad, dt) {
return {
estado: { tiempo: 0, altura, velocidad: 0, terminado: false },
parametros: { masa, gravedad, dt }
};
}
const experimento = crearExperimento(20, 2, 9.8, 0.1);
console.log(experimento.estado.altura + ' m');
console.log(experimento.parametros.dt + ' s');30.4 Modelo exacto de referencia
Para un objeto soltado, la solución exacta antes del impacto es:
v(t) = −gt
timpacto = √(2h/g)
Estas ecuaciones servirán para verificar el algoritmo numérico. No las usaremos para actualizar el objeto paso a paso, sino como resultado de referencia.
Desde 20 m con g = 9,8 m/s², el impacto ideal ocurre aproximadamente a los 2,02 s.
30.5 Actualización con Euler semiexplícito
En cada paso calculamos aceleración, actualizamos velocidad y luego altura:
y ← y + v·dt
t ← t + dt
El orden corresponde a Euler semiexplícito. La aproximación suele llegar un poco antes al suelo porque utiliza la velocidad nueva durante todo el intervalo.
La fuerza peso es −mg y al dividir por masa obtenemos −g. Mantener este razonamiento en el diseño conecta fuerzas y cinemática.
30.6 Detectar y resolver el impacto
Después de un paso, la altura puede ser negativa. Debemos detectar el cruce, fijar y = 0, marcar el experimento como terminado y registrar el motivo.
Una versión precisa interpola el instante dentro del último paso. En este proyecto conservaremos el tiempo numérico del paso y mostraremos su error frente al instante exacto.
Esta regla es un límite del mundo simulado, no una consecuencia automática de Euler.
30.7 Implementar el paso físico
function avanzar(estado, gravedad, dt) {
if (estado.terminado) return;
estado.velocidad -= gravedad * dt;
estado.altura += estado.velocidad * dt;
estado.tiempo += dt;
if (estado.altura <= 0) {
estado.altura = 0;
estado.terminado = true;
}
}
const estado = { altura: 10, velocidad: 0, tiempo: 0, terminado: false };
avanzar(estado, 10, 0.1);
console.log(estado.velocidad.toFixed(1) + ' m/s');
console.log(estado.altura.toFixed(1) + ' m');Después del primer paso, la velocidad es −1,0 m/s y la altura 9,9 m.
30.8 Proyecto interactivo
Ejecutá la caída, avanzá un paso o seleccioná parámetros. La vista muestra el objeto, la trayectoria exacta y un gráfico de altura contra tiempo.
Experimento preparado.
30.9 Registrar y analizar resultados
Guardamos una muestra después de cada paso. Con ese historial podemos dibujar la trayectoria, hallar máximos, exportar datos y detectar cuándo apareció un error.
Registrar demasiados puntos consume memoria; registrar muy pocos oculta cambios. Para este proyecto, una muestra por paso mantiene una relación directa con dt.
Además del estado, conviene guardar los parámetros y la versión del algoritmo para poder reproducir el experimento.
30.10 Verificar el proyecto
Las pruebas principales son: t = 0 reproduce la altura inicial; la velocidad se vuelve negativa; la altura no atraviesa el suelo; la masa no cambia el tiempo de caída; reducir dt disminuye el error temporal.
También podemos comprobar energía antes del impacto. La solución exacta conserva E = mgh + ½mv². Euler introduce un error que debe reducirse al disminuir dt.
Si una prueba falla, aislamos fórmula, unidades, orden de actualización y criterio de impacto antes de modificar varios componentes.
30.11 Desafío integrador
Para h = 19,6 m, g = 9,8 m/s² y masa 3 kg, calculá tiempo exacto, velocidad de impacto y energía mecánica inicial.
Ver solución y código
El tiempo es 2 s; la velocidad es −19,6 m/s; la energía inicial es 3·9,8·19,6 = 576,24 J.
const altura = 19.6, gravedad = 9.8, masa = 3;
const tiempo = Math.sqrt(2 * altura / gravedad);
const velocidad = -gravedad * tiempo;
const energia = masa * gravedad * altura;
console.log(tiempo.toFixed(1) + ' s');
console.log(velocidad.toFixed(1) + ' m/s');
console.log(energia.toFixed(2) + ' J');30.12 Cierre del curso
El proyecto reunió magnitudes, unidades, vectores con signo, cinemática, fuerzas, energía, objetos JavaScript, pasos temporales, Euler, límites y verificación.
- Definí primero el sistema y sus supuestos.
- Separá estado, parámetros, física y dibujo.
- Usá unidades coherentes y nombres claros.
- Tratà límites y eventos como reglas explícitas.
- Compará con soluciones conocidas y varios dt.
- Documentá qué representa y qué omite el modelo.
Esta base permite avanzar hacia los cursos específicos de física para programación y desarrollar simulaciones con más dimensiones, fuerzas e interacciones.