Commit Graph

3 Commits

Author SHA1 Message Date
f6402084eb feat: Bordes como obstáculos + Variables BOIDS ajustables + Fix tecla G
**1. Bordes como obstáculos (no más wrapping):**
- Implementada fuerza de repulsión cuando boids se acercan a bordes
- Nueva regla: Boundary Avoidance (evitar bordes)
- Fuerza proporcional a cercanía (0% en margen, 100% en colisión)
- Constantes: BOID_BOUNDARY_MARGIN (50px), BOID_BOUNDARY_WEIGHT (7200 px/s²)

**2. Variables ajustables en runtime:**
- Añadidas 11 variables miembro en BoidManager (inicializadas con defines.h)
- Permite modificar comportamiento sin recompilar
- Variables: radios (separation/alignment/cohesion), weights, speeds, boundary
- Base para futuras herramientas de debug/tweaking visual

**3. Fix tecla G (BOIDS → PHYSICS):**
- Corregido: toggleBoidsMode() ahora acepta parámetro force_gravity_on
- handleGravityToggle() pasa explícitamente false para preservar inercia
- Transición BOIDS→PHYSICS ahora mantiene gravedad OFF correctamente

**Implementación:**
- defines.h: +2 constantes (BOUNDARY_MARGIN, BOUNDARY_WEIGHT)
- boid_manager.h: +11 variables miembro ajustables
- boid_manager.cpp:
  - Constructor inicializa variables
  - Todas las funciones usan variables en lugar de constantes
  - applyBoundaries() completamente reescrito (repulsión vs wrapping)
- engine.h/cpp: toggleBoidsMode() con parámetro opcional

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-17 20:09:33 +02:00
abbda0f30b FASE 2: Spatial Hash Grid - Optimización O(n²) → O(n) para boids
Implementado sistema genérico de particionamiento espacial reutilizable
que reduce drásticamente la complejidad del algoritmo de boids.

**MEJORA DE RENDIMIENTO ESPERADA:**
- Sin grid: 1000 boids = 1M comparaciones (1000²)
- Con grid: 1000 boids ≈ 9K comparaciones (~9 vecinos/celda)
- **Speedup teórico: ~100x en casos típicos**

**COMPONENTES IMPLEMENTADOS:**

1. **SpatialGrid genérico (spatial_grid.h/.cpp):**
   - Divide espacio 2D en celdas de 100x100px
   - Hash map para O(1) lookup de celdas
   - queryRadius(): Busca solo en celdas adyacentes (máx 9 celdas)
   - Reutilizable para colisiones ball-to-ball en física (futuro)

2. **Integración en BoidManager:**
   - Grid poblado al inicio de cada frame (O(n))
   - 3 reglas de Reynolds ahora usan queryRadius() en lugar de iterar TODOS
   - Separación/Alineación/Cohesión: O(n) total en lugar de O(n²)

3. **Configuración (defines.h):**
   - BOID_GRID_CELL_SIZE = 100.0f (≥ BOID_COHESION_RADIUS)

**CAMBIOS TÉCNICOS:**
- boid_manager.h: Añadido miembro spatial_grid_
- boid_manager.cpp: update() poblа grid, 3 reglas usan queryRadius()
- spatial_grid.cpp: 89 líneas de implementación genérica
- spatial_grid.h: 74 líneas con documentación exhaustiva

**PRÓXIMOS PASOS:**
- Medir rendimiento real con 1K, 5K, 10K boids
- Comparar FPS antes/después
- Validar que comportamiento es idéntico

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-12 05:46:34 +02:00
1bb8807060 Refactor fase 10: Implementar BoidManager completo
Cambios realizados:
- Creado BoidManager (source/boids_mgr/) con algoritmo de Reynolds (1987)
  * Separación: Evitar colisiones con vecinos cercanos
  * Alineación: Seguir dirección promedio del grupo
  * Cohesión: Moverse hacia centro de masa del grupo
  * Wrapping boundaries (teletransporte en bordes)
  * Velocidad y fuerza limitadas (steering behavior)
- Añadido BOIDS a enum SimulationMode (defines.h)
- Añadidas constantes de configuración boids (defines.h)
- Integrado BoidManager en Engine (inicialización, update, toggle)
- Añadido binding de tecla J para toggleBoidsMode() (input_handler.cpp)
- Añadidos helpers en Ball: getVelocity(), setVelocity(), setPosition()
- Actualizado CMakeLists.txt para incluir source/boids_mgr/*.cpp

Arquitectura:
- BoidManager sigue el patrón establecido (similar a ShapeManager)
- Gestión independiente del comportamiento de enjambre
- Tres reglas de Reynolds implementadas correctamente
- Compatible con sistema de resolución dinámica

Estado: Compilación exitosa, BoidManager funcional
Próximo paso: Testing y ajuste de parámetros boids

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-11 21:38:05 +02:00