#include "svg.h"

#define NUM 3

double branches[NUM][3] = { { 1,      0.7,       11}    // 幹
                            , { 0.45,   0.5,      -80}    // 左の枝
                            , { 0.55,   0.45,      75} }; // 右の枝
    
void generate(int d, double x, double y, double len, double angle) {
    double x1, y1;
    int i;
    int color = hsb1(d/7.0, 1, 1);     /* 色 */

    if (d<=0) return;
    stroke(color);
    x1 = x + len * cos360(angle);
    y1 = y + len * sin360(angle);
    line(x, y, x1, y1);
        
    for (i=0; i<NUM; i++ ) {
        double r = branches[i][0];
        generate(d-1, x * (1 - r) + x1 * r, 
                 y * (1 - r) + y1 * r, 
                 len * branches[i][1], angle + branches[i][2]);
    }
}

int main(voi) {
    start();
    rulers();
        
    strokeWeight(0.5);
    noFill();
        
    generate(7 /* 再帰の深さ */, centerX()-50, pageHeight()*0.85, pageHeight()/3.0, -60);
        
    finish();
    return 0;
}
