958189227d
Auditoria del issue 0044: anota en notes: el contexto de consumo de
huerfanos que no pueden registrarse en uses_functions porque sus
consumidores no son funciones del registry:
- consumido por cpp/framework/app_base.cpp (framework no indexado)
- consumido por cpp/apps/{shaders_lab,chart_demo,text_editor_smoke}/main.cpp
- scaffolding/demo en primitives_gallery
31 huerfanas anotadas. Las que quedan en uses_functions=[] tras esto
son hojas legitimas (no llaman a nada) o realmente sin uso (lista
DEAD reportada en el issue 0044).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
58 lines
2.0 KiB
Markdown
58 lines
2.0 KiB
Markdown
---
|
|
name: voronoi
|
|
kind: component
|
|
lang: cpp
|
|
domain: viz
|
|
version: "1.0.0"
|
|
purity: pure
|
|
signature: "void voronoi(const char* id, const ImVec2* seeds, int n, const ImU32* colors, ImVec2 size)"
|
|
description: "Diagrama de Voronoi via raster brute-force (MVP). Para cada tile 4x4 px encontrar seed mas cercano y rellenar con su color."
|
|
tags: [imgui, drawlist, chart, visualization, voronoi, raster]
|
|
uses_functions: []
|
|
uses_types: []
|
|
returns: []
|
|
returns_optional: false
|
|
error_type: ""
|
|
imports: [imgui]
|
|
tested: false
|
|
tests: []
|
|
test_file_path: ""
|
|
file_path: "cpp/functions/viz/voronoi.cpp"
|
|
framework: imgui
|
|
params:
|
|
- name: id
|
|
desc: "Identificador unico para PushID"
|
|
- name: seeds
|
|
desc: "Array de N posiciones (en coords locales del rect, [0..W]x[0..H])"
|
|
- name: n
|
|
desc: "Numero de seeds"
|
|
- name: colors
|
|
desc: "Array de N colores ImU32 (uno por seed). Si nullptr, usa color default"
|
|
- name: size
|
|
desc: "Tamano del area Voronoi. x <= 0 usa el ancho disponible"
|
|
output: "Renderiza la teselacion de Voronoi como mosaico de tiles 4x4 px coloreados + seeds visibles como circulos blancos sobre negros"
|
|
notes: "scaffolding/demo en primitives_gallery"
|
|
---
|
|
|
|
# voronoi
|
|
|
|
Voronoi diagram MVP via raster brute-force. Para cada tile de 4x4 pixeles del rect de render, calcula el seed mas cercano por distancia Euclidea y rellena el tile con el color de ese seed.
|
|
|
|
## Limitaciones MVP
|
|
|
|
- **No genera poligonos analiticos** — `voronoi_layout` deja `polygon` vacio. Para extraer poligonos seria necesario half-plane intersections (Fortune's algorithm) — ver issue futuro.
|
|
- **Tile 4x4 px**: las fronteras son escalonadas. Si se requiere precision sub-pixel, reducir el tile (cuesta O(1/tile^2) en tiempo).
|
|
- **Performance**: O(W * H * N / tile^2). Para N <= 200 y region 500x500 es < 1ms.
|
|
|
|
## Ejemplo
|
|
|
|
```cpp
|
|
ImVec2 seeds[30];
|
|
ImU32 colors[30];
|
|
for (int i = 0; i < 30; i++) {
|
|
seeds[i] = ImVec2(rand_float() * W, rand_float() * H);
|
|
colors[i] = IM_COL32(rand() & 255, rand() & 255, rand() & 255, 230);
|
|
}
|
|
voronoi("##v", seeds, 30, colors, ImVec2(-1, 300));
|
|
```
|