blob: 0016b3199810f022a58b791fa5e2eae1708681d1 [file] [log] [blame]
library graphlib.layout.order.barycenter;
import "../../graph.dart" show Graph;
List<Map> barycenter(Graph g, Iterable movable) {
return movable.map((v) {
var inV = g.inEdges(v);
if (inV.length == 0) {
return { "v": v };
} else {
var result = { "sum": 0, "weight": 0 };
inV.forEach((e) {
Map edge = g.edgeObj(e),
nodeU = g.node(e.v);
var order = nodeU.containsKey("order") ? nodeU["order"] : 1;
result["sum"] += (edge["weight"] * order);
result["weight"] += edge["weight"];
});
return {
"v": v,
"barycenter": result["sum"] / result["weight"],
"weight": result["weight"]
};
}
}).toList();
}