27. Acumular fuerzas y calcular la aceleración resultante

Cada interacción aporta un vector. Un acumulador reúne todas las fuerzas externas de un cuerpo y permite aplicar la segunda ley una sola vez por instante.

27.1 Superposición convertida en algoritmo

La fuerza resultante sobre un cuerpo es la suma vectorial de todas las fuerzas externas que recibe:

ΣF = F1 + F2 + … + Fn

En un programa, cada interacción puede calcularse por separado. Un acumulador combina sus componentes sin perder la identidad del cuerpo receptor.

FR,x = ΣFi,x   |   FR,y = ΣFi,y

27.2 Qué es un acumulador de fuerzas

Es un vector temporal asociado a un cuerpo. Comienza en cero al evaluar un instante y recibe cada fuerza activa mediante sumas sucesivas.

TemporalSolo representa las fuerzas del estado actual.
VectorialSuma cada componente con su signo.
Por receptorCada cuerpo posee su propio resultado.
No integraNo modifica todavía posición ni velocidad.

El acumulador no es una fuerza adicional. Es la representación numérica de la suma de fuerzas reales y, si corresponde al marco elegido, aparentes.

27.3 Ciclo de evaluación

1. Reiniciar(0; 0) N
2. EvaluarCada regla activa
3. AcumularSumar por receptor
4. Calculara = ΣF/m

El orden debe repetirse para cada evaluación dinámica. Reiniciar no elimina reglas persistentes como la gravedad; solo borra el resultado numérico anterior para que esas reglas vuelvan a evaluarse.

27.4 Por qué debe reiniciarse

Supongamos que un peso de 10 N se suma en cada paso y el acumulador nunca vuelve a cero. Después de tres pasos contendría 30 N, aunque físicamente el peso siga siendo 10 N.

Incorrecto: Facum ← Facum anterior + fuerzas actuales
Correcto: Facum ← 0; luego sumar fuerzas actuales

Este error produce aceleraciones que crecen sin causa y suele confundirse con un fallo del integrador.

27.5 Sumar sin reemplazar

Cuando llega una fuerza nueva, sus componentes deben agregarse:

acumulador.x += fuerza.x
acumulador.y += fuerza.y

Asignar con = borraría las contribuciones anteriores y haría que solo la última fuerza evaluada afectara al cuerpo.

La operación debe rechazar componentes no finitas. Un único NaN contamina toda la suma y se propaga a la aceleración.

27.6 Evaluar todas las fuerzas con el mismo estado

Las reglas dependientes de posición o velocidad deben leer una instantánea coherente. Ninguna debería avanzar el cuerpo antes de que las demás terminen.

estado actual → evaluar todas las fuerzas → resultante → aceleración

Si una regla modifica la velocidad y la siguiente la utiliza, el resultado dependerá del orden del arreglo. Separar evaluación e integración elimina esa dependencia accidental.

27.7 De la resultante a la aceleración

Para un cuerpo móvil de masa positiva:

ax = FR,x/m
ay = FR,y/m

Si el objeto almacena masaInversa = 1/m, puede usarse una multiplicación:

a = ΣF · masaInversa

La aceleración es un resultado derivado del instante. En el siguiente paso puede cambiar aunque la masa permanezca constante.

27.8 Cuerpos inmóviles

Un cuerpo marcado como inmóvil suele tener masaInversa = 0. Puede recibir fuerzas para fines de diagnóstico, pero su aceleración impuesta permanece en cero:

a = ΣF · 0 = 0

Esto representa una decisión del modelo: el suelo no se mueve bajo las cargas simuladas. No afirma que en el mundo real no experimente fuerzas ni deformaciones.

27.9 Un acumulador por cuerpo

En un mundo con varios cuerpos, una estructura indexada por identificador evita mezclar receptores:

Map<cuerpoId, { x, y }>

Cada fuerza declara receptorId. El sistema busca su acumulador y suma allí el vector. Si el receptor no existe, conviene informar un error en lugar de ignorarlo silenciosamente.

Al terminar, cada cuerpo obtiene una aceleración diferente según su resultante y su masa.

27.10 Aplicar pares de interacción

Una interacción entre A y B produce dos fuerzas opuestas sobre receptores diferentes. La implementación debe actualizar ambos acumuladores:

acum[B] += FA→B
acum[A] += −FA→B

Si luego se analiza el sistema compuesto A+B, esas contribuciones internas se cancelan. Individualmente siguen siendo esenciales para obtener la aceleración de cada cuerpo.

Aplicar solo una mitad del par viola la conservación interna del modelo y puede acelerar artificialmente el centro de masa del conjunto.

27.11 Orden de suma y precisión

Matemáticamente, la suma vectorial es conmutativa. En punto flotante, cambiar el orden puede producir diferencias diminutas cuando se combinan valores de escalas muy distintas.

Para simulaciones habituales basta con:

  • Usar siempre el mismo orden para obtener resultados reproducibles.
  • Evitar unidades que generen magnitudes extremas innecesarias.
  • Comparar con tolerancias y no mediante igualdad exacta.
  • Investigar sumas compensadas si la precisión acumulada es crítica.

Una diferencia de redondeo pequeña no debe confundirse con una fuerza física faltante.

27.12 Resultado rápido y registro de contribuciones

El acumulador mínimo solo conserva dos números. Para depurar conviene mantener además un registro temporal de contribuciones:

AcumuladorResultado compacto usado para calcular la aceleración.
RegistroLista con tipo, agente, receptor y vector de cada fuerza.

El registro permite responder por qué se mueve un cuerpo y comprobar el diagrama de cuerpo libre. Puede desactivarse en producción si su costo de memoria no se justifica.

27.13 Resultante cero y restricciones

