Javascript 在弧中放置点

Javascript 在弧中放置点,javascript,svg,d3.js,circle-pack,Javascript,Svg,D3.js,Circle Pack,我有一个圆弧,目前属于该圆弧的点使用d3.layout.pack()来放置它们,但是这显然只将圆弧中的点放置在一个圆中 有没有一种方法可以让我把点放在一个弧中,以利用整个弧的空间(目前它只是将弧中心的点聚集成一个圆) 我试着弄乱填充物,但显然这不是我所需要的,因为它可以将圆点推出圆弧的边界 谢谢 标记 编辑-代码 该代码只是标准布局包代码。我想看看是否有一种方法可以把这些点“打包”成一个弧形 var pack = d3.layout.pack() .sort(null) .size([_conf

我有一个圆弧,目前属于该圆弧的点使用d3.layout.pack()来放置它们,但是这显然只将圆弧中的点放置在一个圆中

有没有一种方法可以让我把点放在一个弧中,以利用整个弧的空间(目前它只是将弧中心的点聚集成一个圆)

我试着弄乱填充物,但显然这不是我所需要的,因为它可以将圆点推出圆弧的边界

谢谢 标记

编辑-代码 该代码只是标准布局包代码。我想看看是否有一种方法可以把这些点“打包”成一个弧形

var pack = d3.layout.pack()
.sort(null)
.size([_config.RingWidth, _config.RingWidth])//config.RingWidth is the width of the arc
.value(function (d) {
  return 1 * Math.random();//the dots are all the same size
});
然后对点进行处理并使用包装

dots2 = new Array();
for (var clusterNum = 0; clusterNum < _hierarchy.Dots.dotsArray.length; clusterNum++) {
    dots2[clusterNum] = svg.selectAll(".node" + clusterNum)
      .data(pack.nodes(_hierarchy.Dots.dotsArray[clusterNum])
      .filter(function (d) {
         return !d.children;
}));
dots2=新数组();
对于(var clusterNum=0;clusterNum<\u hierarchy.Dots.dotsArray.length;clusterNum++){
dots2[clusterNum]=svg.selectAll(“.node”+clusterNum)
.data(pack.nodes(_hierarchy.Dots.dotsArray[clusterNum])
.过滤器(功能(d){
返回!d.儿童;
}));

上图是它当前的工作方式,下图是我希望它的工作方式。正如你在大弧线中看到的,它不能使用所有弧线,这看起来很奇怪,但我不知道如何实现这一点(我尝试填充包,但它超出了弧线的边界)


干杯

实现这一点的一种方法是线性变换1x1正方形,默认情况下,
d3.layout.pack
绘制气泡,如下所示:

实现这一目标的关键功能包括:

// Does the transformation from [(0,0), (0,1), (1,1), (1,0)] sqaure to an arc
// with the parameters [ (r0, theta0), (r0, theta1), (r1, theta1), (r1, theta0) ]
function transform_x(xy, r0, r1, theta0, theta1) {
    var x = xy.x, y = xy.y;
    return ((1 - x) * r0 + x * r1) * Math.sin((1 - y) * theta0 + y * theta1);
}

function transform_y(xy, r0, r1, theta0, theta1) {
    var x = xy.x, y = xy.y;
    return ((1 - x) * r0 + x * r1) * Math.cos((1 - y) * theta0 + y * theta1);
}

代码的工作演示如下:

我不清楚您想做什么。您是否有当前发生的事情和希望发生的事情的图片?如果您不介意非常规则的布局,您可以将圆弧区域划分为网格,并将点放置在网格点上。