/****************************************************************************** * Compilation: javac Tree.java * Execution: java Tree n * Dependencies: StdDraw.java * * Plot a tree fractal. * * % java Tree 9 * ******************************************************************************/ public class Tree { public static void tree(int n, double x, double y, double a, double branchRadius) { double bendAngle = Math.toRadians(15); double branchAngle = Math.toRadians(37); double branchRatio = 0.65; double cx = x + Math.cos(a) * branchRadius; double cy = y + Math.sin(a) * branchRadius; StdDraw.setPenRadius(0.001 * Math.pow(n, 1.2)); StdDraw.line(x, y, cx, cy); if (n == 0) return; tree(n-1, cx, cy, a + bendAngle - branchAngle, branchRadius * branchRatio); tree(n-1, cx, cy, a + bendAngle + branchAngle, branchRadius * branchRatio); tree(n-1, cx, cy, a + bendAngle, branchRadius * (1 - branchRatio)); } public static void main(String[] args) { int n = Integer.parseInt(args[0]); StdDraw.enableDoubleBuffering(); tree(n, 0.5, 0, Math.PI/2, 0.3); StdDraw.show(); } }