javascript - 使用 d3/svg 绘制锯齿形圆

标签 javascript d3.js svg drawing

我想在 d3 中创建一个圆,绘制一个锯齿形圆。这不是一个很好的解释,所以我在绘图应用程序中画了这张图。

如果我可以控制折线的大小/数量,那就太好了(应该比我在这张图中画的更多,也许是 50 - 100 而不是 15 - 20)。

enter image description here 提前致谢!

最佳答案

对于该任务,我将使用 d3.lineRadial ,其中:

Constructs a new radial line generator with the default settings. A radial line generator is equivalent to the standard Cartesian line generator, except the x and y accessors are replaced with angle and radius accessors

这就是生成器的样子(对于下面演示中使用的数据结构,由数组组成):

const generator = d3.lineRadial()
    .angle(d => d[0])
    .radius(d => d[1])

考虑到演示数据可以更简单,只需:

const generator = d3.lineRadial();

这是一个演示:

const svg = d3.select("svg")
  .append("g")
  .attr("transform", "translate(100,50)");
const data = d3.range(51).map(d => [(Math.PI * 2) / (50 / d), d % 2 ? 40 : 50]);
const generator = d3.lineRadial()
const path = svg.append("path")
  .attr("d", d3.lineRadial()(data))
path {
  fill: none;
  stroke: black;
}
<script src="https://d3js.org/d3.v5.min.js"></script>
<svg></svg>

在此演示中,之字形的数量和圆圈的大小由数据控制。例如,更少的锯齿和更大的内半径和外半径之间的距离:

const svg = d3.select("svg")
  .append("g")
  .attr("transform", "translate(100,70)");
const data = d3.range(27).map(d => [(Math.PI * 2) / (26 / d), d % 2 ? 30 : 70]);
const generator = d3.lineRadial()
const path = svg.append("path")
  .attr("d", d3.lineRadial()(data))
path {
  fill: none;
  stroke: black;
}
<script src="https://d3js.org/d3.v5.min.js"></script>
<svg></svg>

PS:这不会创建 <circle>元素,显然永远不会有锯齿形,而是 <path>元素代替。

关于javascript - 使用 d3/svg 绘制锯齿形圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57815846/

相关文章:

javascript - 将第二个参数传递给自动采用第一个参数的函数

javascript - 如何使用 JQuery 停止然后启动/触发事件?

javascript - Dagre/D3 渲染较大尺寸的节点和边/箭头

jquery - 获取 D3 中数组的实际最大值

css - SVG 绘图不适用于 chrome

javascript - Google Apps 脚本中的成功处理程序从服务器函数接收到 null

javascript - 无法从 jquery 函数中访问 javascript 类

javascript - d3.js 带画笔的多折线图

svg - 将任意数据附加到 D3.js 中的对象

javascript - 缩小大值以使用 D3.js 显示它们