Files
fn_registry/cpp/functions/viz/chord.md
T
egutierrez 071aa71a04 feat(viz): chord diagram — arcos circulares + cuerdas bezier
Para una matriz NxN: cada nodo ocupa un arco proporcional a sum(row).
Las cuerdas matrix[i,j] son bandas bezier cubico hacia el centro
conectando los arcos de i y j.

Limitacion: las cuerdas se dibujan con AddConvexPolyFilled aunque la
forma no sea estrictamente convexa — visualmente queda razonable.
2026-04-25 21:52:43 +02:00

2.0 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
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
chord component cpp viz 1.0.0 pure void chord(const char* id, const float* matrix, int n, const char* const* labels, ImVec2 size) Chord diagram para matrices NxN de relaciones. Arcos circulares proporcionales a sum(row) + bandas curvas internas (bezier cubico) entre arcos.
imgui
drawlist
chart
visualization
chord
matrix
relations
false
imgui
false
cpp/functions/viz/chord.cpp imgui
name desc
id Identificador unico para PushID
name desc
matrix Array NxN row-major (matrix[i*n + j] = flujo de i a j)
name desc
n Dimension de la matriz cuadrada
name desc
labels Array de N etiquetas, una por entidad. Puede ser nullptr
name desc
size Tamano del area cuadrada del chord. Default 400x400
Renderiza arcos en el borde y cuerdas curvas internas usando AddConvexPolyFilled + AddText

chord

Chord diagram. Cada nodo ocupa un arco proporcional a la suma de su fila. Las cuerdas representan la magnitud de cada celda matrix[i,j] como bandas curvas (bezier cubico hacia el centro) que conectan el arco de i con el de j.

Limitaciones

  • Las cuerdas se dibujan con AddConvexPolyFilled aunque la forma no sea estrictamente convexa — en la practica el renderer ImGui las acepta y queda visualmente razonable.
  • Para matrices simetricas se dibuja matrix[i,j] y matrix[j,i] como cuerdas separadas que pueden solaparse. El caller puede pasar la matriz triangulada superior + 0s en la inferior si quiere una cuerda por par.
  • Sin interaccion ni tooltip.

Ejemplo

const int N = 4;
float M[N*N] = {
    0,  10,  6, 12,
    8,   0, 14,  3,
    4,  11,  0,  9,
    7,   5,  2,  0,
};
const char* labels[N] = {"AAA", "BBB", "CCC", "DDD"};
chord("##flows", M, N, labels);