Files
fn_registry/cpp/functions/viz/contour.h
T
egutierrez 0b6b984dd3 feat(viz): contour plot via marching squares — layout puro + render
contour_compute implementa marching squares clasico (16 casos, casos
ambiguos 5 y 10 partidos en 2 segmentos). Para cada level devuelve un
ContourLine{pts, level} con segmentos en coords [0..nx-1]x[0..ny-1].

Verificado con gaussiana 32x32 + 4 niveles: todos los endpoints aparecen
>=2 veces (curvas cerradas, ningun endpoint huerfano).
2026-04-25 21:52:48 +02:00

30 lines
1.1 KiB
C++

#pragma once
// Contour plot 2D via marching squares.
// Layout puro (contour_compute) separado del render (contour).
#include "imgui.h"
#include <vector>
struct ContourLine {
std::vector<ImVec2> pts; // segmentos: pts[2k], pts[2k+1] forman un segmento
float level;
};
// Marching squares clasico (16 casos). Para cada nivel, devuelve un ContourLine
// con los segmentos en coords [0..nx-1] x [0..ny-1] del grid (no escaladas).
std::vector<ContourLine> contour_compute(const float* grid,
int nx,
int ny,
const float* levels,
int n_levels);
// Render. size.x <= 0 => ancho disponible. Escala los segmentos a la region dada.
void contour(const char* id,
const float* grid,
int nx,
int ny,
const float* levels,
int n_levels,
ImVec2 size = ImVec2(-1.0f, 300.0f));