Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Funzione in java

  1. #1

    Funzione in java

    Stavo scrivendo un piccolo programmino per disegnare il grafico di una funzione in java, ho sviluppato il programma che disegna senza problemi le funzioni base tipo seno,coseno, adesso vorrei disegnare il grafico di questa funzione: y=somma(a*x^n) con 0..n n (praticamente una sommatoria). Come la tradurreste in java? vi metto il codice che ho sviluppato in modo da farvi capire meglio

    codice:
    import java.awt.*;
    import javax.swing.*;
    
    public class FunctionPanel extends JPanel {
    	int xMin=-7, xMax=7, yMin=-1, yMax=1;
    	//gli intervalli in cui vogliamo graficare
    	int larghezza=500, altezza=400;
    	//grandezza del JFrame
    	float fattoreScalaX, fattoreScalaY;
    	
    	public void paintComponent(Graphics g){
    		super.paintComponent(g); //va messo sempre
    		setBackground(Color.white);
    		fattoreScalaX=larghezza/((float)xMax-xMin);
    		fattoreScalaY=altezza/((float)yMax-yMin);
    		/*dobbiamo fare le proporzioni tra l'intervallo
    		 * di valori della finestra (500*400) e l'intervallo 
    		 * da graficare*/
    		
    		//incorniciamo il grafico in nero
    		g.setColor(Color.black);
    		g.drawRect(0, 0, larghezza-1, altezza-1);
    		//disegna assi cartesiani
    		g.setColor(Color.red);
    		g.drawLine(0, altezza/2, larghezza-1, altezza/2);
    		g.drawLine(larghezza/2, 0, larghezza/2, altezza-1);
    		//scrittura valori estremi degli assi
    		g.drawString(""+xMin, 5, altezza/2-5);
    		g.drawString(""+xMax, larghezza-10, altezza/2+5);
    		g.drawString(""+yMax, larghezza/2+5, 15);
    		g.drawString(""+yMin, larghezza/2+5, altezza-5);
    		//disegna il grafico della funzione in blu
    		g.setColor(Color.blue);
    		setPixel(g,xMin,f(xMin)); //punto iniziale
    		for(int i = 1;i<larghezza;i++){
    			//per ognuno dei pixel della finestra
    			float x = xMin+((float)i)/fattoreScalaX;
    			setPixel(g,x,f(x));
    		}
    		
    	}
    	//definizione della funzione statica da graficare
    	static float f(float x){
    		return (float)Math.sin(x);
    		//sin(x) è la funzione che decidiamo di graficare
    		
    	}
        void setPixel(Graphics g, float x, float y){
        	if(x<xMin || x>xMax || y<yMin || y>yMax)
        		return;
        	int ix = Math.round((x-xMin)*fattoreScalaX);
        	int iy = altezza-Math.round((y-yMin)*fattoreScalaY);
        	g.drawLine(ix, iy, ix, iy);
        	//disegna in effetti un singolo punto
        }
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Evidentemente dovrai fissare dei dati "n" ed "a" per mantenere il grafico "bidimensionale", al variare della sola variabile indipendentemente "x".

    Potresti in futuro prevedere dei colori diversi per diversificare i grafici della funzione anche al variare di "a" ed "n"
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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