javascript - D3 一条线的中心点(不是路径)

标签 javascript d3.js svg

这里和 D3 网站上有几个关于如何沿着 path 找到中心点(或任何点)的问题,但是我似乎找不到如何做它带有

我做了一个simple jsfiddle这里。本质上,我需要在一条线上的一个点上添加一个形状(使用 jsfiddle 中的文本使其更清晰)(为简单起见,我们说中间)

所以我有一个 svg:

var canvas = d3.select('body').append('svg').attr('width', 500).attr('height', 500);

并添加一行(位置固定,不来自数据)

var line = canvas.append('line').attr('x1', 50).attr('y1', 50).attr('x2', 250).attr('y2' , 150);

我添加一些文本只是为了演示到该行的顶部和底部

canvas.append('text').attr('x', line.attr('x1')).attr('y', line.attr('y1')).text('top');
canvas.append('text').attr('x', line.attr('x2')).attr('y', line.attr('y2')).text('bottom');

path 有获取中心点和宽度/BBox 等的方法,但 line 似乎没有。

有人知道如何实现吗?

不过,我最初的想法只是获取 x1/x2 值之间的差异,如下所示:

canvas.append('text')
  .attr('x', parseInt(line.attr('x2') - line.attr('x1')))
  .attr('y', parseInt(line.attr('y2') - line.attr('y1')))
  .text('just looks a bit off');

但是正如您将从 jsfiddle 中看到的那样,它只是以某种方式关闭。

有人想指出我的错误吗?

最佳答案

我猜,这会起作用:

var lineData = {x1: 50, y1: 50, x2: 250, y2: 150};
var canvas = d3.select('body').append('svg').attr('width', 500).attr('height', 500);
var line = canvas.append('line').attr('x1', lineData.x1).attr('y1', lineData.y1).attr('x2', lineData.x2).attr('y2', lineData.y2);
console.log(line);

var x = lineData.x1 + Math.abs(lineData.x2 - lineData.x1) / 2;
var y = lineData.y1 + Math.abs(lineData.y2 - lineData.y1) / 2;
console.log([x,y]);

canvas.append('text').attr('x', x).attr('y', y).text('X');

关于javascript - D3 一条线的中心点(不是路径),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31674438/

相关文章:

javascript - Y 轴旋转错误

java - 使用 Java 从网站下载 SVG 图像

css - 如何将线性渐变应用于 <use> 标签中的 SVG <symbol>?

javascript - 是否有针对 Javascript 的文本 API 的言论自由?

javascript - 仅显示美国完整县 map 中的一个州及其县

javascript - JavaScript 中的多线程或异步代码如何工作?

javascript - 如何在 d3.js 中更新图表图例?

html - 内联 SVG 的重复(过滤)ID

php - 将 PHP 插入外部 .js 文件

javascript - 为什么node_modules在构建后不断从docker中消失?