Mein Rechteck hat 4 Seiten, ich soll je nach dem, welche Seite berührt wurde, etwas ausführen, wie prüfe ich das?

berserkerdq2

Bekanntes Mitglied
Mit:
Java:
getrectangle().intersects(circle.getBounds2D())

Kann ich schauen, ob mein Rechteck von meinem Kreis berührt wurde. Das klappt auch.

Nun soll ich jedoch einstellen, dass wenn er die linke oder rechte Seite (egal wo dort) von dem Rechteck berührt, ich ein System.out.println ausgeben muss.

Und wenn er die obere oder untere Seite des Rechtecks (egal wo dort) vom Rechteck berührt, muss ich ein anderes System.out.println ausgeben. Wie mache ich das nun?

ALso wie prüfe ich, welche Seite er getroffen hat?
 
ALso wie prüfe ich, welche Seite er getroffen hat?
Vielleicht erstmal zeichnen?

Kann ich schauen, ob mein Rechteck von meinem Kreis berührt wurde. Das klappt auch.
Das wage ich zu bezweifeln:
1651511521612.png
Wie unschwer zu erkennen ist, könnte man das rote Rechteck (circle.getBounds2D()) so weit nach oben schieben, dass es zwar weiterhin das blaue Rechteck berührt, zwischen dem blauen Rechteck und dem Kreisrand aber kein Berührungspunkt existiert. Umgekehrt könnte man das rote Rechteck nach links schieben. Dann schneiden sich Rechteck und Kreis, berühren sich also nicht nur.

Ebenfalls unschwer zu erkennen ist, dass es einen Berührungspunkt mit den Kanten des blauen Rechteck nur auf einer Linie geben kann, die auf einer roten Kante beginnt, senkrecht auf dieser steht und durch den Mittelpunkt geht. Das sind gerade die cyanfarbenen Linien in der Zeichnung. Jeder andere Punkt auf dem Kreisrand kann nur eine Ecke des Rechtecks berühren, ohne dass sich Rechteck und Kreis schneiden.

Auf den Rest solltest Du nun selbst kommen.
 
Also ich weiss nicht, ob man bei so Threads noch antworten sollte. Es fehlt ja erneut jeder Ansatz hier selbst eine Lösung zu finden.

Ist es denn so schwer, sich da selbst Gedanken zu machen? Könnte man ein Rechteck nicht als Sammlung von Rechtecken ansehen? Rechtecken, bei denen alle Punkte die gleiche x oder gleiche y Koordinate haben? Also die Breite oder Länge eben 0 ist?

Und nur um den Berührungspunkt zu erkennen: Evtl. einfach einmal überlegen, was für Fälle es gibt. So kann der Kreis so angeordnet sein, wie da in der Zeichnung oder der Kreismittelpunkt kann höher als das Rechteck sein oder tiefer.
Für alle Fälle kann man sich überlegen:
a) Wie erkenne ich den Fall?
b) Wie kann ich ermitteln, ob es Berührungen gibt.

Ansonsten ist das einfachste Geometrie. Evtl. einfach mal einen Schüler befragen ... Mathe 8te Klasse oder so würde ich das einordnen.
 
Doch an sich, nur habe ich das nicht kapiert. Bezüglich der Geometrie ist das mir shcon klar, nur wie ich das umsetze.
Also ich weiss nicht, ob man bei so Threads noch antworten sollte. Es fehlt ja erneut jeder Ansatz hier selbst eine Lösung zu finden.

Ist es denn so schwer, sich da selbst Gedanken zu machen? Könnte man ein Rechteck nicht als Sammlung von Rechtecken ansehen? Rechtecken, bei denen alle Punkte die gleiche x oder gleiche y Koordinate haben? Also die Breite oder Länge eben 0 ist?

Und nur um den Berührungspunkt zu erkennen: Evtl. einfach einmal überlegen, was für Fälle es gibt. So kann der Kreis so angeordnet sein, wie da in der Zeichnung oder der Kreismittelpunkt kann höher als das Rechteck sein oder tiefer.
Für alle Fälle kann man sich überlegen:
a) Wie erkenne ich den Fall?
b) Wie kann ich ermitteln, ob es Berührungen gibt.

Ansonsten ist das einfachste Geometrie. Evtl. einfach mal einen Schüler befragen ... Mathe 8te Klasse oder so würde ich das einordnen.
Also ehrlich gesagt, dachte ich, ich habe den ersten Teil schon gelöst.
nun habe ich festgestellt, dass anscheinend die Berührung schon falsch sei. ALso ich dachte zumindest b) hätte ich schon ,aber anscheinend bzw offensichtlich ist getrectangle().intersects(circle.getBounds2D()) falsch, nach den Aussagen des vorherigen Kommentators.

