// www.alcys.com //version 0.6 du 11/07/2005 /*dynamic 3D : J'ai utilisé les deux références suivantes: physics for game developers David M. Bourg editeur O'Reilly David Baraff: Physically Based Modeling. Rigid Body simulation (sur le net) */ Vecteur origineR0,graviteR0; float bangleX, bangleY,angleX,angleY,grav; Solide9 solid; Quat quatX, quatY, quatXY; Helice helix; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public void setup(){ size(700,700,P3D); framerate(60); perspective( 1, width/height, 60, 16000); origineR0 =new Vecteur(400,-350,-2500); grav=20f; solid = new Solide9( new Vecteur(200,0,500),new Vecteur(26,10,10)); helix=new Helice(2000f,20); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public void draw(){ background(255); directionalLight(300, -500, -2000,200,-1000,-3000); ambientLight(100, 100, 180); actualiser(); solid.evoluer(graviteR0); solid.afficher(); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public void actualiser(){ translate(origineR0.x,origineR0.y,origineR0.z); bangleX=(mouseY)/100.0f; bangleY=(mouseX)/100.0f;// angleX+=(bangleX-angleX)/10.0f; angleY+=(bangleY-angleY)/10.0f; rotateX(-angleX); rotateY(-angleY); // Calculer la direction Oy dans le repère R0; quatX=new Quat(new Vecteur(1,0,0),angleX,1); //rotation inverse quatY=new Quat(new Vecteur(0,1,0),angleY,1); //rotation inverse quatXY=Quat.mul(quatY,quatX); float[] rr=quatXY.getValue(); //rotation inverse graviteR0=quatXY.tourner(new Vecteur(0,grav,0));//; afficherRepere(500); } void mousePressed(){println("omega = "+solid.omega.length());} //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void afficherRepere(float lon){ stroke(255,0,0); line(0,0,0,lon,0,0); stroke(0,255,0); line(0,0,0,0,lon,0); stroke(0,0,255); line(0,0,0,0,0,lon); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////