Visualizzazione dei risultati da 1 a 8 su 8

Discussione: grafica con Java

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    232

    grafica con Java

    Salve, devo realizzare dei grafici di funzioni matematiche e rappresentare valori calcolati mediante la statistica sempre in dei grafici. qualcuno conosce qualche guida in particolare? in rete ho fatto qualche ricerca ma non so da dove iniziare...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da 5t4rdu5t Visualizza il messaggio
    Salve, devo realizzare dei grafici di funzioni matematiche e rappresentare valori calcolati mediante la statistica sempre in dei grafici. qualcuno conosce qualche guida in particolare?
    Le cose sono due: o utilizzi una libreria apposita per i grafici (ce ne sono, ad esempio JFreeChart ma non è immediatissima da usare) oppure fai tutto "a mano" andando a disegnare su un componente (in Swing tipicamente estendendo JPanel) utilizzando la tecnica del custom painting.

    Dipende comunque molto dal tipo di grafico, dal livello di qualità e di adattamento/generalizzazione che vuoi ottenere. Magari spiega meglio, a parole (o con un disegnino), cosa vuoi realizzare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    232
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Le cose sono due: o utilizzi una libreria apposita per i grafici (ce ne sono, ad esempio JFreeChart ma non è immediatissima da usare) oppure fai tutto "a mano" andando a disegnare su un componente (in Swing tipicamente estendendo JPanel) utilizzando la tecnica del custom painting.

    Dipende comunque molto dal tipo di grafico, dal livello di qualità e di adattamento/generalizzazione che vuoi ottenere. Magari spiega meglio, a parole (o con un disegnino), cosa vuoi realizzare.
    premetto che su questo campo non so praticamente nulla...quello che serve a me è qualcosa di molto sempre e deve rappresentare graficamente i dati calcolati, per esempio disegnare una retta sul piano cartesiamo mi calcolo i dati necessati, usado anche formule, e poi li grafico. Non cerco requisiti alti al momento. Spero di essere stato chiaro, grazie .

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da 5t4rdu5t Visualizza il messaggio
    premetto che su questo campo non so praticamente nulla...quello che serve a me è qualcosa di molto sempre e deve rappresentare graficamente i dati calcolati, per esempio disegnare una retta sul piano cartesiamo mi calcolo i dati necessati, usado anche formule, e poi li grafico. Non cerco requisiti alti al momento. Spero di essere stato chiaro, grazie .
    JFreeChart praticamente non la conosco (avevo fatto qualcosa ma tanti tanti anni fa). Quindi su questa libreria non saprei dirti di più (e non ne conosco altre per i grafici).
    La soluzione del custom painting è fattibile, se non hai bisogno di chissà che cosa, ma richiede che tu abbia le idee abbastanza chiare su come funziona il painting in Swing nei componenti, come applicarlo correttamente e come usare gli oggetti Graphics/Graphics2D.
    Nulla di impossibile, ovviamente, ma se parti praticamente da zero è più difficile.

    Se sai l'inglese, puoi vedere il tutorial ufficiale:
    - Performing Custom Painting
    - 2D Graphics

    Se hai dubbi chiedi pure, questa "materia" la conosco molto bene. (e trovi esempi sul custom painting tra i miei Java Examples)
    Ultima modifica di andbin; 25-07-2015 a 18:26
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    232
    ho dato un occhiata ai link...diciamo che mi sono fatto qualche idea...comunque un ultriore problema è come dare i valori al grafico, mi spiego meglio: usando il metodo drawLine ottengo due punto e traccio la retta perfetto. Ma questi due punti li calcolo in un metodo apparte usando valori inseriti da tastiera, il metodo in questione è
    codice:
    public void setRegress( float c, float v, float avgX, float avgY ){
    . Ho letto che drawLine usa setX# ma non idea di come posso usarlo con il metodo setRegres visto che con quest'ultimo ottengo tutti e quattro i punti

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    232
    Quote Originariamente inviata da 5t4rdu5t Visualizza il messaggio
    ho dato un occhiata ai link...diciamo che mi sono fatto qualche idea...comunque un ultriore problema è come dare i valori al grafico, mi spiego meglio: usando il metodo drawLine ottengo due punto e traccio la retta perfetto. Ma questi due punti li calcolo in un metodo apparte usando valori inseriti da tastiera, il metodo in questione è
    codice:
    public void setRegress( float c, float v, float avgX, float avgY ){
    . Ho letto che drawLine usa setX# ma non idea di come posso usarlo con il metodo setRegres visto che con quest'ultimo ottengo tutti e quattro i punti
    Penso di aver risolto ho messo il frame dentro a questo metodo, quello citato sopra e per quanto riguarda i valori ho fatto un set. Ma è possibile fare un tasto reset generale per tutto? ossia se azzero i numero posso "azzerare" anche il grafico?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da 5t4rdu5t Visualizza il messaggio
    un ultriore problema è come dare i valori al grafico, mi spiego meglio: usando il metodo drawLine ottengo due punto e traccio la retta perfetto. Ma questi due punti li calcolo in un metodo apparte usando valori inseriti da tastiera, il metodo in questione è
    codice:
    public void setRegress( float c, float v, float avgX, float avgY ){
    . Ho letto che drawLine usa setX# ma non idea di come posso usarlo con il metodo setRegres visto che con quest'ultimo ottengo tutti e quattro i punti
    Quote Originariamente inviata da 5t4rdu5t Visualizza il messaggio
    Penso di aver risolto ho messo il frame dentro a questo metodo, quello citato sopra e per quanto riguarda i valori ho fatto un set. Ma è possibile fare un tasto reset generale per tutto? ossia se azzero i numero posso "azzerare" anche il grafico?
    Purtroppo mi viene da pensare che hai (ancora) le idee un po' confuse su come gestire il painting nei componenti. E non hai postato alcun codice, per cui non saprei nemmeno dire se quanto hai fatto è corretto/appropriato oppure no.

    Il minimo che puoi e dovresti fare è creare una classe che estende (tipico) JPanel e in cui fai l'override di paintComponent in cui disegni tutto il grafico. Poi questa tua classe può offrire metodi extra, tipo setValoriGrafico, resetGrafico, ecc.... che ovviamente servono a impostare e gestire il grafico. Un setValoriGrafico potrebbe ricevere un array di double o un array di oggetti Punto o altro, dipende dal concetto del grafico da rappresentare (nel tuo caso non ho ancora capito bene...). All'interno del metodo imposti la struttura dati interna alla classe e poi chiedi un repaint() affinché il paintComponent venga invocato successivamente per ridisegnare tutto il grafico.

    Questo, come si dice, è il "minimo sindacale" che si può fare. Poi si possono applicare tutta una serie di ottimizzazioni: una immagine off-screen di buffer, la possibilità di fare aggiunte "incrementali" al grafico, ecc... E si può realizzare il tutto nell'ottica MVC (Model-View-Controller) facendo una classe di "model" che contiene solo i dati e separatamente la classe che estende JPanel che si occupa solo della visualizzazione. Tutto questo comunque è di più, oltre al minimo che puoi fare.

    Comunque, cercherò sicuramente appena posso di creare un esempio di grafico, perché credo possa essere utile.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    232
    hai ragione...posto qui il codice che ho fatto:
    questa parte è per disegnare la retta
    codice:
    public class Graphics0 extends JFrame {
        
       static Graphics0 frame;
       public int x1;
       public int x2;
       public int y1;
       public int y2;
       
       public Graphics0 (String title){
           
           super(title);
           setBackground(Color.white);
            setSize(480,200);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           setLocationRelativeTo(null);
        }
     
       public  void drawLines(Graphics g) {
           
           Graphics2D g2d = (Graphics2D) g;
           g2d.drawLine(x1,y1,x2,y2);
        }
       public void paint(Graphics g) {
           
          super.paint(g);
          drawLines(g);
        
       }
    
       public void setLine( float X1,float X2,float Y1,float Y2 ){
           
           x1=(int)X1;
           x2=(int)X2;
           y1=(int)Y1;
           y2=(int)Y2;
       }
    questo metodo invece è quello che uso quando calcolo i valori che mi servono per la retta:
    codice:
     public void setRegress( float c, float v, float avgX, float avgY ){
       
           int x1= (int)(Math.random()*100);
           int x2= (int)(Math.random()*200)+50;
           float m = c / v;
           float q = avgY - ( m * avgX );
           
           
           float y1=m*x1+q;
           float y2=m*x1+q;
      
           String tmp = "( m = " + m + ", q = " + q + " )";
           regress.setText( tmp );
           
           Graphics0 frame = new Graphics0("Retta");
           frame.setLine(x1,x2,y1,y2);
           frame.setVisible(true);

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.