以下函数在某些弧的中间绘制小圆圈。我想从这些圆圈中绘制线条到其他元素。
这就是为什么我需要获得圆圈的cx / cy值(旋转后)。
var drawSmallCircles = function(arcs){
var d=arcs;
var arcRadius=d[0].outer;
var svg = d3.select("svg").append("g")
.attr("transform", "translate(" + width / 4 + "," + height / 2 + ")");
var smallCircles = svg.selectAll("circle").data(d).enter().append("circle")
.attr("fill","black")
.attr("cx",0)
.attr("cy",-arcRadius)
.attr("r",4)
.attr("transform", function(d) {
return "rotate(" + (((d.startAngle+d.endAngle)/2) * (180/Math.PI)) + ")";
});
}
如果有人可以向我展示一个获得Arc-Radius和Angle并返回(cx / cy)的函数,那将是最好的。我会预先计算并存储(cx / cy)" arcs-objects"并从这些值中绘制圆圈和线条。
"翻译"转型不是我真正的问题。
谢谢!
答案 0 :(得分:0)
在这种情况下,您的第一个转换将应用于g
元素,其中包含circle
元素,该元素具有cy
属性和旋转变换。
第一个变换设置组的原点,第二个变换围绕原点旋转距离cy
。由于您的cy
属性为负数,因此相对于原点的y位置将由-r*Math.cos(theta)
给出,而x位置将由r*Math.sin(theta)
给出,其中theta
是弧度的旋转角度,r
是从变换的原点到圆的中心的径向距离(代码中为arcRadius
)。
答案 1 :(得分:0)
我的一位朋友帮我做了以下计算:
new_x= ( width/4
+Math.cos((d.startAngle+d.endAngle)/2 ) * (0 )
-Math.sin((d.startAngle+d.endAngle)/2 ) * (-arcRadius) );
new_y= ( height/2
+Math.sin((d.startAngle+d.endAngle)/2 ) * (0 )
+Math.cos((d.startAngle+d.endAngle)/2 ) * (-arcRadius) );