class KochFractal { Vecteur start,end,pointe; ArrayList lines; int count; float angle,diviseur; public KochFractal() { start = new Vecteur(-450,0,0); end = new Vecteur(450,0,0); pointe = new Vecteur(0,900.0f*cos(PI/6),0); lines = new ArrayList(); angle=PI/4.0f; diviseur=1.0f/3.0f; restart(); } void nextLevel() { // For every line that is in the arraylist // create 4 more lines in a new arraylist lines = iterate(lines); count++; } void restart() { float c = cos(PI/3) ; float s = sin(PI/3) ; count = 0; // Reset count lines.clear(); // Empty the array list lines.add(new KochLine(angle,diviseur,start,end, new Repere(new Vecteur(1,0,0),new Vecteur(0,1,0),new Vecteur(0,0,1)))); lines.add(new KochLine(angle,diviseur,end,pointe,new Repere(new Vecteur(-c,s,0),new Vecteur(-s,-c,0),new Vecteur(0,0,1)))); lines.add(new KochLine(angle,diviseur,pointe,start,new Repere(new Vecteur(-c,-s,0),new Vecteur(s,-c,0),new Vecteur(0,0,1)))); } int getCount() { return count; } // This is easy, just draw all the lines void render() { for(int i = 0; i < lines.size(); i++) { KochLine l = (KochLine)lines.get(i); l.render(tempo); } } ArrayList iterate(ArrayList before) { ArrayList now = new ArrayList(); for(int i = 0; i < before.size(); i++) { KochLine l = (KochLine)lines.get(i); now.add(new KochLine(angle,diviseur,l.a,l.gauche,l.reperes[0])); now.add(new KochLine(angle,diviseur,l.gauche,l.koch,l.reperes[1])); now.add(new KochLine(angle,diviseur,l.koch,l.droite,l.reperes[2])); now.add(new KochLine(angle,diviseur,l.droite,l.b,l.reperes[3])); } return now; } }