package graphtea.library.algorithms.goperators;
import graphtea.graph.graph.Edge;
import graphtea.graph.graph.GPoint;
import graphtea.graph.graph.GraphModel;
import graphtea.graph.graph.Vertex;
import java.util.HashMap;
/**
* Created by rostam on 17.08.15.
* @author M. Ali Rostami
*/
public class GOpUtils {
public static GPoint center(GraphModel g) {
GPoint center = new GPoint(0,0);
for(Vertex v : g) {
center.add(v.getLocation());
}
center.multiply(1./g.numOfVertices());
return center;
}
public static HashMap<Integer,GPoint> offsetPositionsToCenter(GraphModel g) {
GPoint center = center(g);
HashMap<Integer,GPoint> offsets = new HashMap<>();
for(Vertex v : g.vertices()) {
offsets.put(v.getId(), GPoint.sub(v.getLocation(), center));
}
return offsets;
}
public static void addOffsets(GraphModel g, HashMap<Integer,GPoint> offsets, GPoint center) {
for(Integer gp : offsets.keySet()) {
GPoint pos = center;
pos.add(offsets.get(gp));
g.getVertex(gp).setLocation(pos);
}
}
public static GPoint midPoint(Edge e) {
GPoint mid = new GPoint(0,0);
mid.add(e.source.getLocation());
mid.add(e.target.getLocation());
mid.multiply(1./2.);
return mid;
}
}