Zum Inhalt springen

Programmierer gesucht - Bounding Box


Nox
 Teilen

Empfohlene Beiträge

Hallo!

 

So, in letzter Instanz wende ich mich mal hier ans Bikeboard, da meine Studienkollegen auch noch keinen Plan haben...

 

Und zwar gehts ums programmieren - Java.

Ich hab 3 Klassen - Circle, Rectangle, Triangle, die Koordinaten davon werden mit der Klasse Point gespeichert.

In der Klasse Sketcher rufe ich diese Klassen auf, trage Werte ein, die 3 geometrischen Objekte werden mit der GraphicsConsole ausgegeben.

 

Das hab ich alles schon gemacht, mein Problem ist diese BoundingBox, also zb das umschreibende Rechteck.

 

"Erstelle dazu die Klasse Bounding Box, überlege welche Objektvariablen sinnvoll sind und stelle Methoden für Erzeugen, Abfragen und Verändern der Exemplarvariablen zur Verfügung.

Implementiere die Methode boolean intersect(BoundingBox bb), die prüft, ob sich zwei Boxen überlappen.

 

Implementiere in den Klassen Circle, Rectangle und Triangle die Methode: boundingbox: getBox().

Verwende die intersect()-Methode, um festzustellen, ob sich zwei Objekte nicht überlappen und gib eine entsprechende Meldung aus"

 

Kann mir irgendjemand weiterhelfen, ich weiß hint und vorn nicht wo ich hier weitermachen soll.... vl. gibts ja ein paar Programmierer hier

 

lg,

Sigrid

Link zu diesem Kommentar
Auf anderen Seiten teilen

Frei nach der heutigen Vorbesprechung: Wo ist das Problem? :D

 

Na im ernst: Hört sich nach einem "kleinen objektorientierten Design" an.

 

In der Klasse BoundingBox musst du dir passende Instanzvariablen (Datenfelder) überlegen, nen Konstruktor implementieren und die get- und settermethoden für die Instanzvariablen implementieren.

Außerdem schreibst du die Methode die 2 Boxen auf Überlappung prüft. (also Box als Parameter mit this) Wann überlappen sich 2 Rechtecke? Ja wenn sich 2 Kanten schneiden...

 

In Triangle, Circle, Rectangle implementierst du die Methode getBox, die denk ich die BoundingBox zurückgeben (wenn eine Instanzvariable vom Typ BoundingBox existiert) oder erzeugen (else) soll.

 

Ich übernehm aber keine Haftung für Richtigkeit^^ Hab ja kA über die genaue Angabe und Wissensstand. :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

bis jetzt hab ich:

 

zb meine Klasse Rectangle:

 

public class Rectangle {

 

int length;

int height;

Point coords;

 

public Rectangle(int x, int y, int length, int height){

this.length = length;

this.height = height;

this.coords = new Point(x,y);

}

 

 

//*************Getter und Setter

public Point getCoords() {

return this.coords;

}

 

/*public void setCoords(int x, int y) {

this.coords.setLocation(x, y);

}*/

 

 

public int getX() {

return this.coords.x;

}

 

public int getY() {

return this.coords.y;

}

 

public void setX() {

this.coords.x = coords.x;

}

 

public void setY() {

this.coords.y = coords.y;

}

 

 

public int getLength() {

return this.length;

}

 

public void setLength(int length) {

this.length = length;

}

 

public int getHeight() {

return this.height;

}

 

public void setHeight(int height) {

this.height = height;

}

 

 

//*********Draw Methode

public void drawRectangle(GraphicsConsole r){

r.drawLine(this.coords.x, this.coords.y, this.coords.x +this.length, this.coords.y);

r.drawLine(this.coords.x + this.length, this.coords.y, this.coords.x + this.length, this.coords.y +this.height);

r.drawLine(this.coords.x + this.length, this.coords.y + this.height, this.coords.x, this.coords.y + this.height);

r.drawLine(this.coords.x, this.coords.y + this.height, this.coords.x, this.coords.y);

}

 

 

public static void main(String[] args) {

 

}

 

}

 

 

 

 

meine Klasse BoundingBox

 

public class BoundingBox {

 

Point lo;

Point ru;

 

public BoundingBox(Point lo, Point ru) {

this.lo = lo;

this.ru = ru;

}

 

 

public Point getLo() {

return lo;

}

 

public void setLo(Point lo) {

this.lo = lo;

}

 

public Point getRu() {

return ru;

}

 

public void setRu(Point ru) {

this.ru = ru;

}

 

 

 

public static void main(String[] args) {

 

}

 

}

 

 

und dann steh ich an*rotwerd*

Link zu diesem Kommentar
Auf anderen Seiten teilen

Verwende bitte den BB-Code Code Tag (also im WYSIWYG-Editor Icon mit #), damit die Einrückungen erhalten bleiben, sonst wirds unlesbar.

 

Hast du die Instanzvariablen von Rechteck selbstgewählt? Was ist coords für ein Punkt? Vergiss die Kommentare / Javadoc nicht!

Ist eine BoundingBox immer ein Rechteck? Wenn ja, dann sollte es jetzt klingeln... :p Stichwort: Instanzvariable bei BoundingBox

 

Jetzt nur mehr intersect implementieren und dann dürfts ja ungefähr hinkommen (habs allerdings nur ganz schnell überflogen); ne Testklasse (mit Main) oder dgl. wirst auch noch brauchen...

Link zu diesem Kommentar
Auf anderen Seiten teilen

wenn man mal davon ausgeht, dass die BoundingBox das kleinste, nicht gedrehte Rechteck ist, das ein Rechteck, Dreieck bzw. den Kreis komplett beinhaltet, isses eigentlich eh recht einfach.

 

Die BoundingBox des Rechtecks ist das Rechteck selbst, beim Kreis muss man einfach vom Mittelpunkt (x,y) den Radius r abziehen bzw. addieren um zur BB zu kommen. Damit hast ein Rechteck von (x-r, y-r) - (x+r, y+r). Beim Dreieck muss man einfach alle drei Eckpunkte durchgehen und sich die min. bzw. max x / y Werte merken. Damit kommst auch automatisch zur BB.

 

Die Intersect Prüfung ist auch relativ simpel. Wenn ein Eckpunkt eines Rechteckes innerhalb des anderen Rechteckes liegt, überschneiden sich beide Rechtecke. "Innerhalb" heisst ganz einfach, dass x zwischen minx und maxx und y zwischen miny und maxy liegt. Das musst für alle vier Eckpunkte beider Boxen prüfen, sobald ein Punkt eines Rechtecks diese Bedingung erfüllt, ist der Test "bestanden".

 

Es reicht nicht, diesen Test nur für eine Box zu machen, da ja ein Rechteck komplett innerhalb des anderen liegen könnte.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

 Teilen

×
×
  • Neu erstellen...