package sample.svg;

import static util.SVGUtil.*;

public class Tree {
	                                     /* 位置         縮小率        角度  */   
	private static double[][] branches = { { 1,     0.7,     11}    // 幹
			                             , { 0.45,  0.5,    -80}    // 左の枝
			                             , { 0.55,  0.45,    75} }; // 右の枝
	
	public static void generate(int d, double x, double y, double len, double angle) {
	    double x1, y1;

	    if (d<=0) return;
	    int color = hsb1(d/7.0, 1, 1);     /* 色 */
	    stroke(color);
	    x1 = x + len * cos360(angle);
	    y1 = y + len * sin360(angle);
	    line(x, y, x1, y1);
	    
	    for (double[] branch : branches) {
	    	double r = branch[0];
			generate(d-1, x * (1 - r) + x1 * r, 
	    			      y * (1 - r) + y1 * r, 
	    			      len * branch[1], angle + branch[2]);
	    }
	}

	public static void main(String[] args) {
	    start();
	    rulers();
	    
	    strokeWeight(0.5);
	    noFill();
	    
	    generate(7 /* 再帰の深さ */, centerX()-50, pageHeight()*0.85, pageHeight()/3.0, -60);
	    
	    finish();
	    return;
	}
}
