function dc(tree, pts) {
const depth = new Int32Array(pts.length).fill(-1),
colorized = new Float32Array(pts.length).fill(NaN);
let recursion_count = 0;
function traverse(i) {
const j = tree.predecessor[i];
if (j < 0) {
colorized[i] = depth[i] = 0;
return;
} else if (depth[j] < 0) {
traverse(j);
recursion_count++;
}
depth[i] = depth[j] + 1;
colorized[i] =
colorized[j] +
Math.atan2(pts[i][1] - pts[j][1], pts[i][0] - pts[j][0]) / 2 ** depth[i];
}
for (let i = 0; i < colorized.length; i++) traverse(i);
return { depth, colorized, recursion_count };
}