Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [java] Ellipse2D.double

    Salve, ho un piccolo problema con il metodo costruttore di Ellips2D.Double.
    Mi sono imbattuto in questo metodo per disegnare una circonferenza e se cambio le coordinate o le dimensioni, cambia pure la forma della mia circonferenza.
    Esempio:

    codice:
    double x=284,y=436,w=5,h=5;
    Ellipse2D.Double prova=new Ellipse2D.Double(x,y,w,h); 
    Graphics2D g2d = (Graphics2D) g; 
    g.setColor(Color.RED); 
    g2d.fill(prova);
    Come risultato finale non mi d'ha una circonferenza ma un quadrato.

    Se invece cambio le coordinate in x=284.50 e y=436.50 ottengo una circonferenza perfetta.
    Vorrei capire la motivazione di questo teorema: AL VARIARE DELLE COORDINATE x,y VARIA LA FORMA DELLA CIRCONFERENZA (da double a int).
    In particolare mi interesserebbe realizzare una circonferenza con w e h=3.
    Grazie anticipatamente per la risposta
    L'importante non è partecipare.. ma
    vincere!
    Errare Humanum EST, perseverare.. a OVEST!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [java] Ellipse2D.double

    Originariamente inviato da offlieman
    double x=284,y=436,w=5,h=5;
    In particolare mi interesserebbe realizzare una circonferenza con w e h=3.
    I quattro valori che passi per costruire un Ellipse2D.Double rappresentano, in generale, il rettangolo in cui è inscritto l'ellisse.

    Solo che con w/h = 5 e w/h = 3 (ammesso che la trasformazione resti quella predefinita, cioè 1 unità = 1 pixel) hai un rettangolo molto piccolo. Non so che razza di circonferenza puoi vedere!!! Il fatto è che probabilmente "sembra" più un rettangolo che un cerchio, specialmente se non c'è l'anti-aliasing attivato (non è attivo per default).
    E il fatto che ti sembra che cambi forma se metti delle coordinate a "metà" del pixel (284.50,436.50) è proprio perché con quelle dimensioni e dovendo il Graphics "arrotondare" ai pixel se non c'è l'anti-aliasing, lo disegna leggermente diverso.

    Quindi inizia con l'attivare l'anti-aliasing:

    codice:
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ..uhmm... ...mummble mummble....

    Ok, con ANTIALIASING il tutto è molto più pulito e alla fine si vede il cerchio quanto basta.
    Per la seconda volta ti ringrazio per avermi aiutato.

    Adesso ho un altro problema, non scrivo un nuovo argomento perchè fa sempre parte di Ellipse2D.double.

    TESTO: Devo generare 2 cerchi in posizione random e devo stare attento che i due cerchi non si tocchino tra di loro.

    codice:
    double w=4,h=4; 
    double x=(Math.random()*larghezza); 
    double y=(Math.random()*altezza); 
    
    Ellipse2D.Double cerchio=new Ellipse2D.Double(x,y,w,h); 
    
    x=(Math.random()*larghezza); 
    y=(Math.random()*altezza); 
    Ellipse2D.Double aux=new Ellipse2D.Double(x,y,w,h); 
    // non funziona perchè nelle api intersect (Rectangle2D r) 
    // boolean ctr=cerchio.intersects(aux); // non funziona 
    //allora ho provato lo stesso metodo ma con le coordinate 
    boolean ctr=cerchio.intersects(x,y,w,h); // ma non funziona lo stesso
    L'importante non è partecipare.. ma
    vincere!
    Errare Humanum EST, perseverare.. a OVEST!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.