我想在d3中创建一个半圈.使用基数插值产生的路径接近我想要的路径,但不够"圆形".如何编写自己的插补器以更好地围绕这条路径,还是有更好的方法?
这是我到目前为止:http://jsfiddle.net/Wexcode/jEfsh/
<svg width="300" height="500">
<g id="g-1"></g>
<g id="g-2"></g>
</svg>?
Run Code Online (Sandbox Code Playgroud)
JS:
var curved = d3.svg.line()
.x(function(d) { return d.x; })
.y(function(d) { return d.y; })
.interpolate("cardinal")
.tension(0);
var straight = d3.svg.line()
.x(function(d) { return d.x; })
.y(function(d) { return d.y; })
.interpolate("linear")
.tension(0);
var points = [{x: 70, y: 52.5}, {x: 250, y: 250}, {x: 70, y: 447.5}];
d3.select("#g-1").append("path").attr("d", curved(points));
d3.select("#g-2").append("path").attr("d", straight(points));
Run Code Online (Sandbox Code Playgroud)
请参阅:如何计算圆弧的SVG路径(圆形)
使用d3.arc()创建曲线的问题在于它将两条线叠在一起.请参阅:https://stackoverflow.com/a/11595157/522877
d3.svg.line.radial() 在创建弧和圆时,它具有更强的控制能力.
以下是如何创建圆圈的示例:http://jsfiddle.net/Wexcode/CrDUy/
var radius = 100,
padding = 10,
radians = 2 * Math.PI;
var dimension = (2 * radius) + (2 * padding),
points = 50;
var angle = d3.scale.linear()
.domain([0, points-1])
.range([0, radians]);
var line = d3.svg.line.radial()
.interpolate("basis")
.tension(0)
.radius(radius)
.angle(function(d, i) { return angle(i); });
var svg = d3.select("body").append("svg")
.attr("width", dimension)
.attr("height", dimension)
.append("g");
svg.append("path").datum(d3.range(points))
.attr("class", "line")
.attr("d", line)
.attr("transform", "translate(" + (radius + padding) + ", " + (radius + padding) + ")");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10826 次 |
| 最近记录: |