/**
  *
  * Programmieraufgabe P-15 (geometrie.jar)
  *
  * @author Leonhard Fellermayr
  * @version 1.0
  *
  */

/** Zugehrigkeit zum Package geometrie */

package geometrie;

/** Methode zeichnen () erwartet als Argument einen AWT-Grafikkontext */

import java.awt.Graphics2D;

/* Abstrakte Klasse Figur */

public abstract class Figur
{

	/**
	  * verschieben () : Verschiebt ein Objekt um den Vektor (dx, dy).
	  *
	  * Implementierung in den Unterklassen.
	  *
	  * @param dx Verschiebung in x-Richtung
	  * @param dy Verschiebung in y-Richtung
	  * @return void
	  *
	  */

	public abstract void verschieben (double dx, double dy);

	/**
	  * rotieren () : Rotiert ein Objekt um das Zentrum zentrum mit dem
	  * Winkel winkel.
	  *
	  * Implementierung in den Unterklassen.
	  *
	  * @param zentrum Punkt, um den das Objekt gedreht wird
	  * @param winkel Drehwinkel als Vielfaches von Math.PI (Bogenlaenge, RAD)
	  * @return void
	  *
	  */

	public abstract void rotieren (Punkt zentrum, double winkel);

	/**
	  * strecken () : Streckt ein Objekt zentrisch um das Zentrum zentrum
	  * mit dem Faktor faktor.
	  *
	  * Implementierung in den Unterklassen.
	  *
	  * @param zentrum Punkt, der das Streckungszentrum darstellt
	  * @param faktor Streckungsfaktor (double)
	  * @return void
	  *
	  */

	public abstract void strecken (Punkt zentrum, double faktor);

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

	public abstract void zeichnen (Graphics2D g2);

	/**
	  * laenge () : Ermittelt mittels der Euklidischen Norm die Lnge der Strecke
	  * zwischen zwei Punkten a, b.
	  *
	  * @param a Startpunkt der Strecke
	  * @param b Endpunkt der Strecke
	  * @return Laenge der Strecke zwischen a und b
	  *
	  */

	public static double laenge (Punkt a, Punkt b)
	{

	  /** Euklidische Norm im IR2 */

	  return (Math.sqrt (Math.pow (a.getX() - b.getX(), 2) + Math.pow (a.getY() - b.getY(), 2)));

	} // laenge ()

} // Klasse Figur