diff --git a/__pycache__/camera.cpython-33.pyc b/__pycache__/camera.cpython-33.pyc
index 7ac9cd14ce80218af0287c5e0f604d59b9c1e5cf..9162902ab8f1d7ebd4d0c8cfd5ee667372bea14a 100644
Binary files a/__pycache__/camera.cpython-33.pyc and b/__pycache__/camera.cpython-33.pyc differ
diff --git a/__pycache__/intersection.cpython-33.pyc b/__pycache__/intersection.cpython-33.pyc
index fae1ae74b367b9008f501976711328e4472c8010..b1778d74fdf9ad5c715e15622e77de29694fd838 100644
Binary files a/__pycache__/intersection.cpython-33.pyc and b/__pycache__/intersection.cpython-33.pyc differ
diff --git a/__pycache__/operation_vector.cpython-33.pyc b/__pycache__/operation_vector.cpython-33.pyc
index 6985a18e0b64f2524fb9bd0aa6ba3ed8b3334944..e84bbd2848fce4b6cdc33127148be27cedf31906 100644
Binary files a/__pycache__/operation_vector.cpython-33.pyc and b/__pycache__/operation_vector.cpython-33.pyc differ
diff --git a/__pycache__/raytracer.cpython-33.pyc b/__pycache__/raytracer.cpython-33.pyc
index 89eb08a1605bcffef331f543624caa5026ea71a1..02d8c7a6d69ecbd0f4849f8bd080bbabd9c1a4f9 100644
Binary files a/__pycache__/raytracer.cpython-33.pyc and b/__pycache__/raytracer.cpython-33.pyc differ
diff --git a/__pycache__/scene.cpython-33.pyc b/__pycache__/scene.cpython-33.pyc
index ac3f713769654225108a1111d89b0afaa5f39b8a..89952a162f1aa67ab673f4253845d919d5613d25 100644
Binary files a/__pycache__/scene.cpython-33.pyc and b/__pycache__/scene.cpython-33.pyc differ
diff --git a/intersection.py b/intersection.py
index 9995590494ea9f734a3d3558c371500ea5bfa654..13b87b9e5aa80790b5d224de495ecc8e30656d05 100644
--- a/intersection.py
+++ b/intersection.py
@@ -1,5 +1,6 @@
 from operation_vector import *
 from scene import *
+from math import atan, pi
 
 class Intersection:
     def __init__(self, position, normal, object):
@@ -35,7 +36,38 @@ def intersect(objet, ray):
         else:
             return Intersection(position, -(position - centre).normalized(), objet)
         
+    elif type(objet) is Triangle:
+        i = (objet.v1 - objet.v0).normalized()
+        j = (objet.v2 - objet.v0).normalized()
+        n = (i^j).normalized()
+        if l*n == 0:
+            return None
+        
+        px = ((objet.v0 - o)*n)/(l*n)
+        p = o + px*l
+        
+        if not(pointInTriangle(p, objet.v0, objet.v1, objet.v2)):
+            return None
+        
+        normal = -n*((l*n)/abs(l*n))
+        return Intersection(p, normal, objet)
+    
+    else:
+        print('c',end = ' ')
     
     
         
 
+def sameSide(p1, p2, a,b):
+    cp1 = (b-a)^(p1-a)
+    cp2 = (b-a)^(p2-a)
+    if cp1*cp2 >= 0:
+        return True
+    else:
+        return False
+
+def pointInTriangle(p, a, b, c):
+    if sameSide(p, a, b, c) and sameSide(p, b, a, c) and sameSide(p, c, a, b):
+        return True
+    else:
+        return False
diff --git a/operation_vector.py b/operation_vector.py
index fe5ffd241221cd40c19373327dc9434580349cdd..c0a4af0f0a03b8b71816cc76929beecad5c8b532 100644
--- a/operation_vector.py
+++ b/operation_vector.py
@@ -45,7 +45,7 @@ class Vector:
         return vector1 + (-1 * vector2)
 
     def __repr__(self):
-        return 'Vector' + str(self.coord())
+        return 'Vector(' + str(list(self.coord())) + ')'
     
     def __str__(self):
         return '/ ' + str(self.x) + '\n| ' + str(self.y) + '\n\\ ' + str(self.z) + '\n'
diff --git a/scene.py b/scene.py
index c18a96bce3cfcdc353f36e09f7b6754cf9666f04..c252592547bab259ea1230ed7271718e0f263b03 100644
--- a/scene.py
+++ b/scene.py
@@ -6,6 +6,13 @@ class Sphere:
         self.radius = rayon
         self.material = material
 
+class Triangle:
+    def __init__(self, v0, v1, v2, material):
+        self.v0 = v0
+        self.v1 = v1
+        self.v2 = v2
+        self.material = material
+
 class Material:
     def __init__(self, color, ambiant, diffuse, specular, shininess, reflection):
         self.color = color
