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... } }