import java.awt.*; import java.applet.*; import java.io.*; final public class tree extends Applet { Dimension d; int l1,l2,l3,l4,l5,l6; int a1,a2,a3; int startx,starty,starta; int decr; int levels; int level; double factor; double ra1,ra2,ra3,startra; public void init() { setBackground(new Color(230,230,230)); d=size(); l1= Integer.parseInt(getParameter("L1")); l2= Integer.parseInt(getParameter("L2")); l3= Integer.parseInt(getParameter("L3")); l4= Integer.parseInt(getParameter("L4")); l5= Integer.parseInt(getParameter("L5")); l6= Integer.parseInt(getParameter("L6")); a1= Integer.parseInt(getParameter("A1")); a2= Integer.parseInt(getParameter("A2")); a3= Integer.parseInt(getParameter("A3")); decr= Integer.parseInt(getParameter("DECR")); levels= Integer.parseInt(getParameter("LEVELS")); startx= Integer.parseInt(getParameter("STARTX")); starty= Integer.parseInt(getParameter("STARTY")); starta= Integer.parseInt(getParameter("STARTA")); ra1=a1*3.14159/180; ra2=a2*3.14159/180; ra3=a3*3.14159/180; startra=starta*3.14159/180;; } void plotLine (Graphics g, double x, double y, double x1, double y1) { switch (level) { case 1: g.setColor (Color.red); break; case 2: g.setColor (Color.yellow); break; case 3: g.setColor (Color.gray); break; default: g.setColor (Color.darkGray); break; } int px=(int)Math.round(x); int py=(int)Math.round(y); int px1=(int)Math.round(x1); int py1=(int)Math.round(y1); g.drawLine(px,py,px1,py1); return; } public void paint (Graphics g) { level=levels; factor=1; DrawLevel(g,startx,starty,startra); } public void DrawLevel (Graphics g,double a_x,double a_y,double a_a) { if(level==0 /*|| (level != levels && (Math.random()/factor < 0.1))*/) { factor *= (1.0-decr/100.0); level++; return; } double x,y,a; double x1,y1; x=a_x; y=a_y; a=a_a; x1=x+l1*(double)Math.cos(a)/factor; y1=y-l1*(double)Math.sin(a)/factor; plotLine(g,x,y,x1,y1); x=x1; y=y1; a += ra1; x1=x+l2*(double)Math.cos(a)/factor; y1=y-l2*(double)Math.sin(a)/factor; plotLine(g,x,y,x1,y1); factor /= (1.0-decr/100.0); level--; DrawLevel(g,x1,y1,a); a -= ra1; x1=x+l3*(double)Math.cos(a)/factor; y1=y-l3*(double)Math.sin(a)/factor; plotLine(g,x,y,x1,y1); x=x1; y=y1; a += ra2; x1=x+l4*(double)Math.cos(a)/factor; y1=y-l4*(double)Math.sin(a)/factor; plotLine(g,x,y,x1,y1); x=x1; y=y1; x1=x+l5*(double)Math.cos(a)/factor; y1=y-l5*(double)Math.sin(a)/factor; plotLine(g,x,y,x1,y1); factor /= (1.0-decr/100.0); level--; DrawLevel(g,x1,y1,a); a += ra3; x1=x+l6*(double)Math.cos(a)/factor; y1=y-l6*(double)Math.sin(a)/factor; plotLine(g,x,y,x1,y1); factor /= (1.0-decr/100.0); level--; DrawLevel(g,x1,y1,a); factor *= (1.0-decr/100.0); level++; } }