Ich dachte zudem, es gibt irgendwie 1 bis 2 Methoden, die mir direkt einfach dann sagen, ob ich es getroffen habe oder nicht.
 
Vielleicht erstmal zeichnen?


Das wage ich zu bezweifeln:
Anhang anzeigen 18133
Wie unschwer zu erkennen ist, könnte man das rote Rechteck (circle.getBounds2D()) so weit nach oben schieben, dass es zwar weiterhin das blaue Rechteck berührt, zwischen dem blauen Rechteck und dem Kreisrand aber kein Berührungspunkt existiert. Umgekehrt könnte man das rote Rechteck nach links schieben. Dann schneiden sich Rechteck und Kreis, berühren sich also nicht nur.

Ebenfalls unschwer zu erkennen ist, dass es einen Berührungspunkt mit den Kanten des blauen Rechteck nur auf einer Linie geben kann, die auf einer roten Kante beginnt, senkrecht auf dieser steht und durch den Mittelpunkt geht. Das sind gerade die cyanfarbenen Linien in der Zeichnung. Jeder andere Punkt auf dem Kreisrand kann nur eine Ecke des Rechtecks berühren, ohne dass sich Rechteck und Kreis schneiden.

Auf den Rest solltest Du nun selbst kommen.
Danke, aber bei unser Aufgabe wurde explizit genannt, dass wir schauen sollen, ob sich die "Bounding Boxen" überschneiden. Deshalb ging ich davon aus, dass das das sei. Also mit getrectangle().intersects(circle.getBounds2D())
 
Jetzt wo ich mir relativ sicher bin, dass wir die bounding boxen nur überprüfen müssen, also dass die rote Box die blaue trifft, ist es mathematisch nicht schwierig, ich weiß aber ja nicht wie ich einen Punkt bekomme, um das zu berechnen, wo wir sind, ich weiß nur:

if(getrectangle().intersects(circle.getBounds2D())){
}

so weiß ich, dass die sich getroffen haben. Wir sollen aber ja schauen mit welcher Seite, das heißt ja, ich muss irgendwie auf die x bzw. y-Wert. Beziehungsweise ich benötgie nur einen Punkt, wo die sich berühren, aber wi ebekomme ich den?

(Kann ich da mit intersectsline vorgehen?)
 
Ein paar Ideen:
a) Schreib doch einfach etwas mehr über so Aufgaben. Es ist einfach Scheiße, wenn man wichtige Dinge nicht zu hören bekommt bzw. diese erst nach und nach kommen nachdem man unnötige Dinge geschrieben hat.
b) wie wäre es, wenn Du einfach einmal Antworten, die Du bekommst, liest und versuchst zu verstehen. So hast Du schon eine klare Möglichkeit genannt bekommen.

Aber ich denke, ich bin dann jetzt bei Deinen Threads / Texten dauerhaft raus und wünsche Dir viel Erfolg bei was auch immer du machst. (Ich hoffe nur, dass es kein Studium der Informatik ist ... 🙂 )
 
Ein paar Ideen:
a) Schreib doch einfach etwas mehr über so Aufgaben. Es ist einfach Scheiße, wenn man wichtige Dinge nicht zu hören bekommt bzw. diese erst nach und nach kommen nachdem man unnötige Dinge geschrieben hat.
b) wie wäre es, wenn Du einfach einmal Antworten, die Du bekommst, liest und versuchst zu verstehen. So hast Du schon eine klare Möglichkeit genannt bekommen.

Aber ich denke, ich bin dann jetzt bei Deinen Threads / Texten dauerhaft raus und wünsche Dir viel Erfolg bei was auch immer du machst. (Ich hoffe nur, dass es kein Studium der Informatik ist ... 🙂 )
Ich glaube man hat nicht kapiert was ich meine. Das zu berechnen ist ja leicht, aber zuvor benötigt man ja die x und y koordinaten, um überhaupt irgendetwas zu berehcnen, ich weiß ja nicht mal wie man darauf kommt. es gibt ja unzählige x und y- koordinaten.
 
wusste nicht, dass er eine getx methode hat, die aber eigentlich nicht zu ihm gehört und das deshalb nicht bei dem in den Methoden steht...
Die Methoden gehören schon zu Rectangle2D. Die Klasse Rectangle2D ist von Klasse RectangularShape abgeleitet und erbt daher die Methoden dieser Klasse.

Die JavaDocs sind so aufgebaut, dass die geerbten Methoden im Anschluss an die in einer Klasse definierten bzw. dort überschriebenen Methoden in Kurzform aufgelistet werden (nach dem Abschnitt "Method summary"). Wenn Du in die Doku von Rectangle2D schaust, findest Du dort "Methods inherited from class java.awt.geom.RectangularShape" und danach "Methods inherited from class java.lang.Object".
 

Zurück
Oben