Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 64 additions & 0 deletions README.es-ES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@


# Grafos Crecientes & Visualización de Alto Rendimiento - ✨[DEMO](https://znah.net/graphs/)✨

<p align="center">
<img src="preview.jpg" width="800">
</p>

Un motor de alto rendimiento para simular y visualizar grafos crecientes basados en reglas. Este proyecto combina autómatas de reescritura de grafos con un motor de disposición dirigido por fuerzas personalizado, optimizado mediante WebAssembly y WebGL.

## 🚀 Características Principales

- **Física de Alto Rendimiento**: Toda la lógica central de la simulación (fuerzas multipartícula, fuerzas de enlace y construcción de octo-árbol) está implementada en **WebAssembly (C)** para un rendimiento casi nativo.
- **Optimización de N-Cuerpos**: Implementa un algoritmo de Barnes-Hut de doble árbol en WASM para cálculos eficientes de fuerzas de carga $O(N \log N)$.
- **Renderizado Acelerado por GPU**: Utiliza **SwissGL** (WebGL 2.0) para una visualización fluida y de alto ancho de banda de miles de nodos y enlaces.
- **Crecimiento Dinámico**: Los nodos evolucionan según reglas de reescritura basadas en el vecindario, creando estructuras emergentes complejas a partir de condiciones iniciales simples.
- **Modo Autónomo**: Un modo de arte generativo con detección agresiva de estancamiento, recuperación inducida por ruido y transiciones suaves entre reglas procedurales.

## 🎨 Agradecimientos e Inspiración

Este proyecto se inspira significativamente en la siguiente investigación sobre autómatas basados en grafos y complejidad emergente:

- **[Autómatas de Reescritura de Grafos](https://paulcousin.net/graph-rewriting-automata/introduction.html)** por Paul Cousin — Una exploración de la evolución de grafos basada en reglas.
- **[Grafos Crecientes](https://arxiv.org/abs/2211.13619)** (*arXiv:2211.13619*) — Investigación sobre las propiedades estructurales y la evolución de sistemas procedurales de grafos.

## 🛠 Stack Tecnológico

- **Lógica Central**: JavaScript (ES6+)
- **Motor de Física**: WebAssembly (compilado desde C mediante `zig build-exe`)
- **Renderizado**: [SwissGL](https://github.com/google/swissgl) (WebGL 2.0)
- **Post-procesamiento**: Filtro Bloom personalizado y mapeo de colores GLSL.

## 🏗 Instrucciones de Compilación

Para compilar el núcleo de WebAssembly:

```bash
bash build.sh
```

Requiere el compilador **[Zig](https://ziglang.org)** para el objetivo `wasm32-freestanding`.

## 📂 Estructura del Proyecto

- `src/main.c`: Núcleo de física WASM (Octo-árbol, Barnes-Hut, Fuerzas de enlace).
- `js/app.js`: Controlador de aplicación de alto nivel y comportamiento autónomo.
- `js/force.js`: Interfaz entre JS y la física WASM.
- `js/graph.js`: Gestión de grafos y lógica de reescritura.
- `js/bloom.js`: Efecto de post-procesamiento Bloom.
- `js/tree.js`: Implementación de octo-árbol en JS puro (mantenida como referencia).
- `lib/`: Dependencias externas (SwissGL, dat.gui).
- `index.html`: Visor de simulación interactivo.
- `alice.html`: Modo de arte generativo autónomo.

## 🤖 Asistencia en el Desarrollo con IA

Este proyecto fue desarrollado con la asistencia de **Gemini**, el cual ayudó en:
- Portear la lógica compleja de grafos y octo-árboles de JavaScript a WebAssembly (C) de alto rendimiento.
- Architectar y optimizar el algoritmo de Barnes-Hut de doble árbol para cálculos de fuerza $O(N \log N)$.
- Refactorizar la base de código en una arquitectura modular y reutilizable.

## 📄 Licencia

Este proyecto está licenciado bajo la **Licencia MIT**. Consulte el archivo `LICENSE` para más detalles.