65. Funciones para representar fenómenos físicos

Muchos fenómenos físicos pueden representarse con funciones que relacionan tiempo, posición, velocidad, fuerza, energía o temperatura.

65.1 Introducción

Las funciones permiten convertir ideas físicas en cálculos. Un programa puede usar funciones para estimar movimiento, caída, enfriamiento, energía, ondas o fuerzas.

Estos modelos suelen ser simplificaciones. Aun así, son muy útiles para simulaciones, videojuegos, gráficos, visualizaciones y herramientas educativas.

65.2 Variables físicas comunes

Magnitud Símbolo frecuente Uso en una función
Tiempo t Entrada principal en simulaciones
Posición x, y Salida o estado calculado
Velocidad v Cambio de posición por tiempo
Aceleración a Cambio de velocidad por tiempo
Fuerza F Interacción que modifica el movimiento

65.3 Movimiento uniforme

Si un objeto se mueve con velocidad constante, su posición se modela con una función lineal.

posición(t) = posiciónInicial + velocidad · tiempo
function posicionUniforme(tiempo, posicionInicial, velocidad) {
  return posicionInicial + velocidad * tiempo;
}

console.log(posicionUniforme(0, 10, 3));
console.log(posicionUniforme(5, 10, 3));
console.log(posicionUniforme(10, 10, 3));

65.4 Movimiento con aceleración constante

Si hay aceleración constante, la posición depende de una función cuadrática.

posición(t) = posiciónInicial + velocidadInicial · t + 0.5 · aceleración · t²
function posicionAcelerada(t, posicionInicial, velocidadInicial, aceleracion) {
  return posicionInicial + velocidadInicial * t + 0.5 * aceleracion * t * t;
}

console.log(posicionAcelerada(0, 0, 2, 1));
console.log(posicionAcelerada(2, 0, 2, 1));
console.log(posicionAcelerada(4, 0, 2, 1));

65.5 Velocidad con aceleración

La velocidad también puede expresarse como función del tiempo.

velocidad(t) = velocidadInicial + aceleración · tiempo
function velocidad(tiempo, velocidadInicial, aceleracion) {
  return velocidadInicial + aceleracion * tiempo;
}

console.log(velocidad(0, 5, 2));
console.log(velocidad(3, 5, 2));
console.log(velocidad(6, 5, 2));

65.6 Caída libre simplificada

La caída libre puede modelarse usando la gravedad como aceleración. Si el eje vertical positivo apunta hacia arriba, la gravedad se resta.

altura(t) = alturaInicial + velocidadInicial · t - 0.5 · g · t²
function altura(t, alturaInicial, velocidadInicial) {
  const g = 9.8;
  return alturaInicial + velocidadInicial * t - 0.5 * g * t * t;
}

console.log(altura(0, 100, 0));
console.log(altura(2, 100, 0));
console.log(altura(4, 100, 0));

65.7 Lanzamiento vertical

Si un objeto se lanza hacia arriba, al principio sube, luego se detiene momentáneamente y finalmente baja.

function lanzamiento(t, alturaInicial, velocidadInicial) {
  const g = 9.8;
  return alturaInicial + velocidadInicial * t - 0.5 * g * t * t;
}

for (let t = 0; t <= 5; t++) {
  console.log({ tiempo: t, altura: lanzamiento(t, 0, 20) });
}

65.8 Movimiento circular

El movimiento circular se representa con seno y coseno.

x = centroX + cos(ángulo) · radio y = centroY + sin(ángulo) · radio
function puntoCircular(angulo, radio, centro) {
  return {
    x: centro.x + Math.cos(angulo) * radio,
    y: centro.y + Math.sin(angulo) * radio
  };
}

console.log(puntoCircular(0, 50, { x: 100, y: 100 }));
console.log(puntoCircular(Math.PI / 2, 50, { x: 100, y: 100 }));

65.9 Oscilación

Una oscilación describe un movimiento repetitivo alrededor de un valor central.

posición(t) = centro + amplitud · sin(tiempo · frecuencia)
function oscilacion(tiempo, centro, amplitud, frecuencia) {
  return centro + Math.sin(tiempo * frecuencia) * amplitud;
}

console.log(oscilacion(0, 100, 20, 1));
console.log(oscilacion(Math.PI / 2, 100, 20, 1));
console.log(oscilacion(Math.PI, 100, 20, 1));

65.10 Fuerza y aceleración

La segunda ley de Newton relaciona fuerza, masa y aceleración.

F = m · a a = F / m
function aceleracion(fuerza, masa) {
  if (masa === 0) {
    return "La masa no puede ser cero";
  }

  return fuerza / masa;
}

