Advertisement
trishLEX

Calculation.java

Oct 24th, 2017
351
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.74 KB | None | 0 0
  1. package Algorithms;
  2.  
  3. import Graph.Graph;
  4. import Graph.Vertex;
  5. import Visualization.GraphVisualization;
  6.  
  7. import java.util.ArrayList;
  8.  
  9. public class Calculation {
  10.     private static final int START_INDEX = 0;
  11.  
  12.     private Graph graph;
  13.     private int type;
  14.     public static int WIDTH = GraphVisualization.WIDTH;
  15.     public static int HEIGHT = GraphVisualization.HEIGHT;
  16.  
  17.     public Calculation(Graph graph) {
  18.         this.graph = graph;
  19.     }
  20.  
  21.     private void dfs(Vertex v) {
  22.         v.setMark(1);
  23.  
  24.         for (Vertex u: v.getChild()) {
  25.             if (u.getMark() == 0) {
  26.                 u.setParent(v);         //устанавливаем родителя
  27.                 u.getChild().remove(v); //удаляем ссылку на родителя
  28.                 dfs(u);
  29.             }
  30.         }
  31.     }
  32.  
  33.     private void makeTree(Vertex v) {
  34.         v.setRoot(true);
  35.  
  36.         dfs(v);
  37.  
  38.         for (Vertex vert: graph.getVertices()) {
  39.             ArrayList<Vertex> temp = new ArrayList<>();
  40.             for (Vertex u: vert.getChild()) {
  41.                 if (u.getParent() == vert) {
  42.                     temp.add(u);
  43.                 }
  44.             }
  45.             vert.setChild(temp);
  46.         }
  47.     }
  48.  
  49.     public Graph calculateGraph(int type) {
  50.         this.type = type;
  51.  
  52.         if (type == 3) {
  53.             makeTree(graph.get(START_INDEX));
  54.             Algorithm3.useAlgorithm(graph);
  55.         }
  56.         //printGraph();
  57.         //System.out.println(graph);
  58.         if (type == 5) {
  59.             makeTree(graph.get(START_INDEX));
  60.              Algorithm5.useAlgorithm(graph);
  61.         }
  62.         //Algorithm3.useAlgorithm(graph);
  63.  
  64.         if (type == 1) {
  65.             makeTree(graph.get(START_INDEX));
  66.             Algorithm5.useAlgorithm(graph);
  67.             Algorithm1.useAlgorithm(graph);
  68.         }
  69.  
  70.         for (Vertex v: graph.getVertices()) {
  71.             System.out.println("COORDINATES " + v.getIndex() + " (" + v.getX() + "," + v.getY() + ") w = " + v.getWidth() + " h = " + v.getHeight());
  72.             System.out.println("            " + "sign: (" + v.getSign().getX() + "," + v.getSign().getY() + ") w = " + v.getSign().getWidth() + " h = " + v.getSign().getHeight());
  73.         }
  74.  
  75.         convertCoordinates(graph);
  76.  
  77.         return graph;
  78.     }
  79.  
  80.     private void convertCoordinates(Graph graph) {
  81.         calculateWidthAndHeight(graph);
  82.  
  83.         for (Vertex v: graph.getVertices()) {
  84.             double sx = v.getSign().getX();
  85.             double sy = v.getSign().getY();
  86.  
  87.             v.setX(v.getX() / WIDTH);
  88.             v.setY(v.getY() / HEIGHT);
  89.             v.setWidth(v.getWidth() / WIDTH);
  90.             v.setHeight(v.getHeight() / HEIGHT);
  91.  
  92.             //System.out.println("old " + v.getIndex() + " sign y = " + v.getSign().getY() + " height = " + HEIGHT + " y / height = " + (v.getSign().getY() / HEIGHT));
  93.             v.getSign().setX(sx / WIDTH);
  94.             v.getSign().setY(sy / HEIGHT);
  95.             v.getSign().setWidth(v.getSign().getWidth() / WIDTH);
  96.             v.getSign().setHeight(v.getSign().getHeight() / HEIGHT);
  97.  
  98.             System.out.println("CONVERTED COORDINATES " + v.getIndex() + " (" + v.getX() + "," + v.getY() + ") w = " + v.getWidth() + " h = " + v.getHeight());
  99.             System.out.println("            " + "sign: (" + v.getSign().getX() + "," + v.getSign().getY() + ") w = " + v.getSign().getWidth() + " h = " + v.getSign().getHeight());
  100.         }
  101.  
  102.         for (int i = 0; i < graph.getRadials().size(); i++) {
  103.             double r = graph.getRadials().get(i) / (WIDTH < HEIGHT? WIDTH : HEIGHT);
  104.             graph.getRadials().set(i, r);
  105.         }
  106.     }
  107.  
  108.     private void calculateWidthAndHeight(Graph graph) {
  109.         double up    = Double.NEGATIVE_INFINITY;
  110.         double down  = Double.POSITIVE_INFINITY;
  111.         double right = up;
  112.         double left  = down;
  113.  
  114.         for (Vertex v: graph.getVertices()) {
  115.             up = Math.max(v.getY() + v.getHeight() / 2, up);
  116.             down = Math.min(v.getSign().getY() - v.getSign().getHeight() / 2, down);
  117.             right = Math.max(v.getSign().getX() + v.getSign().getWidth() / 2, right);
  118.             left = Math.min(v.getSign().getX() - v.getSign().getWidth() / 2, left);
  119.         }
  120.  
  121.         double width  = right - left;
  122.         double height = up - down;
  123.  
  124.         System.out.println("width = " + width + " height = " + height + " right = " + right + " left = " + left + " up = " + up + " down = " + down);
  125.  
  126.         if (type == 3 && width < WIDTH && height < HEIGHT) {
  127.             if (right > WIDTH / 2)
  128.                 translateLeft(graph, right, left);
  129.             else if (left < - WIDTH / 2)
  130.                 translateRight(graph, left, right);
  131.             else if (up > HEIGHT / 2)
  132.                 translateDown(graph, up, down);
  133.             else if (down < - HEIGHT / 2)
  134.                 translateUp(graph, down, up);
  135.         }
  136.  
  137.         if (width > WIDTH || height > HEIGHT) {
  138.             double side = width > height? width : height;
  139.             WIDTH = HEIGHT = (int) side + 1;
  140.             System.out.println("HERE HERE HERE");
  141.         }
  142.     }
  143.  
  144.     private void translateLeft(Graph graph, double right, double left) {
  145.         double offset = 0.0;
  146.         while (right > WIDTH / 2 || left > - WIDTH / 2) {
  147.             right -= 5.0;
  148.             left -= 5.0;
  149.             offset -= 5.0;
  150.         }
  151.  
  152.         for (Vertex v: graph.getVertices()) {
  153.             v.setX(v.getX() + offset);
  154.         }
  155.     }
  156.  
  157.     private void translateRight(Graph graph, double left, double right) {
  158.         double offset = 0.0;
  159.         while (left < - WIDTH / 2 || right < WIDTH / 2) {
  160.             left += 5.0;
  161.             offset += 5.0;
  162.         }
  163.  
  164.         for (Vertex v: graph.getVertices()) {
  165.             v.setX(v.getX() + offset);
  166.         }
  167.     }
  168.  
  169.     private void translateDown(Graph graph, double up, double down) {
  170.         double offset = 0.0;
  171.         while (up > HEIGHT / 2 || down > - HEIGHT / 2) {
  172.             up -= 5.0;
  173.             offset -= 5.0;
  174.         }
  175.  
  176.         for (Vertex v: graph.getVertices()) {
  177.             v.setY(v.getY() + offset);
  178.         }
  179.     }
  180.  
  181.     private void translateUp(Graph graph, double down, double up) {
  182.         double offset = 0.0;
  183.         while (down < - HEIGHT / 2 || up < HEIGHT) {
  184.             down += 5.0;
  185.             offset += 5.0;
  186.         }
  187.  
  188.         for (Vertex v: graph.getVertices()) {
  189.             v.setY(v.getY() + offset);
  190.         }
  191.     }
  192.  
  193.     private void printGraph() {
  194.         for (Vertex v: graph.getVertices()) {
  195.             System.out.println("v = " + v.getIndex());
  196.             for (Vertex u: v.getChild()) {
  197.                 System.out.println("    childs = " + u.getIndex() + " " + (u.getParent() != null ? u.getParent().getIndex() : "null"));
  198.             }
  199.         }
  200.     }
  201. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement