Java Loesung?

6 Antworten

Nun, die Berechnung zur Größe eines Rechtecks ist relativ einfach.
Die Formel hierfür ist ja bekanntlich L*B, also Länge*Breite.

Ich nehme an, ein Rechteck hat sein eigenes Objekt mit den entsprechenden Parametern.Die resultierende Funktion ist also relativ simpel:

public float getSize(Rechteck form){
  return form.laenge*form.breite; //Länge*Breite von form zurückgeben
}  

Ein Punkt liegt innerhalb des Rechtecks, wenn sowohl die X als auch die Y - Koordinaten nicht größer oder kleiner als die Eckpunkte des Rechtecks sind.

public boolean isInside(Rechteck form, float punktX, float punktY){
  if(punktX <= form.laenge){
    if(punktY <= form.breite){
      return true;
    }
  }
  return false;
}

Aber Achtung: Das funktioniert nur, wenn das Rechteck allein durch Höhe und Breite vorgegeben wird und die Ursprungskoordinate immer 0 ist. (Wenn nicht: Koordinaten so verschieben, dass es passt!)
Wenn das Rechteck jedoch durch Koordinaten aufgespannt wird, so musst du mit Vektoren arbeiten. Stichwort hier: Linearkombination.

Woher ich das weiß:Berufserfahrung

Wenn du nicht weiter kommst helfen wir dir gern, aber bisher sehe ich nicht mal einen Ansatz.

Setz dich hin, fange an deine Aufgabe zu machen und wenn du an einer Stelle nicht weiter kommst dann kannst du gern hier nachfragen, aber deine Arbeit machen wir nicht für dich.

Woher ich das weiß:Berufserfahrung – Java Entwickler
marsilda 
Fragesteller
 18.11.2019, 21:44

Ich habe nicht gesagt, dass ihr meine Arbeit machen sollt. Ich weiss nicht genau wie ich anfangen soll. Das ist das Problem!

0
Eismensch  18.11.2019, 21:53
@marsilda

Anfangen mit was? Jegliche Informationen um dir auch nur Ansatzweise helfen zu können fehlen.

Ich meine, wie man den Flächeninhalt eines Rechtecks berechnet wirst du doch wissen. Und wie man bestimmt ob ein Punkt innerhalb eines Rechtecks ist ist auch nicht schwer:

z.B.:

Rechteck ist 200 x 200
Punkt A(157 | 52) -> ist im Rechteck
Punkt B(270 | 67) -> nicht im Rechteck

Was genau ist somit deine Frage?

Wie man ein Java Programm schreibt?
Wie man Variablen deklariert?
Was ein Konstruktor ist?

1
marsilda 
Fragesteller
 18.11.2019, 21:59
@Eismensch

Dankeschoen. Ich brauche jemanden der mir sozusagen "die Schritte" erklaeren kann.

0
Eismensch  18.11.2019, 22:11
@marsilda

Welche schritte? Wie man überhaupt ein Java Programm schreibt?
-> Google ist dein Freund. Es gibt unzählige Tutorials für Anfänger.

Als Referenz zu nachlesen gibt es dann auch noch das Buch hier: Link

Keiner wird dir hier programmieren "erklären" können. Dafür fehlt zum einen die Zeit, zum anderen ist das hier nicht der Ort dafür.

Wenn du mal nicht weiter kommst und du einfach nicht verstehst was du falsch machst (was vollkommen normal ist), dann helfen wir dir gern weiter. Aber lernen musst du schon selbst.
Hinsetzen, Tutorials durcharbeiten und im Buch nachschlagen wenn du nicht weiter kommst.

0

und wo ist dein Problem?

marsilda 
Fragesteller
 18.11.2019, 21:33

