import java.awt.*;
import java.awt.geom.*;


public class MyEllipse2D {
	public static void main (String[] args) {
		
		//Fenster erzeugen
		MyFrame frame = new MyFrame( "Total Ellipse Of The Heart", 500,280 ) {
			public void paint(Graphics g) {
				
				//Upcast --> mehr Funktionen in Graphics2D
				Graphics2D g2d=(Graphics2D)g;
				
				double w;double h;double x;double y; //Ellipsenrechteck
				w=450;h=200;x=10;y=50; //Ellipsenmaße
				
				double f=0.99;//Verkleinerungsfaktor pro Iteration
				
				//Ellipse mit initialen Werten erzeugen
				Ellipse2D e = new Ellipse2D.Double( x,y,w,h );
				
				//Rot-,Grün- und Blauanteil d. akt. Farbe
				int rd;int gr;int bl; 
				
				double limit=100; //Mindestbreite d. Ellipse
				double runs=Math.log(limit/w)/Math.log(f); //Anzahl Durchläufe
				double count=0; //Zähler
								
				while( w > limit ) //solange w>Mindestbreite
				{
					//Farbe proportional zum Zähler count heller machen
					rd=(int)((count/runs)*255);
					gr=(int)((count/runs)*255);
					bl=(int)((count/runs)*255);
					
					//Farbe setzen				
					g2d.setPaint( new Color( rd,gr,bl ) );
					g2d.fill(e); //Ellipse malen

					//verkleinern d. Ellipse um den Faktor f
					y += (h-f*h)/2; //Y-Position anpassen
					w *= f; //Höhe, Breite verkleinern
					h *= f;
					
					//setzen der neuen Ellipsenmaße
					e.setFrame( new Rectangle2D.Double(x,y,w,h) );
					
					//Durchlaufzähler++
					count+=1d;
				}
			}
		};
		
	}
}
