/*
Datei............: Aufg1409.java
Projekt..........: Einführung in die Java-Programmierung
Erstellt.........: 25.11.97, Guido Krüger
Geändert.........: --
Aufgabe..........: Musterlösung zu Aufgabe 14.09
Kommentare.......:

Die Daten für die Tortengrafik stehen in dem Array arData. Sie werden
innerhalb von paint zunächst summiert, um das Größenverhältnis der
einzelnen Tortenstücke berechnen zu können (Größe des aktuellen
Tortenstücks geteilt durch Summe der Größen aller Tortenstücke).
Multipliziert man diesen Wert mit 360, so erhält man für jedes
Tortenstück den Winkel, den es im Vollkreis einnimmt. Wichtig bei
dieser Berechnung ist, daß zunächst die Multiplikation mit 360 
vorgenommen und erst dann durch die Summe geteilt wird. Andernfalls
würde das Ergebnis der (ganzzahligen) Division und somit der
gesamte Ausdruck 0 ergeben.

Die Berechnung wird innnerhalb einer Schleife über alle Tortenstücke 
ausgeführt. Aus einer Farbtabelle arCol wird jeweils zyklisch vor der
Ausgabe des Tortenstücks mit fillArc eine von 8 unterschiedlichen 
Farben zugewiesen. Durch die Abfrage der aktuellen Fenstergröße und 
der Fensterränder wird die Torte immer genau so groß gezeichnet, daß
sie (abzüglichen der Randkonstanten MARGIN) genau in das aktuelle
Fenster hineinpaßt.
*/
import java.awt.*;
import java.awt.event.*;

public class Aufg1409
extends Frame
{
  //Konstanten
  final int MARGIN = 10;

  //Instanzmerkmale
  int arData[] = {10, 23, 44, 14, 6, 3, 9};

  public static void main(String[] args)
  {
	Aufg1409 wnd = new Aufg1409();
	wnd.setSize(300,200);
	wnd.setVisible(true);
  }

  public Aufg1409()
  {
	super("Aufg1409");
	addWindowListener(
      new WindowAdapter() {
	    public void windowClosing(WindowEvent event) {
		  System.exit(0);
		}
	  }
	);
	setBackground(Color.lightGray);
  }

  public void paint(Graphics g)
  {
	int datasum = 0;
	for (int i = 0; i < arData.length; ++i) {
	  datasum += arData[i];
	}
	int maxheight = getSize().height - getInsets().top - getInsets().bottom;
	int maxwidth  = getSize().width  - getInsets().left - getInsets().right;
	Color arCol[] = {
	  Color.blue, Color.red, Color.green, Color.yellow,
	  Color.magenta, Color.cyan, Color.gray, Color.pink
	};
	int anglesum = 0;
	for (int i = 0; i < arData.length; ++i) {
	  g.setColor(arCol[i % arCol.length]);
	  g.fillArc(
	    getInsets().left + MARGIN,
		getInsets().top + MARGIN,
		maxwidth - 2 * MARGIN,
		maxheight - 2 * MARGIN,
		anglesum,
		(i == arData.length - 1) ? 360 - anglesum : arData[i] * 360 / datasum
	  );
	  anglesum += arData[i] * 360 / datasum;
	}
  }
}


