float angleX,angleY,bangleX,bangleY,tempo; Vecteur coul,origine1; float nbor=(-1+sqrt(5))/2; Dodecaedre leDodecaedre; // ++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++ void setup(){ size(750,500); coul=new Vecteur(-1f,0.3f,-1.8f); origine1=new Vecteur(0,500,-14000); Vecteur lecentre=new Vecteur(0,0,2670); leDodecaedre=new Dodecaedre(lecentre,2000); this.ellipseMode(CENTER_DIAMETER); tempo=0; } // ++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++ void loop(){ tempo+=0.05f; background(155+50*cos(tempo),20+20*sin(tempo),200+55*sin(2*tempo)); modifierparam(); push(); translate(0,0,-30); dessinerPentagone(); pop(); leDodecaedre.evoluer(); } // ++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++ void modifierparam(){ translate(origine1.x,origine1.y,origine1.z); bangleX=(mouseY)/500.0f; bangleY=(mouseX)/150.0f;// angleX+=(bangleX-angleX)/10.0f; angleY+=(bangleY-angleY)/10.0f; rotateX(0.6f+angleX); } // ++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++ Vecteur vecteurNormal(Vecteur v1,Vecteur v2,Vecteur v3){ Vecteur w1=v2.ajouter(v1,-1); Vecteur w2=v3.ajouter(v1,-1); Vecteur res=(w1.cross(w2)); return res.normalize(); } void dessinerPentagone(){ //Vecteur no=vecteurNormal(pts[faces[k].liste[0]],pts[faces[k].liste[1]],pts[faces[k].liste[2]]); float scal=1; float pi5=TWO_PI/5,rr=13000; beginShape(); for(int i=0;i<5;i++){ fill(195+75*cos(tempo*5+i*pi5),180+70*cos(tempo+(i+1.5f)*i*pi5),200+75*sin(tempo+(i+3)*i*pi5)); Vecteur v=new Vecteur(rr*cos(i*pi5),rr*sin(i*pi5),0); vertex(v.x,v.y,v.z); } endShape(); } // ++++++++++++++++++++++++++++++++++++++++ // CLASSE Face // ++++++++++++++++++++++++++++++++++++++++ class Face{ int[] liste; public Face(int[] listeDesSommets){ this.liste=listeDesSommets; } } // ++++++++++++++++++++++++++++++++++++++++ // CLASSE Arete // ++++++++++++++++++++++++++++++++++++++++ class Arete{ Vecteur axe; int d,a; public Arete(int d,int a){ this.d=d; this.a=a; } } // ++++++++++++++++++++++++++++++++++++++++ // CLASSE Dodecaedre // ++++++++++++++++++++++++++++++++++++++++ class Dodecaedre{ float x,y,z,c,angle; float d=(1+sqrt(5))/2; float d2=d*d; float diedre0=(float)Math.acos(1/sqrt(5)); float diedre=diedre0; boolean enmouvement; Vecteur centre; Vecteur[] sommets; Arete areteRot; Vecteur axeRot; Vector empreintes; int faceSol; Arete[] aretes=new Arete[30]; Face[] faces=new Face[]{ new Face(new int[]{7,9,2,3,8}), // new Face(new int[]{5,6,0,1,4}), // new Face(new int[]{1,17,12,11,4}), // new Face(new int[]{1,0,13,18,17}), // new Face(new int[]{0,6,10,14,13}), // new Face(new int[]{7,8,10,6,5}), // new Face(new int[]{5,4,11,9,7}), // new Face(new int[]{11,12,16,2,9}), // new Face(new int[]{16,19,15,3,2}), // new Face(new int[]{14,10,8,3,15}), // new Face(new int[]{17,18,19,16,12}), // new Face(new int[]{18,13,14,15,19}) // }; public Dodecaedre(Vecteur lecentr,float cote) { centre=lecentr; c=cote/2; empreintes=new Vector(); sommets=new Vecteur[20]; sommets[0]=new Vecteur(0,-c,c*d2); sommets[1]=new Vecteur(0,c,c*d2); sommets[2]=new Vecteur(0,c,-c*d2); sommets[3]=new Vecteur(0,-c,-c*d2); sommets[7]=new Vecteur(c*d2,0,-c); sommets[5]=new Vecteur(c*d2,0,c); sommets[18]=new Vecteur(-c*d2,0,c); sommets[19]=new Vecteur(-c*d2,0,-c); sommets[10]=new Vecteur(c,-c*d2,0); sommets[11]=new Vecteur(c,c*d2,0); sommets[12]=new Vecteur(-c,c*d2,0); sommets[14]=new Vecteur(-c,-c*d2,0); sommets[4]=new Vecteur(c*d,c*d,c*d); sommets[6]=new Vecteur(c*d,-c*d,c*d); sommets[8]=new Vecteur(c*d,-c*d,-c*d); sommets[9]=new Vecteur(c*d,c*d,-c*d); sommets[13]=new Vecteur(-c*d,-c*d,c*d); sommets[15]=new Vecteur(-c*d,-c*d,-c*d ); sommets[16]=new Vecteur(-c*d,c*d,-c*d); sommets[17]=new Vecteur(-c*d,c*d,c*d); for(int i=0;iabs(diedre)) { angle=diedre; enmouvement=false; } Vecteur[] temppts=pivoter(angle); if(abs(angle-diedre)<0.00001f){ sommets=temppts; enmouvement=false; } dessiner(temppts); angle+=diedre/10; } } // ++++++++++++++++++++++++++++++++++++++++ int calculerSol(){ int res=0; for(int i=0;i200){for(int i=0;i<5;i++)empreintes.removeElementAt(0); } for(int i=0;i<5;i++){ empreintes.addElement(sommets[faces[n].liste[i]].cloner()); } } // ++++++++++++++++++++++++++++++++++++++++ void DessinerEmpreintes(){ for(int i=0;i