public class Rectangle{ Vecteur centre, cote1,cote2,unit1,unit2,normale,s1,s2,s3,s4,centre0,normale0; float demiLargeur,demiHauteur,decalage; int numero; color couleur; //================================================= //================================================= //================================================= public Rectangle(Vecteur centr,Vecteur cot1,Vecteur cot2,int num){ couleur=color(255,int(random(0,255)),int(random(0,255))); if(num==0)couleur=color(255,0,0); if(num==1)couleur=color(255,255,0); if(num==2)couleur=color(255,0,255); if(num==3)couleur=color(255,255,0); if(num==4)couleur=color(255,255,255); numero=num; centre=centr; cote1=cot1; cote2=cot2; unit1=cote1.normerCopie(1.0); unit2=cote2.normerCopie(1.0); demiLargeur=cote1.length(); demiHauteur=cote2.length(); normale=(cote1.cross(cote2)).normalize(); s1=Vecteur.comb(-1.0,cote1,-1.0,cote2,1.0,centre); s2=Vecteur.comb(1.0,cote1,-1.0,cote2,1.0,centre); s3=Vecteur.comb(1.0,cote1,1.0,cote2,1.0,centre); s4=Vecteur.comb(-1.0,cote1,1.0,cote2,1.0,centre); } //================================================= //================================================= //================================================= public Rectangle(Vecteur v1, Vecteur v2 ,Vecteur v3, Vecteur v4,int num){ s1=v1; s2=v2; s3=v3; s4=v4; centre=Vecteur.comb(0.5,s1,0.5,s3); numero=num; cote1= Vecteur.comb(0.5,s2,-0.5,s1); cote2= Vecteur.comb(0.5,s2,-0.5,s3); unit1=cote1.normerCopie(1.0); unit2=cote2.normerCopie(1.0); demiLargeur=cote1.length(); demiHauteur=cote2.length(); normale=(cote1.cross(cote2)).normalize(); couleur= color(int(random(100,255)),int(random(100,255)),100+int(random(100+255))); } //================================================= //================================================= //================================================= void dessiner(){ s1=Vecteur.comb(-1.0,cote1,-1.0,cote2,1.0,centre); s2=Vecteur.comb(1.0,cote1,-1.0,cote2,1.0,centre); s3=Vecteur.comb(1.0,cote1,1.0,cote2,1.0,centre); s4=Vecteur.comb(-1.0,cote1,1.0,cote2,1.0,centre); fill(couleur,100);// noStroke(); beginShape(QUADS); vertex(s1.x,s1.y,s1.z); vertex(s2.x,s2.y,s2.z); vertex(s3.x,s3.y,s3.z); vertex(s4.x,s4.y,s4.z); endShape(); } //================================================= //================================================= //================================================= void ajouterVecteur(Vecteur v){ stroke(0); if(drague){ if( brelache) { enPrise =false; drague=false; rec.addElement(extrusion[0]); rec.addElement(extrusion[1]); rec.addElement(extrusion[2]); rec.addElement(extrusion[3]); rec.addElement(extrusion[4]); } else { line(v.x,v.y,v.z,v.x+normale.x*400,v.y+normale.y*400,v.z+normale.z*400); extrusion[0]=new Rectangle(s1.cloner(), s2.cloner(), s2.ajouter(normale,decalage),s1.ajouter(normale,decalage),111); extrusion[1]=new Rectangle(s2.cloner(), s3.cloner(), s3.ajouter(normale,decalage),s2.ajouter(normale,decalage),112); extrusion[2]=new Rectangle(s3.cloner(), s4.cloner(), s4.ajouter(normale,decalage),s3.ajouter(normale,decalage),113); extrusion[3]=new Rectangle(s4.cloner(), s1.cloner(), s1.ajouter(normale,decalage),s4.ajouter(normale,decalage),114); extrusion[4]=new Rectangle(s1.ajouter(normale,decalage), s2.ajouter(normale,decalage), s3.ajouter(normale,decalage),s4.ajouter(normale,decalage),115); extrusion[0].dessiner(); extrusion[1].dessiner(); extrusion[2].dessiner(); extrusion[3].dessiner(); extrusion[4].dessiner(); decalage= cam.intersectionDragueRectangle(centre,normale,unit1); // println(numero+" decalage******* = "+decalage); }; } } //================================================= //================================================= //================================================= boolean impactDansLeRectangle(Vecteur vv){ Vecteur KI=vv.ajouter(centre,-1.0); float xx= KI.dot(unit1); float yy= KI.dot(unit2); return(((KI.dot(KI))-sq(xx))<(sq(demiHauteur)-sq(cote2.dot(unit1))) &&((KI.dot(KI))-sq(yy))<(sq(demiLargeur)-sq(cote1.dot(unit2)))); } //================================================= //================================================= //================================================= }