console.log(aceleracion(20, 5));
console.log(aceleracion(10, 2));

65.11 Energía cinética

La energía cinética depende de la masa y del cuadrado de la velocidad.

Ec = 0.5 · masa · velocidad²
function energiaCinetica(masa, velocidad) {
  return 0.5 * masa * velocidad * velocidad;
}

console.log(energiaCinetica(2, 10));
console.log(energiaCinetica(5, 3));

65.12 Energía potencial

La energía potencial gravitatoria depende de la masa, la gravedad y la altura.

Ep = masa · gravedad · altura
function energiaPotencial(masa, altura) {
  const gravedad = 9.8;
  return masa * gravedad * altura;
}

console.log(energiaPotencial(2, 10));
console.log(energiaPotencial(5, 3));

65.13 Enfriamiento aproximado

Un objeto caliente puede aproximarse a la temperatura ambiente con un modelo exponencial de decaimiento.

temperatura(t) = ambiente + diferenciaInicial · e^(-k · t)
function enfriamiento(tiempo, ambiente, inicial, k) {
  return ambiente + (inicial - ambiente) * Math.exp(-k * tiempo);
}

console.log(enfriamiento(0, 20, 90, 0.2));
console.log(enfriamiento(5, 20, 90, 0.2));
console.log(enfriamiento(20, 20, 90, 0.2));

65.14 Resistencia o rozamiento simple

Un modelo muy simple de rozamiento puede reducir la velocidad en cada paso de tiempo.

function aplicarRozamiento(velocidad, factor) {
  return velocidad * factor;
}

let velocidad = 100;

for (let paso = 1; paso <= 5; paso++) {
  velocidad = aplicarRozamiento(velocidad, 0.8);
  console.log({ paso, velocidad });
}

65.15 Simular paso a paso

En una simulación, el estado se actualiza usando un pequeño intervalo de tiempo.

function actualizar(posicion, velocidad, deltaTiempo) {
  return posicion + velocidad * deltaTiempo;
}

let posicion = 0;
const velocidad = 10;

for (let paso = 1; paso <= 5; paso++) {
  posicion = actualizar(posicion, velocidad, 0.1);
  console.log({ paso, posicion });
}

65.16 Unidades

Los modelos físicos dependen de unidades coherentes. Mezclar metros con píxeles o segundos con milisegundos puede producir resultados incorrectos.

Magnitud Unidad típica Cuidado
Tiempo segundos No confundir con milisegundos
Distancia metros Convertir si se dibuja en píxeles
Velocidad metros por segundo Debe coincidir con tiempo y distancia

65.17 Convertir metros a píxeles

Para visualizar un modelo físico, suele usarse una escala entre unidades físicas y píxeles.

function metrosAPixeles(metros, escala) {
  return metros * escala;
}

console.log(metrosAPixeles(1, 50));
console.log(metrosAPixeles(3.5, 50));

65.18 Limitaciones del modelo

Los modelos simples no incluyen todos los factores reales. Por ejemplo, una caída libre básica puede ignorar resistencia del aire, viento o rotación.

Más realismo → más variables y más complejidad.

La elección del modelo depende del objetivo: explicación, visualización, juego, simulación o cálculo preciso.

65.19 Aplicaciones en programación

  • Simular movimiento de objetos.
  • Crear trayectorias en videojuegos.
  • Representar oscilaciones, ondas o vibraciones.
  • Visualizar energía, temperatura o fuerza.
  • Construir animaciones físicamente plausibles.
  • Convertir magnitudes reales a coordenadas de pantalla.

65.20 Errores comunes

  • Mezclar unidades sin conversión.
  • Usar pasos de tiempo demasiado grandes.
  • Olvidar validar divisiones por masa o tiempo cero.
  • Esperar precisión física de un modelo simplificado.
  • Confundir coordenadas matemáticas con coordenadas de pantalla.

65.21 Qué debes recordar de este tema

  • Las funciones permiten representar fenómenos físicos como movimiento, caída, oscilación y enfriamiento.
  • Un modelo físico relaciona variables como tiempo, posición, velocidad, aceleración y fuerza.
  • Las unidades deben ser coherentes.
  • Los modelos simples son útiles, pero tienen límites.
  • En programación, estas funciones se usan para simulaciones, gráficos y videojuegos.

65.22 Conclusión

Representar fenómenos físicos mediante funciones permite convertir ideas del mundo real en algoritmos. Aunque los modelos sean simplificados, ayudan a crear simulaciones, animaciones y sistemas interactivos con comportamiento coherente.