/**
   * Methode analysiert die Grundrissebenen und verwendet deren Normalenvektoren, um zu bestimmen,
   * welcher Koordinatenebene deren Ausrichtungen am naechsten kommen, indem die Komponente mit dem
   * groessten absoluten Wert des Normalenvektors ermittelt wird. Diese wird zurueckgereicht
   *
   * @param bucket Bucket mit Grundrissen, die innerhalb der Methode gemerged werden
   * @return Achse, die fuer eine Projektion ignoriert werden koennte
   */
  private Axis findRelevantComponent(FootprintBucket bucket) {

    Footprint currentFootprint = null;
    MyVector3f planeNormal = null;
    List<Footprint> footprints = bucket.getFootprints();
    Iterator<Footprint> footprintIter = footprints.iterator();
    Axis relevantComponent = Axis.UNKNOWN;
    Axis resultComponent = Axis.UNKNOWN;
    while (footprintIter.hasNext()) {
      currentFootprint = footprintIter.next();

      // hole die Normale und suche eine Komponente mit Wert 0
      planeNormal = currentFootprint.getFootprintPoly().getNormal();

      // bestimme die Koordinatenkomponente mit dem groessten absoluten
      // Wert
      relevantComponent = mMathHelper.getIgnorableAxis(planeNormal, false);

      // validiere, dass alle Grundrisse die gleiche Ausrichtung besitzen
      if (resultComponent != Axis.UNKNOWN && relevantComponent != resultComponent) {
        assert false
            : "Planes mit unterschiedlichen Ausrichtungen der Normalenvektoren im gleichen Bucket";
      } else resultComponent = relevantComponent;
    }
    return resultComponent;
  }
Exemple #2
0
  /**
   * Gets the mark for the specified panel.
   *
   * @param trackerPanel the tracker panel
   * @return the mark
   */
  protected Mark getMark(TrackerPanel trackerPanel) {
    Mark mark = marks.get(trackerPanel);
    TPoint selection = null;
    if (mark == null) {
      selection = trackerPanel.getSelectedPoint();
      Point p = null;
      valid = true; // assume true
      for (int n = 0; n < points.length; n++) {
        if (!valid) continue;
        // determine if point is valid (ie not NaN)
        valid = valid && !Double.isNaN(points[n].getX()) && !Double.isNaN(points[n].getY());
        screenPoints[n] = points[n].getScreenPosition(trackerPanel);
        if (valid && selection == points[n]) p = screenPoints[n];
      }
      mark = footprint.getMark(screenPoints);
      if (p != null) { // point is selected, so draw selection shape
        transform.setToTranslation(p.x, p.y);
        int scale = FontSizer.getIntegerFactor();
        if (scale > 1) {
          transform.scale(scale, scale);
        }
        final Color color = footprint.getColor();
        final Mark stepMark = mark;
        final Shape selectedShape = transform.createTransformedShape(selectionShape);
        mark =
            new Mark() {
              public void draw(Graphics2D g, boolean highlighted) {
                stepMark.draw(g, false);
                Paint gpaint = g.getPaint();
                g.setPaint(color);
                g.fill(selectedShape);
                g.setPaint(gpaint);
              }

              public Rectangle getBounds(boolean highlighted) {
                Rectangle bounds = selectedShape.getBounds();
                bounds.add(stepMark.getBounds(false));
                return bounds;
              }
            };
      }
      final Mark theMark = mark;
      mark =
          new Mark() {
            public void draw(Graphics2D g, boolean highlighted) {
              if (!valid) return;
              theMark.draw(g, false);
            }

            public Rectangle getBounds(boolean highlighted) {
              return theMark.getBounds(highlighted);
            }
          };
      marks.put(trackerPanel, mark);
    }
    return mark;
  }
  public void testSkewedFootprint() throws Exception {
    msg_camera_feedback msg = new msg_camera_feedback();
    msg.lng = 1;
    msg.lat = 1;
    msg.alt_rel = 100;
    msg.pitch = 10;
    msg.roll = 30;
    msg.yaw = 60;

    Footprint footprint = new Footprint(camera, msg);

    List<Coord2D> vertex = footprint.getVertexInGlobalFrame();
    assertEquals(new Coord2D(-7.664157697114501E-5, -1.4395576628291166E-4), vertex.get(0));
    assertEquals(new Coord2D(0.001167096458779719, -0.0010463895304861626), vertex.get(1));
    assertEquals(new Coord2D(0.0020605706434187595, 5.362476139283517E-6), vertex.get(2));
    assertEquals(new Coord2D(1.8929947996117644E-4, 4.296458546032376E-4), vertex.get(3));
  }
  public void testNadirFootprint() throws Exception {
    msg_camera_feedback msg = new msg_camera_feedback();
    msg.lng = 1;
    msg.lat = 1;
    msg.alt_rel = 100;
    msg.pitch = 0;
    msg.roll = 0;
    msg.yaw = 45;

    Footprint footprint = new Footprint(camera, msg);

    List<Coord2D> vertex = footprint.getVertexInGlobalFrame();
    assertEquals(new Coord2D(-6.351048290444335E-4, 1.271409658088867E-4), vertex.get(0));
    assertEquals(new Coord2D(1.271409658088868E-4, -6.35104829044434E-4), vertex.get(1));
    assertEquals(new Coord2D(6.353048290444339E-4, -1.2694096580888691E-4), vertex.get(2));
    assertEquals(new Coord2D(-1.269409658088866E-4, 6.353048290444336E-4), vertex.get(3));
  }
  public void testGSD() throws Exception {
    Footprint footprint = new Footprint(camera, new Altitude(100));

    assertEquals(0.023238, footprint.getGSD(), 0.01);
  }
  public void testGenericFootprint() throws Exception {
    Footprint footprint = new Footprint(camera, new Altitude(100));

    assertEquals(120.0, footprint.getLateralSize().valueInMeters(), 0.001);
    assertEquals(80.0, footprint.getLongitudinalSize().valueInMeters(), 0.001);
  }
Exemple #7
0
 public void addEvent(int index) throws IndexOutOfBoundsException, IOException {
   eventIndices.add(index);
   footprint.add(
       log.getInstance(processInstanceIndex).getAuditTrailEntryList().get(index).getElement());
   isSorted = false;
 }
Exemple #8
0
 public Cluster merge(Cluster other) {
   eventIndices.addAll(other.eventIndices);
   footprint.merge(other.footprint);
   isSorted = false;
   return this;
 }