Si el acumulador termina en cero, la aceleración calculada es cero. Esto puede representar equilibrio o una cancelación instantánea de fuerzas dependientes del estado.

Las fuerzas de restricción, como normales y tensiones, deben evaluarse antes del resultado final. No se obtiene una normal simplemente sumando fuerzas conocidas: a menudo su valor surge de imponer la condición cinemática del contacto.

El acumulador suma fuerzas ya determinadas; no resuelve por sí mismo incógnitas de restricción.

27.14 Actividad interactiva: acumular tres fuerzas

Modificá dos fuerzas y la gravedad. El laboratorio reinicia el acumulador, suma las tres contribuciones y calcula la aceleración.

Laboratorio del acumulador

Las flechas F₁, F₂ y P se suman para formar FR; la aceleración tiene su misma dirección.

FR = F₁ + F₂ + P = (+20,00; −24,05) N
Peso(0,00; −49,05) N
Fuerza resultante(+20,00; −24,05) N
Aceleración(+4,00; −4,81) m/s²
Módulo de FR31,28 N

27.15 Implementar el acumulador con JavaScript

Un acumulador pequeño puede exponer operaciones explícitas de reinicio y suma:

function crearAcumulador() {
  return {
    x: 0,
    y: 0,
    reiniciar() {
      this.x = 0;
      this.y = 0;
    },
    agregar(fuerza) {
      if (!Number.isFinite(fuerza.x) || !Number.isFinite(fuerza.y)) {
        throw new TypeError('La fuerza debe tener componentes finitas');
      }
      this.x += fuerza.x;
      this.y += fuerza.y;
    }
  };
}

const acumulador = crearAcumulador();
acumulador.agregar({ x: 30, y: 20 });
acumulador.agregar({ x: -10, y: 5 });
console.log({ x: acumulador.x, y: acumulador.y }); // { x: 20, y: 25 }

La aceleración se calcula sin mutar el acumulador:

function calcularAceleracion(cuerpo, fuerzaResultanteN) {
  if (!cuerpo.movil) return { x: 0, y: 0 };
  if (!(cuerpo.masaInversa > 0)) {
    throw new RangeError('La masa inversa móvil debe ser positiva');
  }

  return {
    x: fuerzaResultanteN.x * cuerpo.masaInversa,
    y: fuerzaResultanteN.y * cuerpo.masaInversa
  };
}

const cuerpo = { movil: true, masaInversa: 0.2 };
console.log(calcularAceleracion(cuerpo, { x: 20, y: -24.05 }));
// { x: 4, y: -4.8100000000000005 }

27.16 Estrategia de implementación y pruebas

  1. Crear un acumulador independiente para cada cuerpo.
  2. Reiniciarlos todos al comenzar la evaluación del instante.
  3. Evaluar cada interacción con la misma instantánea del mundo.
  4. Verificar el receptor y sumar sus componentes.
  5. Calcular aceleraciones después de terminar todas las sumas.
  6. Conservar opcionalmente un registro para diagnóstico.

Pruebas mínimas:

  • Sumar vectores conocidos y comparar el resultado.
  • Reiniciar y comprobar que ambas componentes vuelven a cero.
  • Cambiar el orden de fuerzas y obtener el mismo resultado dentro de una tolerancia.
  • Rechazar NaN e infinito.
  • Aplicar un par opuesto a dos cuerpos y verificar que la resultante global sea cero.
  • Confirmar aceleración cero para un cuerpo inmóvil.

27.17 Errores frecuentes y ejercicios

Errores frecuentes

  • No reiniciar el acumulador entre evaluaciones.
  • Reemplazar el vector en vez de sumar una contribución.
  • Mezclar fuerzas pertenecientes a receptores diferentes.
  • Calcular aceleración antes de evaluar todas las interacciones.
  • Modificar el estado desde una función de fuerza.
  • Dividir por masa cero o permitir que NaN se propague.

Ejercicios propuestos

  1. Sumá las fuerzas (12; −4) N, (−7; 9) N y (5; −3) N.
  2. Calculá la aceleración del ejercicio anterior para una masa de 2 kg.
  3. Una masa de 5 kg recibe (30; 20) N, (−10; 5) N y su peso terrestre. Calculá resultante y aceleración.
  4. Explicá qué ocurre si el acumulador del ejercicio anterior no se reinicia durante tres evaluaciones idénticas.
  5. La interacción entre A y B genera sobre B la fuerza (8; −6) N. Indicá qué vector debe acumularse sobre A.
  6. Un cuerpo inmóvil acumula (100; −50) N. ¿Qué aceleración devuelve el modelo con masa inversa cero?
Ver soluciones
  1. ΣF = (12 − 7 + 5; −4 + 9 − 3) = (10; 2) N.
  2. a = (10; 2)/2 = (5; 1) m/s².
  3. El peso es (0; −49,05) N; la resultante es (20; −24,05) N y la aceleración (4; −4,81) m/s².
  4. El acumulador terminaría en (60; −72,15) N, tres veces la fuerza real, y produciría una aceleración ficticia triple.
  5. Por la tercera ley, sobre A debe acumularse (−8; 6) N.
  6. a = (100; −50) · 0 = (0; 0) m/s².

27.18 Ideas para recordar

  • El acumulador representa la suma de fuerzas del instante, no una fuerza adicional.
  • Debe reiniciarse antes de reevaluar todas las interacciones.
  • Cada cuerpo necesita su propio acumulador.
  • Todas las reglas deben leer un estado coherente y no modificarlo.
  • La aceleración se calcula después de la suma mediante a = ΣF/m.
  • Un registro de contribuciones facilita verificar y depurar el modelo.

En el próximo tema usaremos la aceleración resultante dentro de un bucle de simulación para actualizar velocidad y posición.