Logical OR als Ausgabewert

Jere

Grünschnabel
Hallo Leute,


ich habe gestern Abend die ganze Zeit an einem Problem gesessen, das ich einfach nicht verstanden habe.
Ich habe Rectangle2D.Float.outcode() benutzt, um herauszufinden, wo sich ein bestimmter Punkt befindet. Solange sich der Punkt an keiner Ecke befand hat das auch super funktioniert. Als der Punkt sich aber an einer Ecke befand und somit 2 Werte herausgegeben werden müssten (einmal Rectangle2D.OUT_LEFT oder Rectangle2D.OUT_RIGHT und dann Rectangle2D.OUT_TOP oder Rectangle2D.OUT_BOTTOM), hat das Ganze irgendwie nicht mehr wirklich funktionieren wollen.

Ich habe den Code einmal etwas vereinfacht. So sieht er aus:

Java:
int pos = r.outcode(x,y);

if (pos == Rectangle2D.OUT_BOTTOM)
    System.out.println("unten");
if (pos == Rectangle2D.OUT_TOP)
    System.out.println("oben");
if (pos == Rectangle2D.OUT_RIGHT)
    System.out.println("rechts");
if (pos == Rectangle2D.OUT_LEFT)
    System.out.println("links");

Wenn sich nun der Punkt (x,y) bei einer Ecke befindet, gibt es keine Ausgabe.

Ich habe zwar das Ganze mit einer eigenen Methode gelöst, die ein Array ausgibt, weil es mir zu blöd wurde, aber ich wüsste doch ganz gerne, ob das nicht irgendwie einfacher geht.

Ich habe gesehen, dass die Methode Rectangle2D.Float.outcode() ein "logical OR" ausgibt, weiß aber nicht recht, wie man damit nun umgehen soll und habe auch nicht wirklich etwas dazu gefunden. Ich nehme an, da liegt das Problem. Kann mir bitte jemand helfen?

Schon einmal vielen Dank!


Gruß,
Jere
 
Hi und Willkommen bei Tutorials,

bevor wir dir weiterhelfen können, brauchen wir erstmal eine genaue Fragestellung. Was genau willst du von uns wissen? Willst du wissen, ob ein Punk innerhalb von einem Rectangle-Objekt liegt?

Gruß

Fabio
 
Hi

ich glaub, ich weiß was du meinst.
Schreib einmal:
Java:
if ((pos & Rectangle2D.OUT_BOTTOM) != 0)
    System.out.println("unten");
und auch bei den anderen dreien so.
 
Jaaa, tatsächlich, genau das ist es!
Vielen Dank! :)

Aber wenn ich ehrlich sein soll, verstehe ich diese Syntax nicht so ganz... :-(
 
RIGHT ist 1, LEFT 2, BOTTOM 4 und TOP 8 (oder sowas in der Art, kann auch 16, 32, 64 und 128 sein,solange es sich nur immer verdoppelt).
Bleiben wir beispielsweise bei 1/2/4/8.
Im Binärsystem sind diese Zahlen 0001/0010/0100/1000.
Immer ein Einser an einer anderen Stellen.

Wenn jetzt die Kombination BOTTOM/RIGHT herauskommt, kommt 1010.
Also zwei Einser an den Stellen von RIGHT UND BOTTOM.
1010 ist umgerechnet 10.

Du hast vorher nur geprüft, ob genau 1, 2, 4 oder 8 herauskommt.
Ich prüfe jetzt für alle vier Stellen, ob ein Einser dort steht; jeweils unabhängig von den anderen drei Stellen der Binärzahl.

& nennt sich "Bit-Und", "bit-Or" oder wie auch immer....
 
Zuletzt bearbeitet:
Aaah ok! Ich muss gestehen, dass ich mich mit binären Zahlen noch nicht so gut auskenne, aber mit etwas Nachdenken und ein paar Mal Lesen deines Posts habe ich es nun soweit verstanden. :D

Also vielen Dank nochmal! :)
 
@sheel
Immer muss ich dich berichtigen ... oder soll ich in Zukunft wahlos mit Wiki-Links um mich werfen ? xD
 

Neue Beiträge

Zurück