Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    163

    disegni complessi in applet

    ciao! devo fare una applet che disegna dei cerchi,dettagli:
    - la quantità è presa da input.
    - l'area in cui vengono disegnati i cerchi è un panel ereditato quadrato.i cerchi devono avere il centro sulla diagonale del panello.
    - la dimensione dei cerchi varia: a partire dalla posizione x,y 00 diverranno sempre più grandi fino ad arrivare al centro della diagonale.da quel punto in poi vanno a rimpicciolirsi.
    - i cerchi non si toccano mai.

    il mio docente ha detto che si risolve utilizzando il teorema di pitagora e il metodo sqrt della classe math. onestamente non so come muovermi. sono sempre stato una schiappa in matematica!

    dovrebbe venir fuori una cosa del genere (la diagonale non serve):


    il codice già scritto.
    pannello.java:

    Codice PHP:
    import java.awt.*;

    public class 
    pannello extends Canvas{

        private 
    int n;
        private 
    int i;

        public 
    void paint (Graphics g){
            
    g.setColor(Color.GREEN);
            for ( 
    i=0ni++) {
                
    g.drawOval( ?, ?, ?,?);
                
            }

            
        }

        public 
    void setDati(int n){
            
    this.n=n;
            
    repaint();
        }


    cerchi.java:
    Codice PHP:
    import java.applet.*;
    import java.awt.*;
    import java.awt.event.*;

    public class 
    cerchi extends Applet implements ActionListener{
        
        private 
    TextField n;
        private 
    Button ok;
        private 
    Panel sud;
        private 
    pannello centro;
        
        public 
    void init(){
            
    = new TextField(this.getParameter("n"));
            
    ok = new Button("Ok");
            
    sud = new Panel(new GridLayout(1,4));
            
    centro = new pannello();
            
            
    sud.add(n);
            
    sud.add(ok);
            
    this.setLayout(new BorderLayout());
            
    this.add(sud,BorderLayout.SOUTH);
            
    this.add(centro,BorderLayout.CENTER);
            
    ok.addActionListener(this);
            
        }

        public 
    void start(){
            
    System.out.println("start");    
            try{
            
    centro.setDati(Integer.parseInt(n.getText()));
            }
            catch (
    Exception e){ }
        }
        
        public 
    void actionPerformed(ActionEvent evt){
            try{
            
    centro.setDati(Integer.parseInt(n.getText()));
            }
            catch (
    Exception e){ }
        }
        
        public 
    void stop(){
            
    System.out.println("stop");        
        }

        public 
    void destroy(){
            
    System.out.println("destroy");        
        }


  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Se il problema è solo di matematica, allora forse sei sul forum sbagliato

    Tolto pitagora, alla base c'è da capire come funziona il sistema di riferimento "standard" in java: a scuola probabilmente avrai studiato che il sistema cartesiano ha assi ortogonali ed "origine" di norma posta al centro, dove gli assi si intersecano.

    In java, gli assi hanno origine nell'angolo in alto a sinistra, le x crescono verso destra - come nel sistema classico, mentre le y crescono verso il basso:

    codice:
    O                                  X
      +---------------------->
      |
      |
      |
      |
      |
      |
      |
      |
      V
    Y
    Quindi il centro grafico della tua immagine non si trova in (0,0) - che invece corrisponde all'angolo in altro a sx, ma in (larghezza/2, altezza/2).

    Per farla breve: devi trovare la lunghezza della diagonale (e come ti ha suggerito il tuo professore, si utilizza il teorema di pitagora)

    codice:
    d = sqrt(larghezza^2+altezza^2);
    
    ovvero nel tuo caso, essendo un quadrato
    d = sqrt(2)*larghezza
    E dopo stabilire una regola per disegnare i cerchi: per esempio, aggiungere uno spazio di qualche pixel tra un cerchio e l'altro affinché nella grafica appaiano distanziati. E poi, decidere, se non ti hanno fornito una relazione tra i vari raggi, in che modo far decrescere la misura dei raggi dal cerchio più grande al centro a quelli più piccoli verso gli angoli.

    Comincia intanto con lo scrivere un applet per disegnare un cerchio al centro della tua area quadrata e la diagonale dall'angolo in alto a sx a quello in basso a dx, tanto per impratichirti con il sistema cartesiano di java...
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    163
    ok non sarà facile
    per disegnare un cerchio al centro quindi sarebbe qualcosa tipo:

    Codice PHP:
        public void paint (Graphics g){
        
            
    Math.sqrt(2)*200;
            
            
    g.setColor(Color.GREEN);
            for ( 
    i=0ni++) {
                
    g.drawOvalDouble.intValue(d/2), Double.intValue(d/2), 10,10);
                
            }

    dove x e y stanno alla metà di d. tra l'altro mi da pure errore nelle coordinate, drawOval richiede int quindi sarà sbagliata la conversione..

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da nephilim89

    Codice PHP:
    g.drawOvalDouble.intValue(d/2), Double.intValue(d/2), 10,10); 
    Un metodo intValue() esiste in Double (e gli altri "wrapper"). Ma non ha parametri. Non è così che devi ottenere un int.

    E se il dubbio è cosa sono i 4 parametri di drawOval, basta vedere il javadoc:

    drawOval(int x, int y, int width, int height)

    x - the x coordinate of the upper left corner of the oval to be drawn.
    y - the y coordinate of the upper left corner of the oval to be drawn.
    width - the width of the oval to be drawn.
    height - the height of the oval to be drawn.

    E siccome devi passare dei int, se hai dei double o una espressione double, farai un cast, es.

    drawOval((int) (d/2), .........

    Tutto qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2025 vBulletin Solutions, Inc. All rights reserved.