User Tools

Site Tools


pub:labprog:20171106

Metodi

FIXME da completare (prossima volta)

Strutturare il proprio programma delegando micro funzionalità a piccoli metodi da invocare costruendo metodi sempre più complessi che si basano su quelli “di base”.

/*
	GOBBY
		dai pc   172.22.83.53 //Da locale funziona
		da fuori (portatili) atrent.it:993
*/
 
// METODI statici (per ora)
 
/*
- (dopo) chiedere all'utente quale funzione va plottata (sin, cos, tan....)
- chiedere all'utente i limiti per x (min, max)
- chiedere all'utente il carattere da usare per plottare
- PLOTTARE funzione (ruotando il piano cartesiano: X in orizzontale)
	DEVO cioè inventarmi un "metodo" (appunto!) per disegnare sullo schermo in un punto qualsiasi
*/
 
import java.util.Scanner;
 
public class Metodi  {
 
    public static final double MINY=-1.5,MAXY=1.5;
    public static final int WIDTH=80,HEIGHT=25;
 
    static double maxX, minX;
//ora che le variabili sono esterne al main mantengono il valore dato all'interno del main anche quando vengono utilizzate in altri metodi?
 
    public static void main(String[] arg)
 
    throws Exception {
 
 
        // solo a scopo di test
        //plot(10,15,'l');
        //plot(3,5,'v');
 
        //NON HO CAPITO PERCHÈ DOBBIAMO CALCOLARE A PRIORI LA GRANDEZZA DELL'AREA DI PLOT, NON POSSIAMO INSERIRLA TRANQUILLAMENTE DA TASTIERA?
 
        //System.exit(0);
 
 
 
 
 
 
        char carattereDiPlot; // not yet implemented
 
 
 
        Scanner in = new Scanner(System.in);
 
        System.out.print("Inserisci la partenza (minX): ");
        minX = in.nextDouble();
        System.out.print("Inserisci l'arrivo (maxX): ");
        maxX = in.nextDouble();
 
        in.nextLine(); // svuotare buffer
 
        System.out.print("Inserisci il carattere di 'plot': ");
        carattereDiPlot = in.nextLine().charAt(0);
        //Possiamo prendere il primo carattere della stringa letta
 
        // ipotesi alternativa: carattereDiPlot = System.in.read();
 
 
        System.out.println(calcolaCXdaX(5)); // se metto min 0 e max 10 viene 40
        System.out.println(calcolaCYdaY(5)); // viene ...  >25
        System.out.println(calcolaCYdaY(-1.5)); // viene 0
        System.out.println(calcolaCYdaY(1.5)); // viene 25
 
        System.exit(0);
 
        for(double cursor = minX; cursor<maxX; cursor++) {
            plot(cursor, Math.sin(cursor), carattereDiPlot);
 
        }
 
 
 
 
 
    }
 
 
 
 
    /**
    		"plotta" un singolo "pixel" (carattere su uno schermo) in un particolare punto dello schermo stesso
 
 
    		SCHERMO (0,0)
 
 
 
    										(80,25)
 
 
 
    ---------------------------------------------------------------------
 
    											(...,MAXY)
 
 
 
 
 
    		Funzione (minX,F(minX))											(maxX,F(maxX))
 
 
 
 
 
    											(...,MINY)
 
    */
 
 
    static int calcolaCXdaX(double x) {
 
        // WIDTH & (HEIGHT)
        // ho la x
        // ho minX e maxX
 
        return (int)map(x, maxX, minX, 0, WIDTH);
    }
    static int calcolaCYdaY(double y) {
        return (int)map(y, MAXY, MINY, 0, HEIGHT);
    }
 
    /*
     static void square(double x, double y, double lato){
     	...
     	segment(...);
     	segment(...);
     	segment(...);
     	segment(...);
     }
 
 
    static void segment(double x1, double y1, double x2, double y2){
 
    	...
 
    	plot(...)
 
    	...
 
 
    }
    */
 
    static void plot(double x, double y, char c) {
 
        System.out.print((char)27);
        //System.out.print("["+(int)x+";"+(int)y+"H");
        System.out.print("["+calcolaCXdaX(x)+";"+calcolaCYdaY(y)+"H");
 
        /*
        // ribaltato (verticalmente)
        // tanti a capo quante sono le Y
        for(int cursore=0;cursore<y;cursore++)
        	System.out.println();
        // tanti spazi quante sono le X
        for(int cursore=0;cursore<x;cursore++)
        	System.out.print(" ");
        */
 
 
 
        /* x ignorata, per implementazione di "regressione"
        for(int i=0; i<y; i++)
            System.out.print(" ");
        */
 
        System.out.println(c);
    }
 
    /**
    	x valore ingresso
    	in_min e in_max range valori in ingresso
    	out_min e out_max range valori in uscita
    */
    static double map(double x, double in_min, double in_max, double out_min, double out_max)
    {
        return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
    }
 
 
}
 
 
//Si può disabilitare dalle impostazioni la visualizzazione della selezione degli altri users
pub/labprog/20171106.txt · Last modified: 2017/11/06 17:16 by atrent