List of usage examples for org.apache.commons.math3.geometry.euclidean.twod Vector2D getX
public double getX()
From source file:edu.unc.cs.gamma.rvo.RVOMath.java
/** * Computes the determinant of a two-dimensional square matrix with rows * consisting of the specified two-dimensional vectors. * * @param vector1 The top row of the two-dimensional square matrix. * @param vector2 The bottom row of the two-dimensional square matrix. * @return The determinant of the two-dimensional square matrix. *///from w w w. jav a 2 s . c om static double det(Vector2D vector1, Vector2D vector2) { return vector1.getX() * vector2.getY() - vector1.getY() * vector2.getX(); }
From source file:haxball.util.Serializer.java
public static byte[] serializePoint(@NonNull Vector2D p) { byte x[] = floatToByteArray((float) p.getX()); byte y[] = floatToByteArray((float) p.getY()); return new byte[] { x[0], x[1], x[2], x[3], y[0], y[1], y[2], y[3] }; }
From source file:de.thkwalter.et.ortskurve.Startpunktbestimmung.java
/** * Diese Methode bestimmt die Messpunkte, die zur Startpunktbestimmung verwendet werden. Das sind die beiden * Messpunkte mit dem grten bzw. kleinsten y-Komponente (Realteil des Stroms) und der Messpunkt, dessen y-Komponente * am nhesten zum Mittelwert aus der grten und der kleinsten auftreteten y-Komponente liegt. *//* www . ja va 2 s . c o m*/ private static Vector2D[] messpunkteAuswaehlen(Vector2D[] messpunkte) { // Zwei Listen mit den Messpunkten werden erstellt. ArrayList<XKomponenteMesspunkt> xListe = new ArrayList<XKomponenteMesspunkt>(); ArrayList<YKomponenteMesspunkt> yListe = new ArrayList<YKomponenteMesspunkt>(); // Die Listen werden mit den Messpunkten initialisiert. for (Vector2D messpunkt : messpunkte) { xListe.add(new XKomponenteMesspunkt(messpunkt)); yListe.add(new YKomponenteMesspunkt(messpunkt)); } // Die Messpunkte mit der grten und kleinsten x-Komponente werden bestimmt. Vector2D maxXMesspunkt = Startpunktbestimmung.maxMesspunktBestimmen(xListe); Vector2D minXMesspunkt = Startpunktbestimmung.minMesspunktBestimmen(xListe); // Die Messpunkte mit der grten und kleinsten y-Komponente werden bestimmt. Vector2D maxYMesspunkt = Startpunktbestimmung.maxMesspunktBestimmen(yListe); Vector2D minYMesspunkt = Startpunktbestimmung.minMesspunktBestimmen(yListe); // Die Messpunkte, die bei der Startpunktbestimmung verwendet werden, werden deklariert. Vector2D maxMesspunkt = null; Vector2D minMesspunkt = null; Vector2D mittlererMesspunkt = null; // Falls der Wertebereich der x-Komponente der Messpunkte grer ist als der Wertebereich der y-Komponente, ... if (maxXMesspunkt.getX() - minXMesspunkt.getX() > maxYMesspunkt.getY() - minYMesspunkt.getY()) { // Die Messpunkte mit der grten und kleinsten x-Kompomnente werden bei der Startpunktbestimmung verwendet. maxMesspunkt = maxXMesspunkt; minMesspunkt = minXMesspunkt; mittlererMesspunkt = Startpunktbestimmung.mittlerenMesspunktBestimmen(xListe, 0.5 * (maxXMesspunkt.getX() + minXMesspunkt.getX())); } // Falls der Wertebereich der x-Komponente der Messpunkte nicht grer ist als der Wertebereich der y-Komponente, ... else { // Die Messpunkte mit der grten und kleinsten y-Kompomnente werden bei der Startpunktbestimmung verwendet. maxMesspunkt = maxYMesspunkt; minMesspunkt = minYMesspunkt; mittlererMesspunkt = Startpunktbestimmung.mittlerenMesspunktBestimmen(yListe, 0.5 * (maxYMesspunkt.getY() + minYMesspunkt.getY())); } // Die Messpunkte, die zur Startpunktbestimmung verwendet werden, werden zurckgegeben. return new Vector2D[] { maxMesspunkt, minMesspunkt, mittlererMesspunkt }; }
From source file:de.thkwalter.koordinatensystem.Achsendimensionierung.java
/** * Diese Methode bestimmt die Wertebereiche in x- und y-Richtung. * /*from w w w .j a v a 2s . co m*/ * @param punkte Die Punktemenge. * * @return Der Wertebereich der Punktemenge. */ private Wertebereich wertebereichBestimmen(Vector2D[] punkte) { // Die Objekte, die zur Bestimmung der minimalen und maximalen Werte verwendet werden, werden erzeugt. SummaryStatistics summaryStatisticsX = new SummaryStatistics(); SummaryStatistics summaryStatisticsY = new SummaryStatistics(); // Die Objekte, die zur Bestimmung der minimalen und maximalen Werte verwendet werden, werden initialisiert. for (Vector2D punkt : punkte) { summaryStatisticsX.addValue(punkt.getX()); summaryStatisticsY.addValue(punkt.getY()); } // Die Maxima und Minima werden bestimmt. double maxX = summaryStatisticsX.getMax(); double maxY = summaryStatisticsY.getMax(); double minX = summaryStatisticsX.getMin(); double minY = summaryStatisticsY.getMin(); // Der maximale Wertebereich der Punktemenge wird zurckgegeben. return new Wertebereich(maxX, maxY, minX, minY); }
From source file:io.lonelyrobot.empires.fw.game.obj.BaseObject.java
/** * This function is called recursively from the {@link Star}, updating it's children * with an offset of {0, 0}. These children then move themselves according to the * position of their parent and then pass this offset to their children. These children * move themselves by the offset and then calculate their additional offset. * /*from w ww . j a v a 2 s . c om*/ * @param parentOffset */ public void updateOrbits(Vector2D parentOffset) { Vector2D offset = new Vector2D(0, 0); if (orbit != null && orbit.getParent() != null) { Vector2D p = orbit.getParent().getSolPos(); /** Calculate own offset */ double x = p.getX() + orbit.getRadius() * Math.cos(orbit.getStep()); double y = p.getY() + orbit.getRadius() * Math.sin(orbit.getStep()); orbit.setStep(orbit.getStep() + orbit.getStepSpeed()); Vector2D newPos = new Vector2D(x, y); newPos.add(parentOffset); // offset.add(new Vector2D(x, y)); /** Add the parent offset on top */ // offset.add(parentOffset); offset.add(newPos); /** Apply position to self */ this.setSolPos(newPos); } /** Only propagate orbital offsets if self is Orbitable */ if (!(this instanceof Orbitable)) return; /** Call function for all children with the new (accumilated) offset */ Tools.safe(orbit.getChildren()).forEach((i) -> i.updateOrbits(offset)); }
From source file:de.thkwalter.jsf.converter.CSVConverter.java
/** * Diese Methode konvertiert ein Feld von {@link Vector2D}-Objekten in eine Zeichenketten im CSV-Format. Zwei Datenstze * der Zeichenkette sind jeweils durch einen Zeilenumbruch getrennt. Jeder Datensatz besteht aus zwei Datenfeldern, die * durch ein Komma getrennt sind. Jedes Datenfeld besteht aus einem double-Wert. * /*from w w w . jav a 2s . c o m*/ * @param facesContext Das Kontext-Objekt * @param uiComponent Die UI-Komponente, welche das Ziel der Zeichenkette ist. * @param vektoren Das bergebene Feld von {@link Vector2D}-Objekten. * * @return Eine Zeichenketten im CSV-Format. * * @see javax.faces.convert.Converter#getAsString(javax.faces.context.FacesContext, javax.faces.component.UIComponent, * java.lang.Object) */ @Override public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object vektoren) { // Der StringBuffer wird mit einer leeren Zeichenkette initialisiert. StringBuffer stringBuffer = new StringBuffer(""); try { // Falls das Feld nicht null ist, wird es konvertiert. if (vektoren != null) { // Das bergebene Object wird in ein Feld von Vector2D-Objekten umgewandelt. Vector2D[] punkte = (Vector2D[]) vektoren; // In dieser Schleife werden alle Vektoren zu einer Zeichenkette verknpft. for (Vector2D punkt : punkte) { stringBuffer.append(punkt.getX()).append(", ").append(punkt.getY()).append("\n"); } } } // Falls eine Ausnahme geworfen worden ist, wird diese behandelt. catch (Exception exception) { // Die Fehlermeldung wird erstellt und protokolliert. String fehlermeldung = "Das Feld der Vektoren kann nicht konvertiert werden! Fehlertext: " + exception.getMessage(); CSVConverter.logger.log(Level.SEVERE, fehlermeldung); // Eine ConverterException wird geworfen. throw new ConverterException(exception.getMessage()); } // Die zusammengebaute Zeichenkette wird zurckgegeben. return stringBuffer.toString(); }
From source file:edu.stanford.cfuller.imageanalysistools.filter.VoronoiFilter.java
/** * Checks whether a given coordinate would be on a boundary of a * Voronoi diagram created from the given points. * **//* ww w .j a v a 2 s . c o m*/ public boolean isOnEightConnectedBoundary(java.util.List<Vector2D> points, ImageCoordinate ic) { int x = ic.get(ImageCoordinate.X); int y = ic.get(ImageCoordinate.Y); int closestIndex = 0; int nextIndex = 0; double closestDist = Double.MAX_VALUE; double nextDist = Double.MAX_VALUE; for (int i = 0; i < points.size(); i++) { Vector2D pt = points.get(i); double dist = Math.hypot(pt.getX() - x, pt.getY() - y); if (dist < closestDist) { nextDist = closestDist; nextIndex = closestIndex; closestDist = dist; closestIndex = i; } else if (dist < nextDist) { nextDist = dist; nextIndex = i; } } Vector2D projectedCoordinate = this.projectPointOntoVector(points.get(closestIndex), new Vector2D(x, y), points.get(nextIndex)); double distToNext = points.get(nextIndex).subtract(projectedCoordinate).getNorm(); double distToClosest = points.get(closestIndex).subtract(projectedCoordinate).getNorm(); final double cutoff = 1.3 * Math.sqrt(2); if (distToNext - distToClosest < cutoff) { return true; } return false; }
From source file:edu.stanford.cfuller.imageanalysistools.util.VoronoiDiagram.java
protected Hyperplane<Euclidean2D> constructBisectingHyperplane(Vector2D firstPoint, Vector2D secondPoint) { Vector2D middlePoint = firstPoint.add(secondPoint).scalarMultiply(0.5); Vector2D difference = secondPoint.subtract(firstPoint); double angle = Math.atan2(difference.getY(), difference.getX()); angle -= Math.PI / 2.0; // rotate 90 degrees Line bisector = new Line(middlePoint, angle); return bisector; }
From source file:de.thkwalter.et.ortskurve.XKomponenteMesspunktTest.java
/** * Test fr die Methode {@link de.thkwalter.et.ortskurve.XKomponenteMesspunkt#getWert()}. *//*w ww. j a va 2 s .c om*/ @Test public void testGetWert() { // Ein Messpunkt wird erzeugt. Vector2D messpunkt = new Vector2D(1.0, 2.0); // Das Objekt, das fr die Tests verwendet wird, wird erzeugt. KomponenteMesspunkt xKomponenteMesspunkt = new XKomponenteMesspunkt(messpunkt); // Es wird geprft, ob die Methode getWert() den Wert der x-Komponente zurckgibt. assertEquals(messpunkt.getX(), xKomponenteMesspunkt.getWert(), messpunkt.getX() / 1000); }
From source file:edu.stanford.cfuller.imageanalysistools.filter.VoronoiFilter.java
/** * Applies the Filter to the supplied Image. * @param im The Image to whose labeled region will be converted to a Voronoi diagram. */// w w w . j av a2 s .c o m @Override public void apply(WritableImage im) { Map<Integer, Vector2D> regionCentroids = new java.util.HashMap<Integer, Vector2D>(); for (ImageCoordinate ic : im) { int label = (int) im.getValue(ic); if (label == 0) continue; if (!regionCentroids.containsKey(label)) { regionCentroids.put(label, new Vector2D(0, 0)); } regionCentroids.put(label, regionCentroids.get(label) .add(new Vector2D(ic.get(ImageCoordinate.X), ic.get(ImageCoordinate.Y)))); } Histogram h = new Histogram(im); java.util.List<Integer> regions = new java.util.ArrayList<Integer>(); for (Integer i : regionCentroids.keySet()) { regionCentroids.put(i, regionCentroids.get(i).scalarMultiply(1.0 / h.getCounts(i))); regions.add(i); } java.util.Collections.sort(regions); java.util.List<Vector2D> orderedCentroids = new java.util.ArrayList<Vector2D>(); for (Integer i : regions) { orderedCentroids.add(regionCentroids.get(i)); } WritableImage regionCentroidsIm = ImageFactory.createWritable(im.getDimensionSizes(), 0.0f); WritableImage diagram = ImageFactory.createWritable(im.getDimensionSizes(), 1.0f); ImageCoordinate cenTemp = ImageCoordinate.createCoordXYZCT(0, 0, 0, 0, 0); for (Integer i : regions) { Vector2D cen = regionCentroids.get(i); cenTemp.set(ImageCoordinate.X, (int) cen.getX()); cenTemp.set(ImageCoordinate.Y, (int) cen.getY()); regionCentroidsIm.setValue(cenTemp, i); } cenTemp.recycle(); for (ImageCoordinate ic : diagram) { if (isOnEightConnectedBoundary(orderedCentroids, ic)) { diagram.setValue(ic, 0.0f); } } LabelFilter lf = new LabelFilter(); OneToOneLabelBySeedFilter oolbsf = new OneToOneLabelBySeedFilter(); lf.apply(diagram); oolbsf.setReferenceImage(regionCentroidsIm); oolbsf.apply(diagram); im.copy(diagram); }