barycenter.js 617 B

123456789101112131415161718192021222324252627
  1. import _ from 'lodash'
  2. function barycenter (g, movable) {
  3. return _.map(movable, function (v) {
  4. const inV = g.inEdges(v)
  5. if (!inV.length) {
  6. return { v: v }
  7. } else {
  8. const result = _.reduce(inV, function (acc, e) {
  9. const edge = g.edge(e)
  10. const nodeU = g.node(e.v)
  11. return {
  12. sum: acc.sum + (edge.weight * nodeU.order),
  13. weight: acc.weight + edge.weight
  14. }
  15. }, { sum: 0, weight: 0 })
  16. return {
  17. v: v,
  18. barycenter: result.sum / result.weight,
  19. weight: result.weight
  20. }
  21. }
  22. })
  23. }
  24. export default barycenter