Differences
This shows you the differences between two versions of the page.
— |
pub:labprog:20171106 [2017/11/06 17:16] (current) atrent created |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== 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". | ||
+ | |||
+ | <code java> | ||
+ | |||
+ | /* | ||
+ | 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 | ||
+ | |||
+ | </code> |