/** 
    Permette di costruire una freccia che e' definita da un 
    punto di partenza e un punto di arrivo. 
    Le coordinate del punto di partenza sono date nel costruttore,
    le coordinate del punto di arrivo invece sono modificabili
    con il metodo assengaPuntoArrivo().
*/

import java.awt.*;

public class Freccia {
    // coordinate del punto di partenza della freccia
    private int xPart, yPart;
    // coordinate del punto di arrivo della freccia
    private int xArr, yArr;
    //lunghezza della freccia
    private int lunghFr;

    /**
       Costruttore. 
       @param x: ascissa del punto di partenza
       @param y: ordinata del punto di partenza
    */

    public Freccia(int x, int y) {
	xPart = x; 
	yPart = y;
	lunghFr = 15;
    }

    /** 
	Assegna il punto di arrivo della freccia. La freccia 
	viene direzionata verso il punto di arrivo ed e' calcolata
	di lunghezza determinata dal parametro lunghFr.
	@param x: ascissa punto verso cui e' direzionata la freccia
	@param y: ordinata punto verso cui e' direzionata la freccia
    */

    public void assegnaPuntoArrivo(int x, int y) {
	// se il punto verso cui dovrebbe direzionarsi la freccia
	// coincide con il punto di partenza, la freccia non e' 
	// definita e il suo punto di arrivo viene assegnato 
	// coincidente con il punto di partenza. 
	if (x == xPart && y == yPart) {
	    xArr = x; 
	    yArr = y;
	}
	// altrimenti viene calcolato il punto di coordinate 
	// xArr, yArr che sono le cooridinate del punto di arrivo 
	// della freccia calcolate in modo che la freccia sia 
	// direzionata verso il punto (x, y) e sia di lunghezza
	// lunghFr 
	else {
	    double xV = x - xPart;
	    double yV = y - yPart;
	    double dist = Math.sqrt(xV*xV + yV*yV);
	    xArr = (int)(xPart + lunghFr*xV/dist);
	    yArr = (int)(yPart + lunghFr*yV/dist);
	}
    }

    /**
       Restituisce le coordinate del punto di partenza della
       freccia.
       @return Un array bidimensionale di interi che sono le coordinate
       del punto di partenza della freccia
     */

    public int[] dammiPuntoPartenza() {
	return new int[] {xPart, yPart};
    }

    /**
       Restutuisce le coordinate del punto finale della freccia.
       @return Un array bidimensionale di interi che sono le coordinate
       del punto finale della freccia
    */

    public int[] dammiPuntoFinale() {
	return new int[] {xArr, yArr};
    }

    /**
       Assegna la lunghezza della freccia
       @param lungh: lunghezza della freccia
    */

    public void assegnaLunghezza(int lungh) {
	lunghFr = lungh;
    }
}