Ich weiss es nicht wie ich überprüfen kann, ob ein Punkt innerhalt eines Rechteckes ist und die Fläche des Rechtecks berechnen :(

0
marsilda 
Fragesteller
 18.11.2019, 21:35

Es muessen Kapselung und Konstruktoren/Destruktoren verwendet werden.

0
xxxcyberxxx  18.11.2019, 21:51
@marsilda

was du dann wohl machen musst (unter der Annahme, dass das alles 2D ist)

  • Klasse für Punkt schreiben, welcher bei 2 Koordinaten im Konstruktor annimmt
  • Klase für Rechteck schreiben, welche über verschiedene Varianten aufgebaut werden kann, z.B. wie folgt
  • ein Punkt, Länge a, Länge b
  • zwei Punkte. Dazu entweder 0 Längen (wenn die Punkte in gegenüberliegenden Ecken sind, sonst eine Länge)
  • drei Punkte
  • vier Punkte
  • eine Funktion in der Rechteck-Klasse, welche überprüft, ob ein gegebener Punkt im Rechteck liegt (überleg dir, wie du das manuell nachrechnen würdest und implementiere das dann)
  • eine Funktion in der Rechteck-Klasse, welche den Flächeninhalt des Rechtecks zurückgibt
0

Das ganze ist eigentlich ganz einfach, ich denke mal du hast die Position der Punktes und die Position und Größe des Rechecks gegeben. Dann musst du nur Ich überprüfen ob die x Position des Punktes zahlenmäßig zwischen der Position des Rechecks und der Position + der Breite der Rechtecke liegt. Das gleiche brauchst du dann noch für die y Richtung. Und wenn beides zutrifft sprich der Pu kt auf beiden Achsen innerhalb des Rechecks liegt befindet er sich in dem Rechteck.

Ansonsten schau mal im Internet nach Kollisionen Rechteck und Punkt, da findest du dann bestimmt auch bessere Erklärungen.

Falls du sonst noch Fragen hast kann ich das ganze gerne weiter ausführen.

LG Jesaja

Woher ich das weiß:eigene Erfahrung
marsilda 
Fragesteller
 18.11.2019, 22:11

Vielen lieben Dank! Ich habe zuerst zwei Klasse gemacht. Eine habe ich Punkte und die andere Rechteck genannt. Ich weiss es wirklich nicht was jetzt zur diese Klassen schreiben soll. Also wie ich das anfangen kann :(

0
Jesaja01  18.11.2019, 22:34
@marsilda

Ok, ich würde jetzt erst mal in beiden Klassen die x und die y Position als Variablen abspeichern, da musst jetzt halt wissen ob die float Werte haben kannst oder ob int reicht. Dann würde ich in der Rechteckklasse zusätzlich eine breite und eine höhe hinzufügen. Damit hätten wir erstmal alle Variablen die wir baruchen denke ich. Ich kenne jetzt deinen Wissesstand nicht also sags bitte wenn ich was sran bringe was dir nichts sagt oder wo du dich noch nicht sicher fühlst : ). Als Nächstes würde ich je einen Konstruktor schreiben in dem alle Variablen der Klasse vorkommen. Und dann kannst du eigentlich schon eine Methode schreiben die abfragt ob sich ein Punkt in einem Rechteck befindet, dabei ist es dir überlassen ob du das in die main-Methode reinpackst oder ob du es in einer der Klassen machst. So, wenn ich dir den Rest vorallem die angesprochene Methode zeigen soll kann ich das gerne machen wenn du es allerdings erst selbst versuchen willst, dann mach das. Schreib einfach wenn noch was unklar ist.

1
marsilda 
Fragesteller
 18.11.2019, 22:50
@Jesaja01

Danke sehr! Das mit der Methode verstehe ich nicht ganz, da wir erst im September mit Java angefangen haben und ich mich noch nicht so gut kenne. Was du mir erzaehlst ist leicht zu verstehen, da du das sehr gut erklaerst. Danke dir sehr :)

0
Jesaja01  18.11.2019, 22:55
@marsilda

^^ Kein Problem. Schreib doch gerade kurz ob ich die das prinzip für die Methode erklären soll oder direkt den Code mit Erklärung.

1
marsilda 
Fragesteller
 18.11.2019, 22:57
@Jesaja01

Konntest du villeicht den Code mit Erklaerung?

(Sorry falls mein deutsch nicht verstaendlich ist aber ich komme nicht aus Deutschland)

Dankeschoen fuer deine Hilfe!

0
Jesaja01  18.11.2019, 22:59
@marsilda

Alles gut, lieber man redet/schreibt überhaupt als das man sich nicht traut ^^. Ok dann mach mich mal ran. Könnte jetzt kurz dauern.

1
marsilda 
Fragesteller
 18.11.2019, 23:11
@marsilda

"Du hast geometrische Objekte. Dazu gehören Punkte und Rechtecke. Ein Rechteck besteht aus Punkten und muss aus je zwei parallelen Seiten bestehen. Man soll überprüfen können, ob ein Punkt innerhalt eines Rechteckes ist. Außerdem soll man die Fläche eines Rechtecks berechnen können. Man soll anzeigen können wie viele Punkte es derzeit gibt. Zeige alle Funktionalitäten im Code "

Das ist meine Aufgabe falls ich nicht klar am Anfang erklaert habe.

:)

0
Jesaja01  18.11.2019, 23:34
@marsilda

Zur Vollständigkeit hab ich hier nochmal die beiden Klassen:

class Punkt{
  int x, y;
 
  public Punkt(int x, int y){
    this.x = x;
    this.y = y;
  }
}

class Rechteck{
  int x, y, w, h;
 
  public Rechteck(int x, int y, int w, int h){
    this.x = x;
    this.y = y;
    this.w = w;
    this.h = h;
  }
}

Und hier kommt die Methode:

public boolean punktInRechteck(Rechteck rect, Punkt point){
  if(point.x > rect.x && point.x < (rect.x + rect.w) && point.y > rect.y && point.y < (rect.y + rect.h)){
    return true;
  }else{
    return false;
  }
}

