/**
  *
  * Programmieraufgabe P-16 (geometrie2.jar)
  *
  * @author Leonhard Fellermayr
  * @version 1.0
  *
  */

/** Zugehrigkeit zum Package geometrie */

package geometrie;

import java.awt.Graphics2D;

/** Implementierung der Klasse Polygon - implementiert die Methoden der abstrakten Klasse Figur */

public class Polygon extends Figur
{

	/** @param punkte Enthaelt alle Punkte des Polygonzugs. Groesse des Arrays wird im
	  * Konstruktor festgelegt. */

	Punkt[] punkte;

	/**
	  * verschieben (dx, dy): Verschiebt jeden einzelnen Punkt um den Vektor (dx, dy).
	  *
	  * Dies reicht aus, um das gesamte Polygon zu verschieben.
	  *
	  * @param dx Verschiebung in x-Richtung
	  * @param dy Verschiebung in y-Richtung
	  * @return void
	  *
	  */

	public void verschieben (double dx, double dy)
	{

		for (int i = 0; i < punkte.length; i++)
			punkte[i].verschieben (dx, dy);

	} // verschieben ()

	/**
	  * strecken (zentrum, faktor): Streckt jeden einzelnen Punkt zentrisch
	  * um das Zentrum zentrum mit dem Faktor faktor.
	  *
	  * Dies reicht aus, um das gesamte Polygon zentrisch zu strecken.
	  *
	  * @param zentrum Das Streckungszentrum als Punkt
	  * @param faktor Streckungsfaktor (double)
	  * @return void
	  *
	  */

	public void strecken (Punkt zentrum, double faktor)
	{

		for (int i = 0; i < punkte.length; i++)
			punkte[i].strecken (zentrum, faktor);

	} // strecken ()

	/**
	  * rotieren (zentrum, winkel): Rotiert alle Punkte des Polygons
	  * um zentrum mit dem Drehwinkel winkel.
	  *
	  * Dies reicht aus, um das gesamte Polygon zu drehen.
	  *
	  * @param zentrum Zentrum, um das der Punkt gedreht wird
	  * @param winkel Drehwinkel als Vielfaches von Math.PI (Bogenlaenge, RAD)
	  * @return void
	  *
	  */

	public void rotieren (Punkt zentrum, double winkel)
	{

		for (int i = 0; i < punkte.length; i++)
			punkte[i].rotieren (zentrum, winkel);

	} // rotieren ()

	/**
	  * zeichnen (g2): Zeichnet das Objekt in den bergebenen AWT-Grafikkontext.
	  *
	  * @param g2 Grafikkontext, Instanz von Graphics2D
	  * @return void
	  *
	  */

	public void zeichnen (Graphics2D g2)
	{

		/** @param i Zaehlvariable (methodenglobal deklariert wegen Verwendung auch ausserhalb der for-Schleife */

		int i;

		/** Verbinde jeden Punkt im Array mit seinem Nachfolger */

		for (i = 0; i < punkte.length - 1; i++)
			g2.drawLine ((int) punkte[i].getX (), (int) punkte[i].getY (), (int) punkte[i+1].getX (), (int) punkte[i+1].getY ());

		/** jetzt noch das Polygon schliessen */

		g2.drawLine ((int) punkte[i].getX (), (int) punkte[i].getY (), (int) punkte[0].getX (), (int) punkte[0].getY ());

	} // zeichnen ()

	/**
	  * Polygon (myp) : Konstruktor der Klasse Polygon.
	  *
	  * Legt im Array punkte[] geklonte Kopien der beim
	  * Konstruktoraufruf als Array bergebenen Punkte an.
	  *
	  * Dieses Vorgehen ist unbedingt erforderlich, da diese Methode die an den
	  * Konstruktor bergebenen Parameter keinesfalls verndern darf (sonst
	  * Seiteneffekte a la SimpTest.
	  */

	public Polygon (Punkt[] myp)
	{

		/* Dimensioniere das Array punkte[] wie erfordert */

		this.punkte = new Punkt[myp.length];

		/* Alle Array-Elemente klonen und in das neue Array einsetzen */

		for (int i = 0; i < myp.length; i++)
			this.punkte[i] = (Punkt) myp[i].clone();


	} // Konstruktor

} // Klasse Polygon