/**
 *  @author Carletti Simone
 *  @version 1.0 - 2004.11.11
 */

/**
*  Contiene costruttori, metodi ed informazioni per la creazione di oggetti di tipo poligono.
*/
public class Poligono
{

	// Variabili d'istanza

	private Punto[] a;
	private int i, j;

	/**
	 *  Costruttore per gli oggetti della classe Punto
	 *
	 *  NOTE: tutti i valori dell'array devono essere >= 0
	 *
	 *  @param  x   array contenente le coordinate x (indici pari) e y (indici dispari) dei punti.
	 */
	public Poligono(int[] x)
	{

		// controlla condizione valori > 0
		for (i=0; i <= (x.length-1); i++)
		{
			if (x[i] < 0) throw new IllegalArgumentException();
		}

		a = new Punto[x.length / 2];

		// Per ogni valore dell'array coordinate punto
		// crea un nuovo punto del poligono
		// Indici pari = x ; dispari = y
		for (i=0; i <= (x.length -1); i += 2)
		{
			a[i/2] = new Punto(x[i], x[i+1]);
		}

	}


	// SELETTORI ?

	/**
	 *  Calcola il perimetro del poligono
	 *
	 *  @return perimetro del poligono
	 */
	public double perimetro()
	{
		double pm = 0;

		for (i=1; i <= a.length; i++)
		{
                    /*  Per il perimetro dovremmo richiamare il metodo distanza
                     *  per ogni punto (indice array) per il punto successivo 
                     *  (indice + 1) eccetto per l'ultimo punto che andrà 
                     *  ovviamente distanziato dal primo.
                     *
                     *  Si potrebbe verificare con un if se è l'ultimo punto
                     *  ma per complicarci la vita ;o) Boella esige un metodo
                     *  alternativo. Cosa fare?
                     *
                     *  Trovato! Usare il mod, ovvero resto divisione.
                     *  Si spostano gli indici (parte da 0) ad un contatore 
                     *  (parte da 1) e con il resto della divisione per il 
                     *  numero elementi si ricava l'indice dell'elemento a cui
                     *  sommare.
                     */
                    pm += a[i-1].distanza(a[i % a.length]);
                    System.out.println("debug - distanza da " + (i-1) + " a " + (i % a.length) + " = " + (a[i-1].distanza(a[i % a.length])) + " / " + pm);
		}
                return pm;
	}

	/**
	 *	Trasla il poligono di valori dati
	 *
	 *  @param  asc     spostamento sull'asse delle x (ascisse)
	 *  @param  ord     spostamento sull'asse delle Y (ordinate)
	 *
	 *  @return     void
	 */
	public void trasla(double asc, double ord)
	{
		// Scorri tutti i punti
		for (i=0; i <= a.length -1; i++)
		{
			a[i].trasla(asc, ord);
		}
	}

}