力布局中的d3动态曲线
d3 dynamic curved line in force layout
我想在像这个cytoscape例子这样的力布局中为线创建一个动态bezier曲线,在d3中可能吗?参见这个d3示例,但使用arc。我不知道算法,有人知道吗?
我看到了cytoscape库,使用该算法可以实现
function tick() {
path.attr("d", function (d) {
var coordinatesP = findEdgeControlPoints(d);
return "M" + d.source.x + "," + d.source.y + "S" + coordinatesP.xp + "," + coordinatesP.yp + " " + d.target.x + "," + d.target.y;
});
hashTable = {};
nodes.attr("cx", function (d) { return d.x; })
.attr("cy", function (d) { return d.y; });
}
var findEdgeControlPoints = function (d) {
var midPointX = (d.source.x + d.target.x) / 2;
var midPointY = (d.source.y + d.target.y) / 2;
var displacementX, displacementY;
displacementX = d.target.y - d.source.y;
displacementY = d.source.x - d.target.x;
var displacementLength = Math.sqrt(displacementX * displacementX + displacementY * displacementY);
displacementX /= displacementLength;
displacementY /= displacementLength;
var distanceFromMidpoint = findPathDeltaControlPoint(d);
var xp = midPointX + displacementX * distanceFromMidpoint;
var yp = midPointY + displacementY * distanceFromMidpoint;
return {xp : xp, yp : yp};
};
var findPathDeltaControlPoint = function (edge) {
/*caso statico il primo al centro e tutti gli altri ai lati*/
/*conto le occorrenze */
var pairId,
delta,
TICK = 20;
pairId = edge.source.id > edge.target.id ?
edge.target.id + '-' + edge.source.id :
edge.source.id + '-' + edge.target.id;
if (hashTable[pairId] == undefined) {
hashTable[pairId] = [];
}
if (edge[pairId] == undefined) {
edge[pairId] = [];
}
if (edge[pairId].length == 0) {
edge[pairId].push(pairId);
}
hashTable[pairId].push(edge);
// Ceck if is the first occurence
var pairIdOccurence = hashTable[pairId].length;
if (pairIdOccurence == 1) {
delta = 0;
} else if (pairIdOccurence > 1) {
// Check if is equal
if (pairIdOccurence % 2 == 0) {
delta = (TICK * pairIdOccurence) / 2;
} else {
delta = -((TICK * (pairIdOccurence - 1)) / 2);
}
}
return delta;
};
相关文章:
- 无法从 jQuery RSS Feed 中的 localStorage 动态替换类
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 动态分配GA增强型电子商务跟踪器
- onkeyup无法动态创建多个文本区域
- 使用javascript将动态表从一个html页面打印到另一个html页
- 如何使Javascript动态html表及其上的事件
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 如何使用javascript从主svg对象动态创建svg视图框
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- 通过在Dojo mobile ViewController.openExternalView中动态更改打开同一外部视图的
- 如何在Google柱状图中动态添加行/列
- 困在逻辑中试图定位动态的东西
- 在动态创建的元素上获取对特定选择器的引用
- 如何动态插入jquery代码
- 数据库中的动态样条曲线高图
- 力布局中的d3动态曲线
- 如何使用bezierCurveTo动态绘制曲线
- 动态创建贝塞尔曲线
- 如何绘制可由滑块控制的动态曲线