import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Point;
/**
 * Title:        Sierpinski Gasket<p>
 * Description:  Applet that draws a Sierpinski Gasket to the screen 
 *    using recursion<p>
 * Copyright:    Copyright (c) Anne Denton<p>
 * @author Anne Denton
 * @version 1.0
 * @param levels number of levels of recursion
 */

public class Sierpinski extends Applet
{
public void init()
{  width = new Integer(getParameter("width")).intValue();
   height = new Integer(getParameter("height")).intValue();
   levels = new Integer(getParameter("levels")).intValue();

   t = new Triangle(new Point(width/2,0),new Point(0,height-1),
      new Point(width-1,height-1));
}

public void paint(Graphics g)
{  generateTriangles(t,g);
}

/**
  Calls itself recursively. Three new triangles are generated at 
  each call.  If the final level of recursion (parameter levels) is 
  reached each triangle is drawn otherwise the method calls itself 
  with each of the new and smaller triangles as parameter.
  @param lt local triangle variable
  @param g graphics context to be used at final level
*/

public void generateTriangles(Triangle lt, Graphics g)
{  Triangle tt = lt.topTriangle();
   Triangle tl = lt.leftTriangle();
   Triangle tr = lt.rightTriangle();
   if (tr.getWidth()*Math.pow(2,levels) > width)
   {  generateTriangles(tt,g);
      generateTriangles(tl,g);
      generateTriangles(tr,g);
   }
   else
   {  tt.draw(g);
      tl.draw(g);
      tr.draw(g);
   }
}
private static int levels;
private static int width;
private static int height;
private Triangle t;
}
