import fr.upd.*;
import java.util.*;
public class Arbre {
public static Random r = new Random();
// Un «arbre» est défini par la position de sa "racine", la longueur de son
// tronc et l'orentation de son tronc
public static void arbre(int x,int y,int longueur, double angle) {
// un trop petit tronc correspond à une feuille (bout de la récursion)
if (longueur<=2) {
Facile.setColor(0,255,0); // vert
Facile.fillCircle(x,800-y,10);
Facile.setColor(0,0,0); // noir
return;
}
// coordonnées de la fin du tronc
int xf = (int)(x+longueur*Math.cos(angle));
int yf = (int)(y+longueur*Math.sin(angle));
Facile.drawLine(x,800-y,xf,800-yf);
// la «branche» gauche est un «arbre» plus court qui part de la fin du tronc
// arbre(xf,yf,longueur*2/3,angle+Math.PI/4);
// version avec un peu d'aléatoire pour la longueur
double coef = r.nextDouble()*(2.0/3-1.0/2)+1.0/2;
arbre(xf,yf,(int)(longueur*coef),angle+Math.PI/4);
// la «branche» droite est un «arbre» plus court qui part de la fin du tronc
// arbre(xf,yf,longueur*2/3,angle-Math.PI/4);
// version avec un peu d'aléatoire pour la longueur
coef = r.nextDouble()*(2.0/3-1.0/4)+1.0/4;
arbre(xf,yf,(int)(longueur*coef),angle-Math.PI/4);
// le «tronc» continue en plus court...
// arbre(xf,yf,longueur*2/3,angle);
// version avec un peu d'aléatoire pour la longueur
coef = r.nextDouble()*(2.0/3-1.0/4)+1.0/4;
arbre(xf,yf,(int)(longueur*coef),angle);
}
public static void main(String a[]) {
Facile.startDrawings(800,800); // fenêtre de 800x800
Facile.setColor(255,255,255); // blanc
Facile.clearArea(); // effacement de la fenêtre
Facile.setColor(0,0,0); // noir
arbre(400,0,200,Math.PI/2); // un arbre...
}
}