int edgecount = 0;
LinkedList <Edge> visited = new LinkedList <Edge>();
for (int i = 0; i < edges.size(); i++/**Edge edge1 : edges**/) {
Edge edge1 = edges.get(i);
edgecount ++;
GraphBox sourceE1 = boxes.get(edge1.getSource());
GraphBox targetE1 = boxes.get(edge1.getTarget());
// edge 1 is vertical
if((targetE1.getX() == sourceE1.getX())) {
crossCounter = infinitSlope(edge1, edges, graph);
}
else {
double m1 = ((double)targetE1.getY() - (double)sourceE1.getY())/((double)targetE1.getX() - (double)sourceE1.getX()); // slope of line 1
double b1 = (targetE1.getY()) - (m1 * targetE1.getX()); // slope of line 1
for (int j = 0; j < edges.size(); j++/**Edge edge2 : edges**/) {
Edge edge2 = edges.get(j);
if ((!edge2.equals(edge1)) && (!visited.contains(edge2)) && (m1 != 0.0)){
GraphBox sourceE2 = boxes.get(edge2.getSource());
GraphBox targetE2 = boxes.get(edge2.getTarget());
// edge 2 is vertical
if(targetE2.getX() == sourceE2.getX() ) {
crossCounter += infinitSlope(edge2, edge1, graph);
} else {
double m2 = ((double)targetE2.getY() - (double)sourceE2.getY())/((double)targetE2.getX() - (double)sourceE2.getX()); // slope of line 2
double b2 = (targetE2.getY()) - (m2 * targetE2.getX()); // crossing with y-axis of line 2
double x = ((b2-b1)/(m1-m2)); double y = ((m1*x) + b1); // cross-point-coordinates of the 2 lines
double maxXe1 = Math.max(sourceE1.getX(), targetE1.getX()); double maxXe2 = Math.max(sourceE2.getX(), targetE2.getX());
double minXe1 = Math.min(sourceE1.getX(), targetE1.getX()); double minXe2 = Math.min(sourceE2.getX(), targetE2.getX());
double maxYe1 = Math.max(sourceE1.getY(), targetE1.getY()); double maxYe2 = Math.max(sourceE2.getY(), targetE2.getY());
double minYe1 = Math.min(sourceE1.getY(), targetE1.getY()); double minYe2 = Math.min(sourceE2.getY(), targetE2.getY());
// test if cross-point is part of edge 1
if ((x < maxXe1) && (x > minXe1) && (y < maxYe1) && (y > minYe1)) {
if ((x < maxXe2) && (x > minXe2) && (y < maxYe2) && (y > minYe2)) {