User Tools

Site Tools


pub:labprog:20171113

Metodi (2) + inizio array

segment() che si basa su plot()

/*
	GOBBY
		dai pc   172.22.83.53 //Da locale funziona
		da fuori (portatili) atrent.it:993
*/
 
// METODI statici (per ora)
import java.util.*;
 
public class Metodi2  {
 
    public static final double MINY=-1.5,MAXY=1.5;
    public static final int WIDTH=80,HEIGHT=25;
 
    static double maxX, minX;
 
/*
- (dopo) chiedere all'utente quale funzione va plottata (sin, cos, tan....)
- chiedere all'utente i limiti per x (min
 
import java.util.Scanner;, max)
- chiedere all'utente il carattere da usno: X in orizzontale)
	DEVO cioè inventarmi un "metodo" (appunto!) per disegnare sullo schermo in un punto qualsiasi
are per plottare
- PLOTTARE funzione (ruotando il piano cartesia*/
 
//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 {
 
		/*
			System.out.println(map(5,0,10,10,20));
			System.out.println(map(5,0,10,0,20));	
			System.out.println(map(5,0,10,0,80));
        System.exit(0);
        */
 
        /* solo a scopo di test
        maxX=20;
        minX=0;
        plot(10,15,'l');
        plot(3,5,'v');
        plot(1,1,'v');
        plot(0,0,'V');
        for(int i=1;i<15;i++)
	        plot(i,i,'v');
        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
        */
 
 
		segment(1,1,2,3);
		segment(1,1,3,5);
 
 
        System.exit(0);
        for(double cursor = minX; cursor<maxX; cursor++) {
            plot(cursor, Math.sin(cursor), carattereDiPlot);
 
        }
    }
 
 
 
    static int calcolaCXdaX(double x) {
 
        // WIDTH & (HEIGHT)
        // ho la x
        // ho minX e maxX
 
        return (int)map(x, minX, maxX, 0, WIDTH);
    }
    static int calcolaCYdaY(double y) {
        return (int)map(y, MINY, MAXY, 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(...)
 
    	...
 
 
    }
    */
 
    /**
    		"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 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");
        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;
    }
 
 
    // https://en.wikipedia.org/wiki/Line_drawing_algorithm
    static void segment(double x1, double y1, double x2, double y2){
    	double dx = x2 - x1;
		double dy = y2 - y1;
 
		for(double x=x1;x<=x2;x+=0.01) {
		  double y = y1 + dy * (x - x1) / dx;
		  System.err.print(x);
		  System.err.print(",");
		  System.err.print(y);L
		  System.err.println();
		  plot(x, y, 'j');
		}
    }
}

inizio esempi array

import java.util.*;
 
 
 
/**
 preparazione per LIFE (https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life)
*/
 
public class Matrice  {
 
    /*
    	riempire array monodimensionale di double a partire da stdin
 
 
 
    	in input ci danno:
 
    	35 1.4 1.7 4.6 7.8
 
    	stringa unica "digitata" interamente a linea di comando che contiene al primo posto un numero (dimensione array) e di seguito, separati da spazio, i numeri con cui riempire array
 
    	una volta "riempito" dire quanti ne sono stati effettivamente inseriti
    	e calcolare media dei valori (solo di quelli inseriti)
 
 
    	(aggiunta) a posteriori eliminare (azzerare) i valori oltre un limite prefissato (es. 10000000)
 
    	(in futuro)
    ........*....
    .***......*..
    ...**........
    ...*...*.....
 
    */
 
    public static void main(String[] arg)
    throws Exception {
 
        Scanner in=new Scanner(System.in);
 
        int dimArray=in.nextInt();
        double[] array=new double[dimArray];
 
        double somma=0;
        int counter=0;
        for(;in.hasNext();counter++){ // CONDIZIONE INPUT BASED
	        array[counter]=in.nextDouble();
	        somma+=array[counter];
	        //System.out.println(array[counter]);
        }
 
        System.out.println(Arrays.toString(array));
 
        System.out.print("sono stati inseriti: ");
        System.out.print(counter);
        System.out.println(" valori");
 
        System.out.print("la media è: ");
        System.out.println(somma/counter);
 
        System.exit(0);        
 
 
 
		/*
        String s="";
        int max=0,i=0,somma=0;
       */
 
        System.out.println("inserisci riga completa");
 
			// tuttaLaRiga= in.nextLine(); // poi mi tocca usare tokenizer
 
			// tentativo senza tokenizer
 
/*
        max=in.nextInt();
        in.nextLine();
 
        double [] input = new double [max];
 
        System.out.println("inserisci stringa");
 
 
 
        s=in.nextLine();
 
 
 
        StringTokenizer str=new StringTokenizer (s);
        System.out.println("str: "+ str.hasMoreTokens());
        while(str.hasMoreTokens()) {
            Double d1=new Double(str.nextToken());
            //d1= Double( );
            System.out.println("i: "+i);
            input[i]=d1;
            i++;
            somma+= (double) d1/i;
        }
        double media= (double)
                      System.out.println("il numero di valori inserito è : "+i);
        //System.out.print(media);
 
        */
    }
}
pub/labprog/20171113.txt · Last modified: 2017/11/13 16:59 by atrent