CÁLCULO DE TRAYECTORIA INVERSA
8 de julio de 2026
Categoría: LABORATORIO DE SOFTWARE FORENSE
Autor: Mtro. Erik García Chincoya
Documentación — Trayectoria Inversa (Forense)
Fundamento forense, algorítmico y matemático del análisis inverso de trayectorias con casos reales de aplicación
Resumen del Método
El módulo de análisis inverso determina la posición probable del tirador (distancia horizontal, altura de la boca del cañón y ángulo de disparo) a partir de datos forenses medidos en el impacto: ángulo y altura de impacto, dirección del proyectil (ascendente/descendente), velocidad inicial estimada y coeficiente balístico del proyectil recuperado. Utiliza el mismo motor balístico de punto masa que la trayectoria real, garantizando transitividad entre ambos cálculos.
Formulación del Problema Inverso
Definición Formal
Dado un conjunto de parámetros conocidos en el punto de impacto, determinar las condiciones iniciales del disparo que produjeron dicha trayectoria.
Problema inverso: datos conocidos (mediciones forenses)
θ_impacto = ángulo de impacto (°) — medido con varilla forense
h_impacto = altura de impacto sobre el suelo (m) — típicamente centro de masa de la víctima
dirección ∈ {ascendente, descendente} — orientación de la varilla
v₀ = velocidad inicial (m/s) — del cartucho, estimada por longitud del cañón
BC = coeficiente balístico — del proyectil recuperado
Δh = desnivel del terreno (opcional)
Problema inverso: incógnitas a determinar
D = distancia horizontal tirador–objetivo (m)
H_tirador = altura de la boca del cañón sobre el suelo del tirador (m)
θ_disparo = ángulo de disparo respecto a la horizontal (°)
Condicionamiento del Problema
El problema inverso está mal condicionado: diferentes combinaciones de (H_tirador, θ_disparo) pueden producir ángulos de impacto similares. La solución no es única. Para resolverlo, el algoritmo impone restricciones físicas:
- El ángulo de disparo debe ser consistente con la dirección del proyectil (si el proyectil baja al impactar, el ángulo de disparo debe ser predominantemente negativo).
- La altura del tirador se busca en un rango físicamente plausible (0–200 m sobre el objetivo para descendente, −5 m hasta el objetivo para ascendente).
- Se minimiza el error angular: {'min_{H,θ} |θ_impacto_simulado(H,θ) − θ_impacto_forense|'}.
Convención Forense de la Varilla y Mapeo al Motor Balístico
El Método de la Varilla en Reconstrucción de Trayectorias
En la escena del crimen, el perito inserta una varilla rígida a través de los orificios de entrada y salida (o utiliza el orificio de entrada y la posición de la víctima para determinar el eje de la trayectoria). La orientación de la varilla indica la dirección del proyectil al momento del impacto. La varilla apunta hacia el origen del disparo (posición del tirador).
Relación Varilla ↔ Dirección del Proyectil
Convención forense universal (varilla apunta hacia el tirador)
→ Motor: dirección "descending", θ_efectivo = −|θ_forense|
Varilla apunta ABAJO (↙) → tirador está ABAJO → proyectil VENÍA SUBIENDO
→ Motor: dirección "ascending", θ_efectivo = +|θ_forense|
🎯 Ejemplo Forense Real: Impacto en Fachada
Se encuentra un impacto de bala en una fachada a 4.2 m de altura. La varilla
insertada apunta 7° hacia abajo y ligeramente a la izquierda. Interpretación:
Varilla apunta ABAJO (7° descendente) → el tirador
estaba en un punto más BAJO que el impacto.
El proyectil impactó SUBIENDO (ángulo efectivo +7° en el
motor, dirección ascending). El tirador probablemente estaba en un sótano, un desnivel
del terreno, o agachado detrás de un muro bajo.
Si la varilla apuntara 7° ARRIBA, el tirador estaría en un piso superior o azotea,
y el proyectil estaría BAJANDO al impactar (ángulo efectivo −7°,
dirección descending).
Mapeo Detallado
La función calcular() en la página inversa implementa este mapeo explícitamente:
Código de mapeo forense → balístico
Algoritmo de Búsqueda: calcInverse
Estructura General: Búsqueda Bidimensional
La función calcInverse implementa una búsqueda bidimensional sobre (H, θ) (altura de tirador, ángulo de disparo) para minimizar el error entre el ángulo de impacto simulado y el medido forensemente. El algoritmo tiene dos bucles anidados:
Jerarquía de la búsqueda
Bucle Externo: Búsqueda de Altura de Tirador
El rango y resolución de la búsqueda de altura dependen de la dirección:
Rango de búsqueda de altura (código en calcInverse)
Descendente (proyectil baja)
Rango: [Y_target, Y_target + 200] m, paso ≈ 5 m. Busca desde el suelo del objetivo hasta 200 m arriba (edificios, cerros, montañas).
Ascendente (proyectil sube)
Rango: [max(Y_target − 10, −5), Y_target] m, paso ≥ 0.2 m. Busca desde sótano/nivel inferior hasta la altura del impacto.
Bucle Interno: findBestAtHeight — Búsqueda de Ángulo
Para cada altura de tirador H candidata, se ejecuta findBestAtHeight(H) que tiene dos fases:
Fase 1: Barrido grueso de ángulo
Se evalúa el ángulo de disparo θ en incrementos de 0.25° dentro del rango permitido por la dirección. Para cada θ, se simula la trayectoria completa y se verifica el ángulo de impacto:
Barrido grueso de ángulo (paso 0.25°)
Fase 2: Refinamiento por bisección de θ
Si el error del mejor ángulo del barrido grueso es ≥ 0.5°, se refina con bisección (80 iteraciones). El intervalo inicial es ±1° alrededor del mejor candidato:
Bisección de ángulo (80 iteraciones, convergencia a 0.01°)
⚡ Optimización: Cada llamada a findBestAtHeight ejecuta hasta (rango_ángulo / 0.25) + 80 simulaciones completas. Para el barrido grueso, son ≈ 200 simulaciones por altura. Con 40 alturas candidatas, son ~8,000 simulaciones por llamada a calcInverse. Por eso se usa setTimeout para no bloquear la UI.
Refinamiento por Bisección de Altura
Bisección Secundaria
Después del barrido grueso de alturas, si el mejor error angular es ≥ 0.5°, se ejecuta un refinamiento por bisección que ajusta la altura del tirador con precisión sub-métrica. El intervalo se centra en el mejor candidato:
Bisección de altura de tirador (30 iteraciones)
Criterio de Convergencia
El algoritmo retorna la solución con el menor error angular encontrado:
- Si el error angular < 0.5° después del barrido grueso, se acepta directamente (evita sobredimensionar).
- Si no, se ejecuta la bisección de altura para refinar hasta error < 0.01° o 30 iteraciones.
- En la práctica, para la mayoría de configuraciones realistas, se alcanza error < 0.05°.
Validación Transitiva del Resultado
Principio de Transitividad
La validación transitiva verifica que los resultados del análisis inverso son consistentes con el modelo directo. Consiste en re-simular la trayectoria hacia adelante usando los parámetros encontrados (H, θ) y verificar que el impacto simulado coincide con los datos forenses originales:
Verificación transitiva
Interpretación del Resultado
✓ Validación superada
Error < 0.05 m en distancia, < 0.05° en ángulo. La solución inversa es consistente con el modelo directo dentro de la tolerancia numérica. El badge verde se muestra en la UI.
⚠ Validación fallida
Error mayor a la tolerancia. Puede indicar: (a) búsqueda no convergió adecuadamente, (b) los parámetros forenses son inconsistentes, (c) el proyectil no puede físicamente producir el impacto medido. Se muestra badge ámbar.
Modelo de Desnivel del Terreno en el Cálculo Inverso
Ajuste de la Altura Absoluta del Impacto
La altura de impacto h_impacto ingresada por el usuario es relativa al suelo local (ej. 1.2 m para un impacto en el torso de una persona de pie). Cuando existe un desnivel del terreno Δh (diferencia de elevación geodésica entre tirador y objetivo), la altura absoluta del impacto en el sistema de coordenadas del tirador es:
Altura absoluta del impacto
donde Δh > 0 si el objetivo está más alto que el tirador y Δh < 0 si está más abajo. Este valor Y_objetivo es el que se pasa a findImpactAtHeight tanto en la búsqueda inversa como en la validación transitiva.
Implementación en calcular()
Caso Forense Real: Análisis Paso a Paso
Escenario: Impacto en Azotea con Tirador en Nivel Inferior
Contexto: Se encuentra un impacto de proyectil 5.56mm NATO (FMJ 55gr) en el borde de una azotea a 35 m de altura. La varilla forense insertada en el orificio de entrada apunta 7° hacia arriba (ascendente). No hay orificio de salida (proyectil alojado en concreto). Altura del impacto sobre el suelo de la azotea: 1.2 m (bala impactó a un objeto a esa altura).
Paso 1: Determinación de dirección forense
Varilla apunta ARRIBA (ascendente) → el proyectil VENÍA BAJANDO al impactar → tirador estaba ARRIBA del punto de impacto → dirección balística: descending. Ángulo efectivo: −7° (negativo, proyectil descendente).
Mapeo forense → balístico para este caso
Paso 2: Ingreso de parámetros balísticos
Proyectil: 5.56mm FMJ 55gr (3.6 g), BC_G1 = 0.24, v₀ = 920 m/s, función de arrastre G7. Altitud: 0 m (nivel del mar). Desnivel del terreno: 0 m (asumiendo mismo nivel geodésico entre azotea y tirador).
Paso 3: Ejecución del cálculo inverso
calcInverse busca sobre alturas de tirador desde 1.2 m hasta 201.2 m (rango descending). El barrido grueso (paso 5 m) encuentra un mínimo cerca de H = 35 m con θ ≈ −6.75°. La bisección de altura refina a H = 34.8 m.
Resultado de la búsqueda inversa
Paso 4: Validación transitiva
Se re-simula con H = 35 m, θ = −6.75°, v₀ = 920 m/s. El impacto simulado:
Verificación transitiva
Paso 5: Interpretación forense
El tirador se encontraba aproximadamente a 281 m de distancia horizontal del
punto de impacto, a una altura de 35 m sobre el nivel del objetivo (≈ piso 11–12
de un edificio típico). Disparó con el arma ligeramente inclinada hacia abajo
(−6.75°). El proyectil recorrió la distancia en aproximadamente 0.55 s, impactando
con una velocidad residual de ~685 m/s y un ángulo de −7°.
Conclusión forense: La evidencia es
compatible con un disparo desde un edificio de aproximadamente 11 pisos de altura,
a 280 m del punto de impacto, con el tirador en una posición elevada y el arma
apuntando ligeramente hacia abajo. El ángulo final de −7° confirma la trayectoria
descendente consistente con un tirador en altura.
Consideraciones Forenses para el Análisis en un Caso Real
1. Medición del Ángulo de Impacto en la Escena
El ángulo de impacto se mide con varilla forense o equipo de reconstrucción (como FARO Zone 3D). La precisión de la medición depende del material del blanco: en drywall la incertidumbre puede ser ±2°, en concreto ±0.5°. Esta incertidumbre debe propagarse al resultado final. El sistema acepta el ángulo directamente y el perito debe considerar el error instrumental.
2. Determinación de la Altura de Impacto
La altura de impacto sobre el suelo local se mide desde el nivel del piso hasta el centro del orificio de entrada. Si la víctima no está en posición vertical (ej. en el suelo, sentada, o en movimiento), la altura debe medirse en la posición real al momento del impacto. Un error de 0.1 m en la altura de impacto puede traducirse en 2–5 m de error en la distancia estimada.
3. Identificación del Proyectil y Estimación de v₀
El proyectil recuperado debe ser identificado (calibre, masa, fabricante) para obtener su BC de catálogo. La velocidad inicial se estima por el cartucho y la longitud del cañón. Si el arma no se recupera, se usa la velocidad nominal del cartucho con un intervalo de incertidumbre. El rango v₀Min–v₀Max permite al usuario explorar el efecto de esta incertidumbre.
4. Desnivel del Terreno y Topografía
La diferencia de elevación entre tirador y objetivo se obtiene de Google Maps (terrain layer), Open-Elevation API, o medición directa en la escena. Para desniveles > 20 m, el efecto en la trayectoria es significativo y debe incluirse.
5. Incertidumbre y Múltiples Soluciones
Ángulos muy rasantes (< 3°) pueden tener múltiples alturas de tirador que producen el mismo ángulo de impacto (una rama cercana y otra lejana). En estos casos, el algoritmo retorna la de menor error, pero el perito debe evaluar ambas posibilidades. El sistema no modela esta ambigüedad — es responsabilidad del perito detectarla.
Flujo de Cálculo Detallado
-
{[
{ n: 1, text: "Usuario ingresa datos forenses: ángulo de impacto (magnitud positiva), dirección (ascendente/descendente), altura de impacto sobre el suelo local, desnivel del terreno (opcional)." },
{ n: 2, text: "Usuario selecciona munición: categoría → calibre → proyectil. Se cargan BC, v₀ nominal y función de arrastre desde bullets.json." },
{ n: 3, text: "Se obtiene altitud desde coordenadas vía Open-Elevation API. Se calcula la densidad del aire ρ." },
{ n: 4, text: "Mapeo forense → balístico: dirección invertida (ascendente→descending, descendente→ascending). Ángulo con signo según dirección." },
{ n: 5, text: "Se calcula la altura absoluta del impacto: targetAbsY = alturaImpacto + terrenoDiff." },
{ n: 6, text: "Se ejecuta calcInverse con los parámetros mapeados. Búsqueda bidimensional (altura × ángulo) con rangos adaptativos." },
{ n: 7, text: "Si no se encuentra solución, se muestra error indicando posibles causas (parámetros inconsistentes, proyectil no alcanza la altura, etc.)." },
{ n: 8, text: "Si hay solución: se extraen distancia, ángulo inicial, altura de tirador y puntos de trayectoria." },
{ n: 9, text: "Validación transitiva: re-simulación hacia adelante. Comparación de distancia y ángulo de impacto." },
{ n: 10, text: "Truncado de trayectoria hasta el punto de impacto. Inversión del eje X para visualización (distancia desde impacto hacia tirador)." },
{ n: 11, text: "Se muestran: distancia probable, ángulo inicial, altura de tirador, altura máxima, tiempo de vuelo, gráfica, tabla y mapa." },
{ n: 12, text: "Todos los parámetros, resultados intermedios y validación transitiva se registran en console.log para auditoría." },
].map(({ n, text }) => (
{text}
Precisión y Limitaciones del Método Inverso
Precisión Esperada
La precisión del método inverso depende de la geometría del caso:
Ángulos > 15°
Error en distancia < 2%. La solución es bien condicionada. El ángulo de impacto varía rápidamente con la altura del tirador.
Ángulos 5°–15°
Error en distancia < 5%. Rango típico para tiros desde edificios medios. La solución es estable.
Ángulos < 5°
Error en distancia 10–20%. Múltiples soluciones posibles. Se recomienda verificar con evidencia adicional.
Limitaciones Conocidas
{title}
{desc}
⚠ Advertencia para uso pericial: Este sistema es una herramienta de asistencia al perito, no un sustituto del criterio forense. Los resultados deben ser corroborados con la evidencia física de la escena (mediciones con varilla, análisis de residuos de disparo, posición de la víctima, trayectoria en 3D con software especializado). Las incertidumbres aquí descritas deben ser incluidas explícitamente en el dictamen pericial.
Referencias Bibliográficas Forenses
- [1] Mattijssen, E. J. A. T. & Kerkhoff, W. (2016). “Bullet trajectory reconstruction – Methods, accuracy and precision.” Forensic Science International, 262, 204–213. — Estudio comparativo de métodos de reconstrucción (varilla, elipse, lead-in) en drywall, MDF y chapa.
- [2] Gardner, R. M. (2019). “Accuracy and Reproducibility of Bullet Trajectories in FARO Zone 3D.” Journal of Forensic Sciences, 64(4), 1049–1060. — Validación de software forense de reconstrucción 3D.
- [3] NIST/OSAC (2025). Standard Terminology for Shooting Reconstruction and Guidelines for Projectile Path Reconstruction. — Estándares actualizados para terminología y metodología forense.
- [4] Nishshanka, B., Shepherd, C., & Punyasena, M. A. (2021–2025). Múltiples estudios: impacto de AK en chapa 1 mm, ricochet 9mm en madera ingenieril, azulejos cerámicos, concreto. Forensic Science International.
- [5] Haag, L. C. (2006). Shooting Incident Reconstruction. Academic Press. — Manual integral de referencia para peritos en reconstrucción.
- [6] Hueske, E. E. (2016). Practical Analysis and Reconstruction of Shooting Incidents. 2nd ed. CRC Press. — Guía práctica con casos reales.
- [7] García-Reyes, J. F. et al. (2024). “LIBS for distance-of-fire determination with lead-free ammunition.” Forensic Science International. — Método químico complementario para determinación de distancia.
- [8] McCoy, R. L. (1999). Modern Exterior Ballistics. Schiffer Publishing. — Referencia balística general utilizada como base del motor de simulación.
- [9] Litz, B. (2011). Applied Ballistics for Long Range Shooting. — Validación experimental de BC y modelos de arrastre.