Files
fn_registry/cpp/functions/viz/contour.md
T
egutierrez 47fac22230 chore: auto-commit (799 archivos)
- .claude/CLAUDE.md
- .claude/commands/subagentes.md
- .claude/rules/INDEX.md
- .mcp.json
- bash/functions/cybersecurity/analyze_dns.md
- bash/functions/cybersecurity/audit_http_headers.md
- bash/functions/cybersecurity/audit_ssh_config.md
- bash/functions/cybersecurity/check_firewall.md
- bash/functions/cybersecurity/detect_suspicious_users.md
- bash/functions/cybersecurity/encrypt_file.md
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 00:28:20 +02:00

2.3 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path, framework, params, output, notes
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports tested tests test_file_path file_path framework params output notes
contour component cpp viz 1.0.0 pure void contour(const char* id, const float* grid, int nx, int ny, const float* levels, int n_levels, ImVec2 size) Contour plot 2D usando marching squares clasico (16 casos) con interpolacion lineal entre celdas. Layout puro separado del render.
imgui
drawlist
chart
visualization
contour
marching-squares
scalar-field
pendiente-usar
false
imgui
false
cpp/functions/viz/contour.cpp imgui
name desc
id Identificador unico para PushID
name desc
grid Grid 2D row-major (grid[y*nx + x])
name desc
nx Numero de columnas del grid
name desc
ny Numero de filas del grid
name desc
levels Array de niveles a contornear
name desc
n_levels Cantidad de niveles
name desc
size Tamano del rect de render. x <= 0 usa el ancho disponible
Renderiza los contornos como segmentos de linea (AddLine) con color por nivel (gradiente azul->amarillo) scaffolding/demo en primitives_gallery

contour

Marching squares clasico para contornos isovaluados de un grid 2D escalar.

contour_compute es pura: para cada nivel devuelve un ContourLine{pts, level} donde pts es una secuencia de pares (cada par es un segmento). Los puntos estan en coords [0..nx-1] x [0..ny-1] del grid — el render escala a la region.

Casos ambiguos 5 y 10 se resuelven con dos segmentos (sin desambiguar por el centro). Para campos suaves (gaussianas, etc.) este caso es raro.

Validacion

Para una gaussiana 2D (cumbre en el centro) con varios niveles, los contornos resultantes son anillos cerrados aproximadamente concentricos. Si las isolineas de una gaussiana no se cierran, es un bug del algoritmo.

Ejemplo

constexpr int N = 32;
float grid[N*N];
for (int y = 0; y < N; y++)
    for (int x = 0; x < N; x++) {
        float dx = x - N/2.0f, dy = y - N/2.0f;
        grid[y*N + x] = std::exp(-(dx*dx + dy*dy) / 80.0f);
    }
float levels[] = {0.1f, 0.3f, 0.5f, 0.7f, 0.9f};
contour("##gauss", grid, N, N, levels, 5, ImVec2(-1, 300));