【发布时间】:2017-06-02 17:06:58
【问题描述】:
我正在制作带有两个圆圈的 d3 视觉效果,其中较小的圆圈位于较大圆圈的半径边缘。这个代码笔位于https://codepen.io/ajblack/pen/KqKpde。我有一个 200 像素的方形 SVG,我将这些圆圈放入其中,然后我有两个值,uAssets 和 uAssetsCom,它们指示圆圈的大小。我使用以下代码创建了一个比率以确保较大的圆圈适合 200 像素的正方形:
var ratioToFit = (200/uAssets)/2;
然后我用余弦计算大圆的外半径与SVG容器外边界45度角的距离:
var key = 100*((1-Math.cos(45*Math.PI/180))/Math.cos(45*Math.PI/180))
为了放置较小的圆,我将cx 和cy 属性计算为内圆的半径加上这个“键”。
d3.select("#uAssetComCircle")
.attr("cx", function(d){return (d.radius+key);})
.attr("cy", function(d){return (d.radius+key);})
这会使内圆靠近大圆的半径,但距离大约 2 个像素。我可以通过在cx 和cy 之外添加硬编码的 2 像素来抵消这一点,但我觉得我不应该这样做。
我的数学有问题吗?
【问题讨论】:
-
我相信错误出在“关键”计算中。我没有准确追踪它,但尝试将角度从 45 度更改为 60 度,您会发现它并没有达到您想要的效果
标签: javascript d3.js svg