diff --git a/scripts/__pycache__/script_triangle_multi.cpython-33.pyc b/scripts/__pycache__/script_triangle_multi.cpython-33.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..7fb3a5a80b95934132e49a6ce92b5e23a35fa7d7
Binary files /dev/null and b/scripts/__pycache__/script_triangle_multi.cpython-33.pyc differ
diff --git a/scripts/script_triangle.py b/scripts/script_triangle.py
index 4dac2c860f2845db1b13184a2a6370b2df2c8b3a..b77c4cc0c23f36269625a8c67e39319275daca2c 100644
--- a/scripts/script_triangle.py
+++ b/scripts/script_triangle.py
@@ -14,21 +14,21 @@ materiau_sphere_rouge = Material(Vector((1,0,0)), .5, .3, .3, 100, .3)
 materiau_sphere_blanche = Material(Vector((1,1,1)), .5, .3, .3, 100, 0)
 materiau_sphere_verte= Material(Vector((0,1,0)), .5, .3, .3, 100, .3)
 c = (8+2*(3**.5))**.5
-l = 0+0*((c**2 - 4)**.5)
-v0 = Vector([0,0,2+l])
-v1 = Vector([0,2,2+l])
-v2 = Vector([2,0,2+l])
+l = ((c**2 - 4)**.5)
 v3 = Vector([0,0,2])
-#triangle_rouge = Triangle(v0,v1,v3,materiau_sphere_rouge)
-#triangle_vert = Triangle(v1,v2,v3,materiau_sphere_verte)
-#triangle_bleu = Triangle(v0,v2,v3,materiau_sphere_bleue)
-triangle_blanc = Triangle(v0,v1,v2,materiau_sphere_blanche)
+v1 = Vector([2,0,4])
+v2 = Vector([-1,l,4])
+v0 = Vector([-1,-l,4])
+triangle_rouge = Triangle(v0,v1,v3,materiau_sphere_rouge)
+triangle_vert = Triangle(v1,v2,v3,materiau_sphere_verte)
+triangle_bleu = Triangle(v0,v2,v3,materiau_sphere_bleue)
+#triangle_blanc = Triangle(v0,v1,v2,materiau_sphere_blanche)
 lumiere = Spotlight(Vector((1,1,0)), Vector((1,1,1)))
 scene = Scene()
-#scene.add_object(sphere_blanche)
-#scene.add_object(triangle_bleu)
-#scene.add_object(triangle_rouge)
-scene.add_object(triangle_blanc)
+scene.add_object(triangle_vert)
+scene.add_object(triangle_bleu)
+scene.add_object(triangle_rouge)
+#scene.add_object(triangle_blanc)
 scene.add_light(lumiere)
 affiche = raytracer_render(camera, scene)
 imsave('try.png',affiche)
diff --git a/scripts/script_triangle_multi.py b/scripts/script_triangle_multi.py
index f3fabc5cf6e728d109c3efa645b51a24eb949371..b51df60f2dea674c9793f599b3799110b1f30a53 100644
--- a/scripts/script_triangle_multi.py
+++ b/scripts/script_triangle_multi.py
@@ -25,18 +25,18 @@ c = (8+2*(3**.5))**.5
 l = (c**2 - 4)**.5
 v0 = Vector([0,2,2+l])
 v1 = Vector([3**.5,-1,2+l])
-v2 = Vector([3**.5,-1,2+l])
+v2 = Vector([-3**.5,-1,2+l])
 v3 = Vector([0,0,2])
-#triangle_rouge = Triangle(v0,v1,v3,materiau_sphere_rouge)
-#triangle_vert = Triangle(v1,v2,v3,materiau_sphere_verte)
-#triangle_bleu = Triangle(v0,v2,v3,materiau_sphere_bleue)
-triangle_blanc = Triangle(v0,v2,v3,materiau_sphere_blanche)
+triangle_rouge = Triangle(v0,v1,v3,materiau_sphere_rouge)
+triangle_vert = Triangle(v1,v2,v3,materiau_sphere_verte)
+triangle_bleu = Triangle(v0,v2,v3,materiau_sphere_bleue)
+#triangle_blanc = Triangle(v0,v2,v3,materiau_sphere_blanche)
 scene = Scene()
 lumiere = Spotlight(Vector([0,0,0]), Vector([1,1,1]))
-#scene.add_object(sphere_blanche)
-#scene.add_object(triangle_bleu)
-#scene.add_object(triangle_rouge)
-scene.add_object(triangle_blanc)
+scene.add_object(triangle_vert)
+scene.add_object(triangle_bleu)
+scene.add_object(triangle_rouge)
+#scene.add_object(triangle_blanc)
 scene.add_light(lumiere)
 affiche = np.zeros((nx, ny, 3))
 rows = list(range(nx))
diff --git a/scripts/triangle.png b/scripts/triangle.png
new file mode 100644
index 0000000000000000000000000000000000000000..4903dab3f31361c73814004329e1137c9c72c6d7
Binary files /dev/null and b/scripts/triangle.png differ
diff --git a/scripts/try.png b/scripts/try.png
index 09abf45b713453cc820b6eca100672c98914e8f3..95846b642e6cc8cc5fcc12b1a048252d89e8c8e0 100644
Binary files a/scripts/try.png and b/scripts/try.png differ