抱歉,如果这非常简单,我已经尝试寻找解决方案。
在 D3 中,我可以通过定义这个来执行弧:
var ringBannerCcwArc = d3.svg.arc()
.innerRadius(420)
.outerRadius(470)
.startAngle(0)
.endAngle(function(t) {return t * -1 * 2 * Math.PI / 6; });
然后在此处的 DOM 中定义它:
labels.append("path")
.attr("id", "ring-banner");
然后在适当的时候我可以做:
labels.transition.select("#ring-banner").style("fill", "red")
.attrTween("d", function() { return ringBannerCcwArc });
这将产生一个红色的弧形“标签”,从 0 开始,在任何地方停止
t * -1 * 2 * Math.PI / 6
产生一个角度(是的,60度,但我打算让它成为一个可变的结果)。
我想做的只是在“endAngle”的半径上创建一条从这个横幅向外延伸的线(这样我就可以构建一个动态驱动的显示)。
像这样的图像:
我的目标是动态地将数据附加到它,并利用 D3 的惊人功能。因此,一旦我了解了如何绘制上述解决方案,我就想知道最终线 (x2,y2) 的结果坐标。线本身可以是一个设定的长度(例如,50),但我将如何确定它的位置以便我可以将最终区域附加到它?
像这样的图像:
再次,如果这看起来很明显,我深表歉意。谢谢你的帮助。
编辑: 最初的问题是关于我使用 D3 - 创建 ringBannerArc - 然后想要进入坐标系。因此,正如两位受访者所说,这是一个基本的三角问题,但这并不是真正的问题。
最后,答案是 d3 没有按照我的要求做。但它可以轻松执行解决方案。如果像我一样,您正在努力实现 d3 并理解它是非常独特(并且非常强大)的数据可视化方法,那么您可能会发现这些链接很有帮助。感谢d3 Google Group的伙计们。
有用的贡献者:
伊恩约翰逊: 首先你想知道如何从一个点到另一个点画一条线。这就是你想要的最终结果,如果你不能为任意行做到这一点,你就不能为你想要的行做到这一点。所以让我们从那里开始: http: //tributary.io/inlet/4229462/ 第二部分是计算你要绘制的圆上的点。但在您这样做之前,您应该进行设置,以便您可以轻松验证该点在哪里。所以让我们画出整个圆,然后画一个我们可以使用的点:http: //tributary.io/inlet/4229477/ 现在让我们尝试根据输入半径将该点放置在圆上的某个点上: http ://tributary.io/inlet/4229496/一旦我们可以控制那个点,我们就绕了一圈;)并移动这条线 http://tributary.io/inlet/4229500/
Chris Viau:用一个很好的辅助函数包裹起来:http: //jsfiddle.net/christopheviau/YPAYz/推荐一本 Scott Murray 为初学者写的好书:http: //ofps.oreilly.com/titles/9781449339739/index .html
Scott Murray:对 d3 作者撰写的白皮书进行了精彩的参考 - 对于我们这些喜欢了解具体细节的人:http: //vis.stanford.edu/files/2011-D3-InfoVis.pdf