class KochLine { // Two points, // a is the "left" point and // b is the "right point Vecteur a,b, milieu,gauche,droite,koch; Repere repere; Repere[] reperes; float angle , diviseur; ; KochLine(float angl,float div,Vecteur a_, Vecteur b_,Repere r) { a = a_.cloner(); b = b_.cloner(); angle=angl; diviseur=div; repere=r.cloner(); reperes=new Repere[4]; calculReperes(); } void render(float t) { float ptx=milieu.x+(koch.x-milieu.x)*t; float pty=milieu.y+(koch.y-milieu.y)*t; float ptz=milieu.z+(koch.z-milieu.z)*t; stroke(255); line(a.x,a.y,a.z,gauche.x,gauche.y,gauche.z); line(gauche.x,gauche.y,gauche.z,ptx,pty,ptz); line(ptx,pty,ptz,droite.x,droite.y,droite.z); line(droite.x,droite.y,droite.z,b.x,b.y,b.z); } Vecteur start() { return a.cloner(); } Vecteur end() { return b.cloner(); } // This is easy, just 1/3 of the way Vecteur kochleft() { float x = a.x + (b.x - a.x) * diviseur; float y = a.y + (b.y - a.y) * diviseur; float z = a.z + (b.z - a.z) * diviseur; return new Vecteur(x,y,z); } Vecteur middle(){ return new Vecteur(0.5f *(a.x+b.x),0.5f *(a.y+b.y),0.5f *(a.z+b.z)); } Vecteur kochright() { float x = b.x - (b.x - a.x) * diviseur; float y = b.y - (b.y - a.y) * diviseur; float z = b.z - (b.z - a.z) * diviseur; return new Vecteur(x,y,z); } void calculReperes(){ Quat q1,q2,q3,q4; milieu=middle(); gauche= kochleft(); droite=kochright(); //determiner les nouveaux reperes q1=new Quat(repere.oz,PI/3,1); Vecteur axe1=q1.tourner(repere.oy); q2=new Quat(repere.ox,angle,1); q3=Quat.mul(q2,q1); Vecteur x1=q3.tourner(repere.ox); Vecteur z1=q3.tourner(repere.oz); Vecteur y1=q3.tourner(repere.oy); reperes[1]=new Repere(x1,y1,z1 ); q1=new Quat(repere.oz,-PI/3,1); axe1=q1.tourner(repere.oy); q2=new Quat(repere.ox,angle,1); q3=Quat.mul(q2,q1); Vecteur x2=q3.tourner(repere.ox); Vecteur z2=q3.tourner(repere.oz); Vecteur y2=q3.tourner(repere.oy); reperes[2]=new Repere(x2,y2,z2); reperes[0]=repere.cloner(); reperes[3]=repere.cloner(); //calculer le point de koch float dis=Vecteur.distance(a,b)*(1.0f-2.0f*diviseur); koch=gauche.ajouter(x1,dis); } }