diff --git a/TP_Geom3D_2018/Projet_modeling/main.cpp b/TP_Geom3D_2018/Projet_modeling/main.cpp
index a12054f62113f0e04a2768aec17d08f7f1862847..7946993cb0508dcd95d3caa604ff288469d5768d 100644
--- a/TP_Geom3D_2018/Projet_modeling/main.cpp
+++ b/TP_Geom3D_2018/Projet_modeling/main.cpp
@@ -16,20 +16,18 @@ const Vec3 GRIS    = {0.5,0.5,0.5};
 const Vec3 NOIR    = {0,0,0};
 
 
-
 void draw_repere(const Primitives& prim, const Mat4& tr)
 {
     prim.draw_sphere(tr, BLANC);
     prim.draw_cylinder(tr*translate(1,0,0)* scale(2,0.5,0.5) * rotateY(90) , ROUGE); // X
-    prim.draw_cylinder(tr*translate(0,1,0)*  scale(0.5,2,0.5) * rotateX(90)  , VERT); //Y
-    prim.draw_cylinder(tr*translate(0,0,1) * scale(0.5,0.5,2) , BLEU); //Z
+    prim.draw_cylinder(tr*translate(0,1,0)*  scale(0.5,2,0.5) * rotateX(90)  , VERT); // Y
+    prim.draw_cylinder(tr*translate(0,0,1) * scale(0.5,0.5,2) , BLEU); // Z
 
     prim.draw_cone(tr*translate(2,0,0)* rotateY(90), ROUGE);
     prim.draw_cone(tr*translate(0,2,0)* rotateX(-90), VERT);
     prim.draw_cone(tr*translate(0,0,2), BLEU);
 }
 
-
 void star(MeshQuad& m)
 {
     m.create_cube();
@@ -46,39 +44,121 @@ void star(MeshQuad& m)
         }
 }
 
-
 void spirale(MeshQuad& m)
 {
-    m.create_cube();
+     m.create_cube();
      #pragma omp parallel for
     for(int i = 0 ; i < 250 ; i++)
     {
-          m.transfo_quad(4,rotateX(10)*translate(0.11,0,0)*scale(0.99)) ;
-          m.extrude_quad(4) ;
+          m.transfo_quad(12,rotateY(10)*translate(0,0.11,0)*scale(0.99)) ;
+          m.extrude_quad(12) ;
     }
 
 }
-void test(MeshQuad& m ,int q, int n )
+
+void inside_shape1(MeshQuad& m,int q, int count)
 {
-    if(n > 0)
+    int index;
+    if(count > 0)
+    {
+        m.extrude_quad(q);
+        m.extrude_quad(q);
+        m.shrink_quad(q,0.9f);
+        m.tourne_quad(q,5) ;
+        m.extrude_quad(q);
+        m.shrink_quad(q,0.5f);
+        m.extrude_quad(q);
+        m.decale_quad(q,1.2f);
+
+       index = m.nb_quads()*4;
+
+       inside_shape1(m,q, count-1);
+
+       inside_shape1(m,index-4, count-1);
+       inside_shape1(m,index-8, count-1);
+
+       inside_shape1(m,index-12, count-1);
+       inside_shape1(m,index-16, count-1);
+
+    }
+}
+
+void inside_shape2(MeshQuad& m,int q, int count)
+{
+    int index;
+    if(count > 0)
     {
         m.extrude_quad(q) ;
-        m.extrude_quad(q+16) ;
-        m.extrude_quad(q+8) ;
-        m.shrink_quad(q+4,0.85);
+        m.extrude_quad(q) ;
+        m.shrink_quad(q,0.5f) ;
+        m.extrude_quad(q) ;
+         m.decale_quad(q,5);
+
+       index = m.nb_quads()*4;
 
+       inside_shape2(m,q, count-1);
+
+       inside_shape2(m,index-4, count-1);
+       inside_shape2(m,index-8, count-1);
+
+       inside_shape2(m,index-12, count-1);
+       inside_shape2(m,index-16, count-1);
+    }
+}
+
+void inside_shape3(MeshQuad& m,int q, int count)
+{
+    if(count >= 1){
+        #pragma omp parallel for
+        for(int i = 0 ; i < 17 ; i++)
+         {
+            m.extrude_quad(q) ;
+            m.transfo_quad(q,rotateX(-18)) ;
+
+         }
+         int index = count * 16 ;
+         inside_shape3(m,index,count -1) ;
 
-      test(m,q+4,n-1) ;
     }
 
 }
 
