Javascript D3.js静力布局不使用路径?

Javascript D3.js静力布局不使用路径?,javascript,d3.js,force-layout,Javascript,D3.js,Force Layout,我试图改变这个例子,使用路径而不是线,但它不工作。 Im尝试使用自己的勾号功能,如下所示: function tick() { link.attr("d", function(d) { var x1 = d.source.x, y1 = d.source.y, x2 = d.target.x, y2 = d.target.y,

我试图改变这个例子,使用路径而不是线,但它不工作。 Im尝试使用自己的勾号功能,如下所示:

function tick() {
            link.attr("d", function(d) {
            var x1 = d.source.x,
                y1 = d.source.y,
                x2 = d.target.x,
                y2 = d.target.y,
                dx = x2 - x1,
                dy = y2 - y1,
                dr = Math.sqrt(dx * dx + dy * dy),

                // z uzla do ineho uzla
                drx = dr,
                dry = dr,
                xRotation = 0,
                largeArc = 0,
                sweep = 1;

            //do sameho seba
            if ( x1 === x2 && y1 === y2 ) {
                xRotation = -45;
                largeArc = 1;
                drx = 30;
                dry = 30;
                x2 = x2 + 1;
                y2 = y2 + 1;
            }

            return "M" + x1 + "," + y1 + "A" + drx + "," + dry + " " + xRotation + "," + largeArc + "," + sweep + " " + x2 + "," + y2;
        });     
}
我不知道,若我遗漏了什么或者静力布局就是不能使用路径。 强制布局,路径正常工作(粗体显示):

simulation.tick()

将当前alpha增加(alphaTarget-alpha)×alphaDecay; 然后调用每个注册的力,传递新的alpha;然后 通过velocity×velocityDecay递减每个节点的速度;最后 按速度增加每个节点的位置

此方法不分派事件;事件仅由 模拟自动启动时的内部计时器 创建或调用simulation.restart。蜱的自然数量 开始模拟时,将显示⌈日志(alphaMin)/日志(1)- 字母衰减)⌉; 默认情况下,这是300

此方法可与仿真结合使用。停止计算 静力布局。对于大型图形,静态布局应为 在web worker中计算以避免冻结用户界面

因为它不分派事件,所以不会调用或使用tick函数。相反,只需更换线路并设置一次路径:


var svg=d3。选择(“svg”),
宽度=+svg.attr(“宽度”),
高度=+svg.attr(“高度”),
g=svg.append(“g”).attr(“transform”、“translate”(“+width/2+”,“+height/2+”));
var n=100,
节点=d3.范围(n).映射(函数(i){
返回{
索引:i
};
}),
links=d3.范围(n).映射(函数(i){
返回{
资料来源:我,
目标:(i+3)%n
};
});
var模拟=d3.forceSimulation(节点)
.力(“电荷”,d3.力人体().力(-80))
力(“链接”,d3。力链接(链接)。距离(20)。强度(1)。迭代次数(10))
.force(“x”,d3.forceX())
.force(“y”,d3.forceY())
.停止();
var load=svg.append(“文本”)
.attr(“dy”,“0.35em”)
.attr(“文本锚定”、“中间”)
.attr(“字体系列”、“无衬线”)
.attr(“字体大小”,10)
.text(“请稍等…”);
//使用超时允许首先加载页面的其余部分。
d3.超时(函数(){
加载。删除();
//看https://github.com/d3/d3-force/blob/master/README.md#simulation_tick
对于(var i=0,n=Math.ceil(Math.log(simulation.alphaMin())/Math.log(1-simulation.alphaDecay());i
Realy thx,我能再问你一件事吗?如何向每个圆圈添加文本?非静态强制布局只需创建var circle.append(“g”)然后append(“circle”)然后append(“text”)来添加文本,但这在这里不起作用。我的尝试在这里。当是圆和文本时,该文本是单独的元素而不是g元素的一部分element@Martin,请参阅更新问题的答案。和最新的小提琴。