private ObjectId findClosestCenter(Viewport viewport, Map<ObjectId, GalaxySystem> systems) {
    double cx = viewport.getView().getCenterX();
    double cy = viewport.getView().getCenterY();
    double targetdist = Math.sqrt(cx * cx + cy * cy);
    double targetalpha = Math.atan2(cy, cx);

    ObjectId result = null;
    double distance = Double.MAX_VALUE;
    for (GalaxySystem system : systems.values()) {
      OrbitStatus status = system.getGalaxyOrbitStatus();
      double check =
          SpaceFunctionUtil.distanceBetweenTwoObjects(
              targetalpha, targetdist, status.getAlpha(), status.getDistance());
      if (distance > check) {
        distance = check;
        result = system.getId();
      }
    }
    return result;
  }
  private void initiateFocus(Viewport viewport, Map<ObjectId, GalaxySystem> systems) {
    GalaxySystem focuson = systems.get(focusid);
    OrbitStatus absoluteCenter = focuson.getGalaxyOrbitStatus();
    xoff = absoluteCenter.getCartesianX();
    yoff = absoluteCenter.getCartesianY();
    logger.debug(String.format("orbit status: %s", absoluteCenter));
    logger.debug(
        String.format(
            "orbit status: [x:%s, y:%s]",
            absoluteCenter.getCartesianX(), absoluteCenter.getCartesianY()));

    double xoffinit = absoluteCenter.getDistance() * Math.cos(absoluteCenter.getAlpha());
    double yoffinit = absoluteCenter.getDistance() * Math.sin(absoluteCenter.getAlpha());

    double largestdist = WindowFocusType.MULTI_SYSTEM.maxin * 1.1;

    double dy = viewport.getReal().getHeight();
    double dx = viewport.getReal().getWidth();

    Rectangle2D newview;
    if (dy < dx) {
      double ratio = (dx / dy);
      newview =
          new Rectangle2D.Double(
              xoffinit + largestdist * ratio * -1,
              yoffinit + largestdist * -1,
              largestdist * ratio * 2,
              largestdist * 2);
    } else {
      double ratio = (dy / dx);
      newview =
          new Rectangle2D.Double(
              xoffinit + largestdist * -1,
              yoffinit + largestdist * ratio * -1,
              largestdist * 2,
              largestdist * ratio * 2);
    }

    logger.info(String.format("setting new view to %s", newview));
    viewport.setView(newview);

    updateFocusingOn(viewport);
  }
  private void viewShiftUpdate(Viewport viewport, Map<ObjectId, GalaxySystem> systems) {
    GalaxySystem focus = systems.get(focusid);
    OrbitStatus absoluteCenter = focus.getGalaxyOrbitStatus();
    double xcheck = absoluteCenter.getCartesianX();
    double ycheck = absoluteCenter.getCartesianY();

    Rectangle2D view = viewport.getView();
    double xchange = xoff - xcheck;
    double ychange = yoff - ycheck;

    if (xchange != 0 || ychange != 0) {
      logger.debug(String.format("orbit status: %s", absoluteCenter));
      logger.debug(String.format("changing focus-> x:%s, y:%s", xchange, ychange));
      logger.debug(String.format("before: %s", view));
      view.setRect(view.getX() - xchange, view.getY() - ychange, view.getWidth(), view.getHeight());
      logger.debug(String.format("after : %s", view));
    }

    xoff = xcheck;
    yoff = ycheck;

    ObjectId newidcheck = findClosestCenter(viewport, systems);
    if (!newidcheck.equals(focusid)) {
      // if they are not equal, then we need to change
      // the focus id to the new one. but first we need
      // to reset the x and y offset to make sure the
      // view stays smooth.
      GalaxySystem newfocus = systems.get(newidcheck);
      OrbitStatus newcenter = newfocus.getGalaxyOrbitStatus();
      xoff = newcenter.getCartesianX();
      yoff = newcenter.getCartesianY();
      focusid = newidcheck;

      if (logger.isInfoEnabled()) {
        logger.info(String.format("new focus id set to %s", focusid));
      }
    }
  }