-void shape1(MeshQuad& m )
+void shape1 (MeshQuad& m)
 {
     m.create_cube() ;
-    test(m,4,3) ;
+      #pragma omp parallel for
+      for(int i = 0 ; i < 6 ; i++)
+          inside_shape1(m,4*i,3) ;
+
+}
+
+void shape2(MeshQuad& m )
+{
+    m.create_cube() ;
+
+    for(int i = 0 ; i < 8; i++)
+     {
+       m.extrude_quad(12) ;
+       m.transfo_quad(12,rotateY(18)) ;
+       m.extrude_quad(16) ;
+       m.transfo_quad(16,rotateY(-18)) ;
+     }
+
+
+    inside_shape2(m,12,3) ;
+    inside_shape2(m,16,3) ;
+
 
 }
+
+void shape3(MeshQuad& m )
+{
+    m.create_cube() ;
+    inside_shape3(m,12,18) ;
+    m.extrude_quad(12) ;
+
+ }
+
 int main(int argc, char *argv[])
 {
     Primitives prim;
@@ -104,7 +184,7 @@ int main(int argc, char *argv[])
         mesh.set_matrices(viewer.getCurrentModelViewMatrix(),viewer.getCurrentProjectionMatrix());
         prim.set_matrices(viewer.getCurrentModelViewMatrix(),viewer.getCurrentProjectionMatrix());
 
-        mesh.draw(CYAN);
+        mesh.draw(JAUNE);
 
         if (selected_quad>=0)
         {
@@ -113,7 +193,6 @@ int main(int argc, char *argv[])
          }
     };
 
-    Mat4 transfo  =translate(0,1,0) ;
     // to do when key pressed
     viewer.f_keyPress = [&] (int key, Qt::KeyboardModifiers mod)
     {
@@ -162,9 +241,19 @@ int main(int argc, char *argv[])
                break;
 
             case Qt::Key_1:
-                shape1(mesh) ;
+               shape1(mesh) ;
+               break ;
+
+            case Qt::Key_2:
+                 shape2(mesh) ;
+                 break ;
+
+            case Qt::Key_3:
+                shape3(mesh) ;
                 break ;
-             // ....
+
+
+                 // ....
 
                 // Attention au cas m_selected_quad == -1
             default:
diff --git a/TP_Geom3D_2018/Projet_modeling/meshquad.cpp b/TP_Geom3D_2018/Projet_modeling/meshquad.cpp
index f603e6987bad2fb8291460bdd4633a9ea207cab5..9140825c9bbad248acd7c8f5fb8def350e311d55 100644
--- a/TP_Geom3D_2018/Projet_modeling/meshquad.cpp
+++ b/TP_Geom3D_2018/Projet_modeling/meshquad.cpp
@@ -104,12 +104,12 @@ void MeshQuad::bounding_sphere(Vec3& C, float& R)
       }
       C /= nb_points;
 
