tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von sheel
  • 1 Beitrag von sheel
ERLEDIGT
JA
ANTWORTEN
11
ZUGRIFFE
424
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Jere
    Jere Jere ist offline Grünschnabel
    Registriert seit
    Sep 2011
    Beiträge
    3
    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:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    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
     

  2. #2
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist gerade online Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    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
     
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  3. #3
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.502
    Hi

    ich glaub, ich weiß was du meinst.
    Schreib einmal:
    Code java:
    1
    2
    
    if ((pos & Rectangle2D.OUT_BOTTOM) != 0)
        System.out.println("unten");
    und auch bei den anderen dreien so.
    Jere bedankt sich. 
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  4. #4
    Avatar von Jere
    Jere Jere ist offline Grünschnabel
    Registriert seit
    Sep 2011
    Beiträge
    3
    Jaaa, tatsächlich, genau das ist es!
    Vielen Dank!

    Aber wenn ich ehrlich sein soll, verstehe ich diese Syntax nicht so ganz...
     

  5. #5
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.502
    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....
    Geändert von sheel (02.09.11 um 14:39 Uhr)
    Jere bedankt sich. 
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  6. #6
    SE Tutorials.de Gastzugang
    @sheel

    & , | , ^ -> Bit-Operatoren
    && , || , ! -> logische Operatoren
     

  7. #7
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.502
    Stimmt natürlich.
    Danke für die Korrektur.
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  8. #8
    Avatar von Jere
    Jere Jere ist offline Grünschnabel
    Registriert seit
    Sep 2011
    Beiträge
    3
    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.

    Also vielen Dank nochmal!
     

  9. #9
    SE Tutorials.de Gastzugang
    @sheel
    Immer muss ich dich berichtigen ... oder soll ich in Zukunft wahlos mit Wiki-Links um mich werfen ? xD
     

  10. #10
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.502
    Möglichkeit 3: Schneller werden als ich
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  11. #11
    SE Tutorials.de Gastzugang
    Hmm ... daran müsste ich arbeiten ... aber mit ner 6'000er Standleitung is da nich viel drin ...
     

  12. #12
    Avatar von Akeshihiro
    Akeshihiro Akeshihiro ist offline Mitglied Platin
    Registriert seit
    Aug 2008
    Ort
    Kirchlengern (NRW)
    Beiträge
    647
    Den Post möglichst früh entdecken und möglichst schnell eine Antwort runtertippen... Das sollte das Problem weitestgehend beheben können (außer der andere kommt auf die gleiche Idee ).
     
    Man sagt, das Schwert eines Samurai sei seine Seele ...

    Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.

    Das Schmieden ist eine Kunst; Das Schreiben auch ;)

Ähnliche Themen

  1. Falscher Ausgabewert in C
    Von BataL im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 14.11.01, 00:36