CS 100: Lecture L18
April 1
// A graphics recursion to illustrate divide and conquer.
import java.io.*;
import java.awt.*;
public class ShowTree extends Frame
{
// Place constants here
// Draws a dot at the "root" (h,v).
// If L > 9 then it draws dots at the "leaves" (h-L,v-L) and (h+L,v-L) and
// connects them to the root. It then repeats the process at each leaf with L replaced
// by L/2.
public static void drawTree(Graphics g, int h, int v, int L)
{
int r;
if (L<=8)
{
g.setColor(Color.red);
g.fillOval(h-4,v-4,8,8);
return;
}
else
{
g.setColor(Color.yellow);
g.drawLine(h,v,h-L,v-L);
g.drawLine(h,v,h+L,v-L);
g.setColor(Color.blue);
r = L/3;
g.fillOval(h-r,v-r,2*r,2*r);
drawTree(g,h-L,v-L,L/2);
drawTree(g,h+L,v-L,L/2);
}
}
public void paint(Graphics g)
{
g.setColor(Color.black);
g.fillRect(0,0,1000,1000);
drawTree(g,500,500,200);
}
}
public class L18
{
public static void main(String args[])
{
ShowTree d = new ShowTree();
d.resize(1000,800);
d.move(0,75);
d.setTitle("A Tree");
d.show();
d.toFront();
}
}