---
name: chord
kind: component
lang: cpp
domain: viz
version: "1.0.0"
purity: pure
signature: "void chord(const char* id, const float* matrix, int n, const char* const* labels, ImVec2 size)"
description: "Chord diagram para matrices NxN de relaciones. Arcos circulares proporcionales a sum(row) + bandas curvas internas (bezier cubico) entre arcos."
tags: [imgui, drawlist, chart, visualization, chord, matrix, relations, pendiente-usar]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: [imgui]
tested: false
tests: []
test_file_path: ""
file_path: "cpp/functions/viz/chord.cpp"
framework: imgui
params:
  - name: id
    desc: "Identificador unico para PushID"
  - name: matrix
    desc: "Array NxN row-major (matrix[i*n + j] = flujo de i a j)"
  - name: n
    desc: "Dimension de la matriz cuadrada"
  - name: labels
    desc: "Array de N etiquetas, una por entidad. Puede ser nullptr"
  - name: size
    desc: "Tamano del area cuadrada del chord. Default 400x400"
output: "Renderiza arcos en el borde y cuerdas curvas internas usando AddConvexPolyFilled + AddText"
notes: "scaffolding/demo en primitives_gallery"
---

# 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

```cpp
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);
```
