Public
Edited
Jul 30, 2024
1 star
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
positions = {
return dodgeHorizontal(ax, aw, bx, bw, pad);
if (ax < bx) return dodgeHorizontal(ax, aw, bx, bw, pad)
return dodgeHorizontal(bx, aw, ax, bw, pad)
}
Insert cell
function dodgeHorizontal(ax, aw, bx, bw, pad) {
const delta = bx - ax;
const space = delta - 0.5 * (aw + bw) - pad;

let a = ax - aw / 2;
let b = bx - bw / 2;

if (delta < 0) {
throw new Error("a must be to the left of b");
}
if (space < 0) {
if (delta < pad) {
a = ax - aw;
b = bx;
}
else if (aw >= bw) {
const aExtra = Math.max(0, Math.min(-space, (aw - bw) / 2));
const abExtra = Math.max(0, -space - aExtra);
a -= aExtra + abExtra / 2;
b += abExtra / 2;
}
else {
const bExtra = Math.max(0, Math.min(-space, (bw - aw) / 2));
const baExtra = Math.max(0, -space - bExtra);
a -= baExtra / 2;
b += bExtra + baExtra / 2;
}
}

return {a, b}
}
Insert cell
import { getCurrentPinnedName } from '@bryangingechen/version-pinning-for-notebooks@469'
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more