Ich schreib jetzt einfach mal ganz ausführlich was in jeder Zeile passiert.

Die Methode gibt true oder false zurück je nach dem ob der Punkt innerhalb (true) oder außerhalb (false) des Rechtecks liegt.

Man hätte auch keinen Rückgabewert (void) machen können und true/false in der Methode ausgeben lassen können, aber ich finde es so besser, weil man es "freier" benutzen kann, deshalb der boolean-Rückgabewert.

So, jetzt aber wirklich zur Erklärung:

  1. Wir übergeben ein Rechteck Objekt und ein Punkt Objekt.
  2. Dann testen wir ob der Punkt innerhalb des Rechtecks liegt. (Das beschreibe ich unten nochmal genauer)
  3. Wenn das der Fall ist wird "true" zurückgegeben.
  4. Wenn nicht wird "false" zurückgegeben

Mit

point.x > rect.x

testen wir ob die x-Position des Punktes größer als die x-Position der rechten Seite des Rechtecks ist.

Mit

point.x < (rect.x + rect.w)

testen wir ob die x-Position des Punktes kleiner als die x-Position der linken Seite des Rechtecks ist. (Die Klammern braucht man eigentlich nicht aber ich finde es so übersichtlicher, aber das ist ganz dir überlassen ob du die Klammer weg lässt oder nicht.)

Und das selbe machen wir dann noch in y-Richtung. Wir schauen sozusagen ob die Seiten des Rechtecks den Punkt einkesseln.

Falls dir das im Moment alles Spanisch vorkommt zeiche am besten einfach mal kurz ein Koordinaten System, ein Rechteck und einen Punkt auf ein Blatt und setzte dann die Positionen deiner gezeicheneten Formen in den if-Satz ein, das macht das ganze vielleicht ein bisschen verständlich.

So ich hoffe ich hab das halbwegs verständlich hinbekommen ^^. Wen du ncoh fragen hast frag einfach. Eventuell antworte ich aber erst morgen, bin verdammt müde xD.

0
Jesaja01  18.11.2019, 23:38
@Jesaja01

OK, die haben sich das ganze ei bisschen kompizierter gemacht xD Ich passe das gerade noch an und schicke dann einfach nur kurz den Code.

1
marsilda 
Fragesteller
 18.11.2019, 23:39
@Jesaja01

God bless you! Vielen lieben Dank :)))))) Bist sehr sehr nett. Wirklich dankeschoen <3

0
Jesaja01  18.11.2019, 23:59
@marsilda

So, das ist jetzt die neu Rechteck Klasse:

class Rechteck{
  int x1, y1, x2, y2, x3, y3, x4, y4;
 
  public Rechteck(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4){
    this.x1 = x1;
    this.y1 = y1;
    this.x2 = x2;
    this.y2 = y2;
    this.x3 = x3;
    this.y3 = y3;
    this.x4 = x4;
    this.y4 = y4;
  }
 
  public float berechneFlaeche(){
    return (x2 - x1) * (y4 - y1);
  }
}

Wie man sieht viel übersichtlicher ; ).

Der erste Punkt ist jetzt oben-links und die anderen folen im Uhrzeigersinn (oben-links, oben-rechts, unten-rechts, unten-links)

Und das ist die punktInRechteck-Methode:

public boolean punktInRechteck(Rechteck rect, Punkt point){
  if(point.x > rect.x1 && point.x < rect.x2 && point.y > rect.y1 && point.y < rect.y3){
    return true;
  }else{
    return false;
  }
}

Ich hoffe ich hab nicht falsch verstanden xD. (Gerade das mit den vielen Punkten)

Eigentlich sollte man für alles Englische Begriffe benutzen, das hab ich hier absichtlich nicht gemacht das es nicht noch verwirrender wird.

Die letzte Aufgabe mti dem anzeigen wie viele Punkte es gibt verstehe ich nicht ganz. Aber ich würde einfach ein Array / ArrayList von Punkten machen und da dan schauen wie lang die Liste momentan ist (falls ihr Arrays/ArrayLists schon hattet)

Falls noch was ist, eventuell les' ichs erst morgen.^^

LG Jesaja

1
marsilda 
Fragesteller
 22.11.2019, 20:19
@Jesaja01

Hallo :)

Weisst du vielleicht wie ich weiter komme?

Danke :)

0

Ja, da gibt es eine Lösung für.

Woher ich das weiß:Hobby – private Programmiererei
marsilda 
Fragesteller
 18.11.2019, 21:33

Kannst du mal mir die Loesung schreiben ?

0
CSANecromancer  18.11.2019, 22:03
@marsilda

Nein, weil du zu faul bist, auch nur irgendeinen eigenen Ansatz zu liefern und sogar zu faul bist, eine vernünftige Frage in einem ordentlichen Satz zu formulieren.

0