D3和SVG的新问题,并且我正在越来越困惑为什么我的数学计算x,y坐标(围绕圆/钟面的SVG元素位置的计算)使用)旋转+电弧距离的角度...基本上:基于D3 + svg转换的旋转角度计算x/y坐标的混淆
我创建圆/钟面(包括翻译):
var face = d3.select(".chart").append("g") .attr("class", "clock-face") .attr('transform','translate(' + width/2 + ',' + (circleRadius + margin) + ')');
我追加一个 “G” 元件(包含数据+一些视觉材料)到钟面&施加旋转到各个数据点容器(基于线性标尺定位一圈元素):
var circleScale = d3.scale.linear() .range([0, data.length]) .domain([0, 60]); // data container var bar = face.selectAll('g') .data(data) .enter().append('g') .attr('transform', function(d, i) { return 'rotate(' + circleScale(i) + ')'; }) .each(function(d, i) { // set theta d.theta = circleScale(i); });
我想能够计算我的个人数据点容器的x/y坐标基于它的THETA(旋转角)值:
function calcPosition(centerX, centerY, radius, theta) { var coords = {}; var x = centerX + radius * Math.cos(theta); var y = centerX + radius * Math.sin(theta); coords.x = x; coords.y = y; return coords; }; var origin = calcPosition(0, 0, circleRadius, d.theta); face.append('circle') .attr('cx', origin.x) .attr('cy', origin.y) .attr('r', 5) .attr('fill', 'yellow')
然而,这将产生完全错误的x/y坐标。我相信我的trig在计算基于旋转角度的x/y坐标时是正确的,但是关于SVG转换的一些事情正在烦人......任何建议?
非常感谢!
'theta'在_degrees_或_radians_中? –
@PaulS。好问题...原来我有这样的圆比例:var circleScale = d3.scale.linear()。range([0,data.length])。domain([0,2 * Math.PI]); – vesperae
但这样做会产生奇怪的结果(不正确地映射到360度)......但是由于某种原因,将圆圈标尺更改为以下工作方式......我发现这可能是我的错误点。但我很困惑D3尺度:var circleScale = d3.scale.linear()。range([0,data.length])。domain([0,60]); – vesperae