在d3中没有内置的路径生成器可以做到这一点 - 不过你可以使用我为swoopy-drag编写的路径生成器:
//convert 3 points to an Arc Path
function calcCirclePath(start, end, mid) {
const A = dist(end, mid);
const B = dist(mid, start);
const C = dist(start, end);
const angle = Math.acos((A * A + B * B - C * C) / (2 * A * B));
//calc radius of circle
const K = .5 * A * B * Math.sin(angle);
let r = A * B * C / 4 / K;
r = Math.round(r * 1000) / 1000;
//large arc flag
const laf = +(Math.PI / 2 > angle);
//sweep flag
const saf = +((end[0] - start[0]) * (mid[1] - start[1]) - (end[1] - start[1]) * (mid[0] - start[0]) < 0);
return ['M', start, 'A', r, r, 0, laf, saf, end].join(' ');
}
function dist(a, b) {
return Math.sqrt(
Math.pow(a[0] - b[0], 2) +
Math.pow(a[1] - b[1], 2)
);
}
K
和4
(A*B*C/4/K
)是什么意思? - doox911
d3
无关,但是这可能是您要寻找的内容... - Mark