public Vector2D getScaleFactor(List<GElementFAState> states) {
    double minX, minY, maxX, maxY;
    double scaleX, scaleY;
    Iterator<GElementFAState> iterator = states.iterator();
    if (iterator.hasNext()) {
      GElementFAState node = iterator.next();
      minX = node.getPositionX();
      maxX = minX;
      minY = node.getPositionY();
      maxY = minY;
      while (iterator.hasNext()) {
        node = iterator.next();
        if (node.getPositionX() < minX) {
          minX = node.getPositionX();
        } else if (node.getPositionX() > maxX) {
          maxX = node.getPositionX();
        }

        if (node.getPositionY() < minY) {
          minY = node.getPositionY();
        } else if (node.getPositionY() > maxY) {
          maxY = node.getPositionY();
        }
      }
      this.top = (int) minY;
      this.left = (int) minX;
      this.right = (int) maxX;
      this.bottom = (int) maxY;
      scaleX = ((maxX - minX) / 13);
      scaleY = ((maxY - minY) / 10);
    } else {
      scaleX = 100;
      scaleY = 100;
    }
    return new Vector2D(scaleX, scaleY);
  }
  /**
   * @param states - List of geometric nodes (GElementFAState) for all nodes in the FA
   * @param scale - Vector2D of X scale and Y scale factors
   * @return The string that contains all of the node declarations and positioning information
   */
  private String nodesToLatex(List<GElementFAState> states, Vector2D scale) {

    List<String> latexNodes = new LinkedList<String>();

    int i = 0;
    for (GElementFAState a : states) {
      String latexOneNode = "";

      String name = a.getState().name;
      String id = "q" + i;
      i += 1;

      FAState state = a.getState();

      latexOneNode += "\\node";

      if (state.isAccepted() && state.isStart()) {
        latexOneNode += " [state, initial, accepting]";
      } else if (state.isStart()) {
        latexOneNode += " [state, initial]";
      } else if (state.isAccepted()) {
        latexOneNode += " [state, accepting]";
      } else {
        latexOneNode += " [state]";
      }

      int x_pos = (int) ((a.getPositionX() - this.left) / scale.getX());
      int y_pos = (int) ((a.getPositionY() - this.top) / scale.getY());
      y_pos *= -1;
      latexOneNode += " (" + id + ")";
      latexOneNode += " at (" + x_pos + "," + y_pos + ")";
      latexOneNode += " {" + name + "};";

      latexNodes.add(latexOneNode);
    }

    String s = "";
    for (String a : latexNodes) s += a + "\n";
    return s;
  }