-      float temp ,max = glm::length(m_points.at(0) - C);
+      float length ,max = glm::length(m_points.at(0) - C);
 
       for (i = 1; i < nb_points; i++) {
-          temp = glm::length(m_points.at(i) - C);
-          if (temp > max) {
-              max = temp;
+          length = glm::length(m_points.at(i) - C);
+          if (length > max) {
+              max = length;
           }
       }
       R = max;
@@ -119,7 +119,7 @@ void MeshQuad::bounding_sphere(Vec3& C, float& R)
 void MeshQuad::create_cube()
 {
     clear();
-    float s = 0.7 ;
+    float s = 0.5 ;
 
     // ajouter 8 sommets (-1 +1)
     int i1 = add_vertex(Vec3(-s,s,s));
@@ -252,39 +252,28 @@ int MeshQuad::intersected_closest(const Vec3& P, const Vec3& Dir)
     // on teste si il y a intersection avec le rayon
     // on garde le plus proche (de P)
 
-    int i, index = -1;
-    Vec3 intersector = Vec3();
-    bool existe = false;
-    float min ,temp ;
 
-    int nb_quads = m_quad_indices.size();
+    int  i,inter = -1 ;
+    float temp , min = FLT_MAX ;
+    Vec3 inters = Vec3() ;
 
-    // Chercher l'indice de la premiere intersection
+    int nb_quads  = m_quad_indices.size() ;
     #pragma omp parallel for
-    for (i = 0; i < nb_quads; i += 4) {
-        if (intersect_ray_quad(P, Dir, i, intersector)) {
-                min = glm::length(P - intersector);
-                index = i;
-                existe = true ;
-            }
-        }
-    // S'il y'a au moins une intersection
-    if(existe)
+    for (i = 0  ; i < nb_quads ; i+=4)
     {
-        #pragma omp parallel for
-        for (i = 0; i < nb_quads; i += 4){
-            if (intersect_ray_quad(P, Dir, i, intersector))
+        if(intersect_ray_quad(P,Dir,i,inters))
+        {
+            temp = glm::length(P - inters) ;
+            if( temp  < min)
             {
-                    temp = glm::length(P - intersector);
-                    if (temp < min) {
-                        index = i;
-                        min = temp;
-                    }
+                inter = i ;
+                min = temp ;
             }
         }
     }
 
-    return index;
+    return inter;
+
 }
 
 
@@ -410,14 +399,14 @@ void MeshQuad::transfo_quad(int q, const glm::mat4& tr)
     // indice utilisation de glm::inverse() et de local_frame
     Mat4 local = local_frame(q);
 
+      // Si la l'inverse n'existe pas on retourne
      if (glm::determinant(local) == 0) {
         return;
     }
     Mat4 transfo = local * tr * glm::inverse(local);
 
     // Application au 4 points du quad
-    Vec4 A_prime, B_prime, C_prime, D_prime;
-
+     
     A = Vec3(transfo * Vec4(A, 1));
     B = Vec3(transfo * Vec4(B, 1));
     C = Vec3(transfo * Vec4(C, 1));
@@ -428,26 +417,20 @@ void MeshQuad::transfo_quad(int q, const glm::mat4& tr)
 
 void MeshQuad::decale_quad(int q, float d)
 {
-    Mat4 transfo = translate(0, 0, d);
-    transfo_quad(q, transfo);
-
-    gl_update();
+     transfo_quad(q, translate(0, 0, d));
+     gl_update();
 }
 
 void MeshQuad::shrink_quad(int q, float s)
 {
-    Mat4 transfo = scale(s);
-    transfo_quad(q, transfo);
-
+    transfo_quad(q, scale(s));
     gl_update();
 }
 
 void MeshQuad::tourne_quad(int q, float a)
 {
-    Mat4 transfo = rotateZ(a) ;
-    transfo_quad(q, transfo);
-
-    gl_update();
+     transfo_quad(q, rotateZ(a));
+     gl_update();
 }
 
 
diff --git a/TP_Geom3D_2018/bin/proj_model.exe b/TP_Geom3D_2018/bin/proj_model.exe
index 73e179ff3626880832142170af7c42c67da42d76..05b74f6119ecae93308693056ac0fd709ff01e42 100644
Binary files a/TP_Geom3D_2018/bin/proj_model.exe and b/TP_Geom3D_2018/bin/proj_model.exe differ
diff --git a/TP_Geom3D_2018/bin/proj_model.ilk b/TP_Geom3D_2018/bin/proj_model.ilk
index 3302f40956bbf72742a51da1f267ef076799fb51..b4294ef05ea27a6608d0813c22852bdbcc965f47 100644
Binary files a/TP_Geom3D_2018/bin/proj_model.ilk and b/TP_Geom3D_2018/bin/proj_model.ilk differ
diff --git a/TP_Geom3D_2018/bin/proj_model.pdb b/TP_Geom3D_2018/bin/proj_model.pdb
index 0b66bd9af84f080c5e6a2d4bc6252a83a81ea516..c3e8e6000f5027618b971b7d0d2923c216800bb4 100644
Binary files a/TP_Geom3D_2018/bin/proj_model.pdb and b/TP_Geom3D_2018/bin/proj_model.pdb differ
diff --git a/TP_Geom3D_2018/geom3D.pro.user b/TP_Geom3D_2018/geom3D.pro.user
index 4d935056bc8477ad8f2dbc0a2193984d3cd3f87c..981e9f7755f21f694180e5950441ba18b791cd48 100644
--- a/TP_Geom3D_2018/geom3D.pro.user
+++ b/TP_Geom3D_2018/geom3D.pro.user
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.11.1, 2020-04-02T14:43:58. -->
+<!-- Written by QtCreator 4.11.1, 2020-04-16T21:17:55. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>
diff --git a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/main.obj b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/main.obj
index 459e124526787fefe2bd50f490577dee86ab21df..f3525390abfe5c8b23006e9c9bcb06bf7e9528ce 100644
Binary files a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/main.obj and b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/main.obj differ
diff --git a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/meshquad.obj b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/meshquad.obj
index 4dc4da8bc2be4784409eac6b63dd6a531f3c4621..4bd326fba1f7419c92d3c8c5c772c63599050993 100644
Binary files a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/meshquad.obj and b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/meshquad.obj differ
diff --git a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/primitives.obj b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/primitives.obj
index c7cc3e4b9b9cbac13591f7f7b10c840d869e8cad..2c367e98f43267139679596d2264ef7e37ad44bf 100644
Binary files a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/primitives.obj and b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/primitives.obj differ
diff --git a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/proj_model.vc.pdb b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/proj_model.vc.pdb
index 0abd5eb4309ecc69004f4c5c40e294e4fefd20dc..d8af9c4b004fbb23863a8036f2bf64eb1737c266 100644
Binary files a/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/proj_model.vc.pdb and b/build-geom3D-Desktop_Qt_5_14_1_MSVC2017_32bit-Debug/Projet_modeling/debug/proj_model.vc.pdb differ