Punktwolke

Italiana

Mitglied
Teil der Aufgabe ist folgende:
Entwickeln Sie eine Klasse BoundingBox, welche die räumliche Ausdehnung einer Punktwolke (bestehend aus ca. 10 Punkten) erfasst. Definiert wird die BB durch die kleinsten und die größten Punktkoordinaten der Punktwolke.

* dem Konstruktor der BB wird eine Punktmenge (Hinweis: Array von Punkten) übergeben. Aus dieser Punktmenge wird die umgebende Box ermittelt.
* Methoden zur Rückgabe der beiden Eckpunkte
.....


Folgende Fehlermeldung erscheint beim ausführen:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
at Eckpunkte.main(Eckpunkte.java:15)


und hier meine Javadateien:

BoundingBox.java
[Java]public class BoundingBox {

public double xmin;
public double xmax;
public double ymin;
public double ymax;

public BoundingBox(Point []wolke) {

xmin = wolke[0].getx();
xmax = wolke[0].getx();
ymin = wolke[0].gety();
ymax = wolke[0].gety();

for (int i=1; i<=wolke.length; i++){
if (xmin > wolke.getx() )
xmin=wolke.getx();
if (xmax < wolke.getx() )
xmax=wolke.getx();
if (ymin > wolke.gety() )
ymin=wolke.gety();
if (ymax < wolke.gety() )
ymax=wolke.gety();
}
}
}

[/Java]

Eckpunkte.java
[Java]public class Eckpunkte {
public static void main(String[] args){

Point [] points = new Point[9];
points[0] = new Point(0,2);
points[1] = new Point(4,3);
points[2] = new Point(1,5);
points[3] = new Point(7,3);
points[4] = new Point(2,4);
points[5] = new Point(6,2);
points[6] = new Point(3,3);
points[7] = new Point(5,6);
points[8] = new Point(8,1);
points[9] = new Point(3,0);


BoundingBox bb = new BoundingBox(points);
System.out.println("Der kleinste Punkt beträgt:" + bb.xmin +" " +"," + bb.ymin );
System.out.println("Der größte Punkt beträgt:" + bb.xmax +" " +"," + bb.ymax );

}

}
[/Java]


ich hab nach dem Fehler schon gegooglet aber hat mich aber nicht wirklich weitergebracht. Hoffe ihr könnt mir helfen.
 

eRaaaa

Top Contributor
+
Code:
        points[0] = new Point(0,2); 
        points[1] = new Point(4,3);
        points[2] = new Point(1,5);
        points[3] = new Point(7,3);
        points[4] = new Point(2,4);
        points[5] = new Point(6,2);
        points[6] = new Point(3,3);
        points[7] = new Point(5,6);
        points[8] = new Point(8,1);
        points[9] = new Point(3,0);
= 10 points..dein Array hat aber nur Platz für 9 :)
 
J

JohannisderKaeufer

Gast
Mit Arrays und Comparator könnte das ganze so aussehen ;)

Java:
public class BoundingBox {

    public int xmin, ymin, xmax, ymax;

    public BoundingBox(Point[] wolke) {
        Arrays.sort(wolke, new Comparator<Point>() {

            public int compare(Point a, Point b) {
                return a.x - b.x;
            }
        });
        xmin = wolke[0].x;
        xmax = wolke[wolke.length - 1].x;
        Arrays.sort(wolke, new Comparator<Point>() {

            public int compare(Point a, Point b) {
                return a.y - b.y;
            }
        });
        ymin = wolke[0].y;
        ymax = wolke[wolke.length - 1].y;
    }
}
 

Marco13

Top Contributor
Man kann auch BubbleSort verwenden, dann macht man aus einem O(n)-Problem nicht nur ein O(nlogn), sondern gleich ein O(n*n)-Problem :D ( ;) )
 

Italiana

Mitglied
danke für euer Hilfe. Die Boundingbox.java lass ich aber so wie ich jetzt hatte, läuft ja prima, und war laut tutor schon so ok.

jetzt hab ich noch nen anderes Problem, ich will die Liste mit den ganzen Punkten ausgeben.

da hab ich jetzt folgendes geschrieben:
Java:
System.out.println(java.util.Arrays.toString(points));

er gibt mir auch 10 sachen aus aber sieht das noch eher nach Hyroglyphen aus:

[Point@addbf1, Point@42e816, Point@9304b1, Point@190d11, Point@a90653, Point@de6
ced, Point@c17164, Point@1fb8ee3, Point@61de33, Point@14318bb]

Die Ausgabe sollte aber in etwa so aussehen

Der Array beinhaltet die Punkte: (1,2 ) , (3,4), .... usw
 

Oben