/** * 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; }
/** * 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); }
public void addEvent(int index) throws IndexOutOfBoundsException, IOException { eventIndices.add(index); footprint.add( log.getInstance(processInstanceIndex).getAuditTrailEntryList().get(index).getElement()); isSorted = false; }
public Cluster merge(Cluster other) { eventIndices.addAll(other.eventIndices); footprint.merge(other.footprint); isSorted = false; return this; }