我在 D3.js 中有一个力导向图,其中节点半径与该数据的属性(例如,页面浏览量)成正比,链接宽度与链接数据的属性(例如,点击)成正比。我想给链接曲线一个方向指示器。问题是链接会到达数据节点的中心marker-end
,所以如果我使用,我会得到:
(数据节点通常填充有链接到另一个数据类别的颜色......)
我使用以下方法创建 ~~arcs~~ 曲线:
positionLink = (d) => {
const offset = 100;
const midpoint_x = (d.source.x + d.target.x) / 2;
const midpoint_y = (d.source.y + d.target.y) / 2;
const dx = d.source.x - d.target.x;
const dy = d.source.y - d.target.y;
// Perpendicular vector
const nx = -dy;
const ny = dx;
const norm_length = Math.sqrt((nx*nx)+(ny*ny));
const normx = nx / norm_length;
const normy = ny / norm_length;
const offset_x = parseFloat(midpoint_x + offset * normx.toFixed(2));
const offset_y = parseFloat(midpoint_y + offset * normy.toFixed(2));
const arc = `M ${d.source.x.toFixed(2)} ${d.source.y.toFixed(2)} S ${offset_x} ${offset_y} ${d.target.x.toFixed(2)} ${d.target.y.toFixed(2)}`;
return arc;
};
我的代码调用的arc是 SVG“S”路径,这是一个“平滑曲线”,但我并不特别喜欢它:我只需要将弧线彼此拉开,这样我就可以显示数据之间的差异在一个方向和另一个方向。
如何找到贝塞尔曲线与圆的交点?
(由于曲线的目标是圆心,我想这可以改写为“贝塞尔曲线距r其终点的距离的值”)
如果我有那个点,我可以把它变成箭头的顶点。
(更好的是,如果我在那个点上有贝塞尔曲线的斜率,这样我就可以真正对齐它,但我认为我可以通过将它对齐到中点和锚点之间的线来摆脱......)
梵蒂冈之花
相关分类