示例#1
0
  private void addWave(EstimatedState pt1, EstimatedState pt2) {

    double amplitude = Math.abs(pt2.getAlt() - pt1.getAlt());
    double period = pt2.getTimestamp() - pt1.getTimestamp();

    if (period > 10 || period < 0.5) return;

    addValue(pt2.getTimestampMillis(), pt1.getSourceName() + ".amplitude", amplitude);
    addValue(pt2.getTimestampMillis(), pt1.getSourceName() + ".period", period);
    //
    System.out.println(
        "wave from "
            + pt1.getAlt()
            + " to "
            + pt2.getAlt()
            + " time: "
            + (pt2.getTimestamp() - pt1.getTimestamp()));
  }
  private void drawPath(
      Graphics2D g, double scaleX, double scaleY, double minX, double minY, double timeStep) {

    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    g.setTransform(new AffineTransform());
    g.setColor(new Color(0, 0, 0, 10));

    // IMraLog stateParser = logSource.getLog("EstimatedState");
    // IMCMessage stateEntry;

    LsfIterator<EstimatedState> iterator =
        logSource.getLsfIndex().getIterator(EstimatedState.class);
    if (timeStep > 0)
      iterator =
          logSource.getLsfIndex().getIterator(EstimatedState.class, (long) (timeStep * 1000));

    Point2D lastPt = null;
    EstimatedState state = iterator.next();

    if (state == null) {
      NeptusLog.pub().error("No estimatedstate messages in the log");
      return;
    }
    LocationType ref = IMCUtils.getLocation(state).convertToAbsoluteLatLonDepth();

    LinkedHashMap<Integer, Point2D> lastStates = new LinkedHashMap<>();

    while (state != null) {
      LocationType loc = IMCUtils.getLocation(state).convertToAbsoluteLatLonDepth();
      double[] offsets = loc.getOffsetFrom(ref);

      Point2D pt = new Point2D.Double((offsets[1] - minY) * scaleY, (-minX - offsets[0]) * scaleX);

      if (timeStep == 0) g.setColor(new Color(0, 0, 0, 20));
      else g.setColor(Color.black);

      lastPt = lastStates.get(state.getSrc());

      if (lastPt != null && pt != null) g.draw(new Line2D.Double(lastPt, pt));
      lastStates.put(state.getSrc(), pt);

      state = iterator.next();
    }
  }
示例#3
0
  @Override
  public void process(LsfIndex source) {
    LsfIterator<EstimatedState> it = index.getIterator(EstimatedState.class, 200);

    boolean ascending = false;
    EstimatedState lastMin = it.next();

    while (lastMin.getDepth() > 0.5 && it.hasNext() || lastMin.getVx() > 0.2) lastMin = it.next();

    EstimatedState lastMax = lastMin;
    if (lastMin == null || !it.hasNext()) return;
    ascending = it.next().getAlt() >= lastMin.getAlt();

    while (it.hasNext()) {
      EstimatedState state = it.next();
      if (state.getDepth() > 0.5 || state.getVx() > 0.2) continue;
      if (state.getAlt() == -1) continue;
      if (ascending) {
        if (state.getAlt() >= lastMax.getAlt()) lastMax = state;
        else {
          addWave(lastMin, lastMax);
          ascending = false;
          lastMin = lastMax;
        }
      } else {
        if (state.getAlt() <= lastMin.getAlt()) lastMin = state;
        else {
          addWave(lastMax, lastMin);
          ascending = true;
          lastMax = lastMin;
        }
      }
    }
  }