Files
vibe3_physics/source/defines.h
Sergio Valor 0873d80765 Boids Fase 1.4: FIX CRÍTICO - Normalizar fuerza de cohesión
BUG CRÍTICO ENCONTRADO:
La fuerza de cohesión NO estaba normalizada, causando atracción
tipo "gravedad" que hacía que los boids colapsaran a puntos.

CAUSA RAÍZ:
```cpp
// ANTES (INCORRECTO):
float steer_x = (center_of_mass_x - center_x) * WEIGHT * delta_time;
// Si center_of_mass está a 100px → fuerza = 100 * 0.5 * 0.016 = 0.8
// ¡FUERZA PROPORCIONAL A DISTANCIA! Como una gravedad newtoniana
```

SOLUCIÓN IMPLEMENTADA:
```cpp
// DESPUÉS (CORRECTO):
float distance = sqrt(dx*dx + dy*dy);
float steer_x = (dx / distance) * WEIGHT * delta_time;
// Fuerza siempre normalizada = 1.0 * WEIGHT * delta_time
// Independiente de distancia (comportamiento Reynolds correcto)
```

CAMBIOS:

1. boid_manager.cpp::applyCohesion() - Fase 1.4
   - Normalizar dirección hacia centro de masa
   - Fuerza constante independiente de distancia
   - Check de división por cero (distance > 0.1f)

2. defines.h - Ajuste de parámetros tras normalización
   - BOID_COHESION_WEIGHT: 0.5 → 0.001 (1000x menor)
     * Ahora que está normalizado, el valor anterior era gigantesco
   - BOID_MAX_SPEED: 3.0 → 2.5 (reducida para evitar velocidades extremas)
   - BOID_MAX_FORCE: 0.5 → 0.05 (reducida 10x)
   - BOID_MIN_SPEED: 0.5 → 0.3 (reducida)
   - Radios restaurados a valores originales (30/50/80)

RESULTADO ESPERADO:
 Sin colapso a puntos (cohesión normalizada correctamente)
 Movimiento orgánico sin "órbitas" artificiales
 Velocidades controladas y naturales
 Balance correcto entre las 3 fuerzas

TESTING:
Por favor probar con 100 y 1000 boids:
- ¿Se mantienen dispersos sin colapsar?
- ¿Las órbitas han desaparecido?
- ¿El movimiento es más natural?

Estado: Compilación exitosa
Rama: boids_development

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-11 22:13:40 +02:00

20 KiB