如何计算(SVG) X/Y坐标的平移和旋转(在JS/D3.js)
How to calculate (SVG) X/Y coordinates out of translation and rotation (in JS/D3.js)?
下面的函数在一些圆弧的中间绘制小圆。我想在这些圆和其他元素之间画直线。
这就是为什么我需要得到圆圈的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)) + ")";
});
}
如果有人能告诉我一个函数,得到弧半径和角度,并返回(cx/cy)最好。我会在"arcs-objects"中预先计算并存储(cx/cy),并根据这些值绘制圆和线。
"translate"转换并不是我真正的问题。
谢谢!
我的一个朋友帮我做了以下计算:
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) );
在这种情况下,您的第一个变换应用于g
元素,它包含一个具有cy
属性和旋转变换的circle
元素。
第一次变换设置你的组的原点,第二次变换以cy
的距离围绕原点旋转圆。由于您的cy
属性是负的,相对于原点的y位置将由-r*Math.cos(theta)
给出,而x位置将由r*Math.sin(theta)
给出,其中theta
是以弧度为单位的旋转角度,r
是从转换后的原点到圆中心的径向距离(在您的代码中为arcRadius
)。
相关文章:
- D3围绕饼图旋转文本
- 如何在D3中获得可缩放Icicle布局中文本标签的旋转
- 使用D3.js旋转外部SVG文件
- D3.js-围绕一个点旋转svg文本
- 将 d3.parset 可视化效果旋转 90 度(使可视化效果变为水平而不是垂直)
- d3 - 旋转数组中的文本元素
- 不要在 d3.js 中旋转径向树布局中的节点
- 如何围绕焦点旋转 d3.js 节点
- D3 旋转文本 :在 Chrome 中平滑
- 围绕其中心 d3 旋转 svg 路径
- 如何计算d3.js卫星投影的投影旋转和网格扩展
- 用光标拖动使d3.js数据图旋转
- 在D3图中绕轴旋转rect
- D3旋转地球仪:如何旋转网格
- 如何计算(SVG) X/Y坐标的平移和旋转(在JS/D3.js)
- 旋转SVG文本围绕一个圆圈,然后围绕自己使用d3
- 如何使用d3.js记录变换中的旋转属性
- D3轴标签旋转过渡不顺畅
- D3.js旋转27度雷达
- D3 js正字法标记旋转