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>
This commit is contained in:
@@ -300,6 +300,10 @@ constexpr float BOID_MAX_SPEED = 2.5f; // Velocidad máxima (píxe
|
||||
constexpr float BOID_MAX_FORCE = 0.05f; // Fuerza máxima de steering (REDUCIDA para evitar aceleración excesiva)
|
||||
constexpr float BOID_MIN_SPEED = 0.3f; // Velocidad mínima (evita boids estáticos)
|
||||
|
||||
// FASE 2: Spatial Hash Grid para optimización O(n²) → O(n)
|
||||
constexpr float BOID_GRID_CELL_SIZE = 100.0f; // Tamaño de celda del grid (píxeles)
|
||||
// Debe ser ≥ BOID_COHESION_RADIUS para funcionar correctamente
|
||||
|
||||
constexpr float PI = 3.14159265358979323846f; // Constante PI
|
||||
|
||||
// Función auxiliar para obtener la ruta del directorio del ejecutable
|
||||
|
||||
Reference in New Issue
Block a user