Pedalier ped,ped1; Engrenag roue1,roue3; BFont lafonte; float anglx,rayoncame,excentre; void setup(){ lafonte=loadFont("Univers65.vlw.gz"); size(700,450); background(50,30,80); ellipseMode(CENTER_DIAMETER); rayoncame=250;excentre=100; ped=new Pedalier(0,0,170,155,-80,-260,40,0); ped1=new Pedalier(0,0,170,155,-80,-260,40,PI); roue1=new Engrenag(0,0,-300,200,15,0,"2004"); roue3=new Engrenag(0,15,0,600,45,HALF_PI,""); stroke(255); } void loop(){ clear(); noFill(); push(); translate(width/2,550, -450); anglx=(-mouseY+height/2)*0.005f-0.3f; rotateX(anglx); push(); translate(-700,0,-700); rotateX(HALF_PI); fill(0,0,100); rect(0,0,1400,1400); pop(); translate(0,(-rayoncame+excentre*sin(ped.angle)), 0); push(); fill(255,180,160); translate(0,85,0); box(300,10,300); roue3.dessiner(0); pop(); ped.angle-=0.12f; ped1.angle-=0.12f; rotateY(ped.angle*200/600-PI/22.5f); roue1.dessiner(ped.angle); push(); fill(255,200,40);//support orange translate(0,60,0); box(300,10,300); translate(0,-40,130); box(40,80,30); translate(0,0,-260); box(40,80,30); translate(-90,-120,130); box(20,320,100); translate(200,-40,0); box(20,380,150); pop(); ped.dessiner(); ped1.dessiner(); pop(); } //++++++++++++++++++++++++++++++++++++++++++++++++++++++ class Pedalier{ float x,y,xx,yy,femur,tibia,rotulx,rotuly,angle,manivel,angl2,angl3; int signe; public Pedalier(float pex,float pey,float femu,float tib,float rtx,float rty,float maniv,float angl){ x=pex; y=pey; rotulx=rtx; rotuly=rty; femur=femu; tibia=tib; angle=angl; manivel=maniv; signe=(int)cos(angl); } public float calculer(){ xx=x+manivel*sin(angle); yy=y+manivel*cos(angle); float dis2=sq(xx-rotulx)+sq(yy-rotuly); float dis=sqrt(dis2); float angl1=atan2(xx-rotulx,yy-rotuly); angl2=(float)Math.acos((-sq(tibia)+sq(femur)+dis2)/(2*sqrt(dis2)*femur)); angl3=(float)Math.asin(dis/tibia*sin(angl2)); return PI/2-angl1-angl2; } public void dessiner(){ float ang = calculer(); float x1=rotulx+femur*cos(ang); float y1=rotuly+femur*sin(ang); push(); rotateZ(-angle); translate(0,manivel/2,0); fill(0,0,255); box(10,manivel,10); translate(0,manivel/2,signe*50); box(10,10,110); translate(0,-manivel/2,signe*50); box(10,manivel,10); translate(0,-manivel/2,signe*140); box(10,10,290);//axe bleu des cames translate(0,0,145*signe); push(); rotateZ(PI/2*signe+PI); dessinerCame(excentre,rayoncame); pop(); pop(); push();//tronc et bras fill(100,150,200); translate(rotulx,rotuly,0); rotateZ(0.3f); translate(0,-80,0); box(50,190,90);// tronc translate(0,-120,0);box(50); translate(50,0+tibia*0.35f,50); rotateZ(0.5f); box(tibia*0.7f,20,20);// bras droit translate(0,0,-105); box(tibia*0.7f,20,20);// bras gauche rotateZ(-0.5f); translate(80,-tibia*0.30f+70,0); box(tibia*0.6f,20,20); translate(0,0,105); box(tibia*0.6f,20,20); pop(); push(); translate(rotulx,rotuly,signe*30); rotateZ(ang); translate(femur/2,0,0); box(femur,30,30); translate(femur/2,0,0); rotateZ(angl3); translate(tibia/2,0,0); box(tibia,25,25); translate(tibia/2-15,-20,0); box(15,60,25); pop(); } void dessinerCame(float e,float r){ push(); translate(0,-(r-e)/2,0); box(10,r-e,10); pop(); push(); translate(0,(r+e)/2,0); box(10,r+e,10); pop(); for(int i=0;i<20;i++){ if(i!=0 || i!=10){ push(); float phi=i*PI/10; rotateZ(phi); float q=r/sin(phi); float psi=PI-phi-(float)Math.asin(e/q); float d=q*sin(psi); translate(0,d/2,0); box(10,d,10); pop(); } } } } //******************************************************************** public class Engrenag{ float r,rotx,x,y,z; int n; String annee; public Engrenag(float xx,float yy,float zz,float rayon,int nb,float rox,String an){ x=xx; y=yy; z=zz; r=rayon; n=nb; rotx=rox; annee=an; } public void dessiner(float a){ push(); translate(x,y,z); rotateX(rotx); if(rotx