diff --git a/travail_pratique/vec2/tests/vec2_tests.c b/travail_pratique/vec2/tests/vec2_tests.c
index b520144def7e38f523fbd4dcd970e6e9f0af307f..12c9fa56ea33f0d4db8c4aea525246622f99daf1 100644
--- a/travail_pratique/vec2/tests/vec2_tests.c
+++ b/travail_pratique/vec2/tests/vec2_tests.c
@@ -124,6 +124,30 @@ MU_TEST(test_vec2_norm) {
     );
 }
 
+MU_TEST(test_vec2_normalize) {
+    mu_assert(
+        vec2_is_approx_equal(vec2_normalize(e_x), e_x, MINUNIT_EPSILON),
+        "||e_x||=1 => normalize(e_x)=e_x"
+    );
+
+    mu_assert(
+        vec2_is_approx_equal(vec2_normalize(e_y), e_y, MINUNIT_EPSILON),
+        "||e_y||=1 => normalize(e_y)=e_y"
+    );
+
+    mu_assert(
+        vec2_is_approx_equal(
+            vec2_normalize(four_two), 
+            vec2_mul(1.0 / sqrt(20.0), four_two), MINUNIT_EPSILON),
+        "||v|| = ||(4, 2)|| = sqrt(20) => normalize(v) = 1/sqrt(20) * (4, 2)"
+    );
+
+    mu_assert_double_eq(
+        vec2_norm(vec2_normalize(four_two)), 
+        1.0
+    );
+}
+
 MU_TEST_SUITE(test_suite) {
 	MU_SUITE_CONFIGURE(&test_setup, &test_teardown);
 
@@ -134,6 +158,7 @@ MU_TEST_SUITE(test_suite) {
 	MU_RUN_TEST(test_vec2_mul);
 	MU_RUN_TEST(test_vec2_dot);
 	MU_RUN_TEST(test_vec2_norm);
+	MU_RUN_TEST(test_vec2_normalize);
 }
 
 int main() {
diff --git a/travail_pratique/vec2/vec2.c b/travail_pratique/vec2/vec2.c
index 494672414d9643fcc4524f318661a41fd0b50f65..62272c359ced528332771a10b5477eee627464bc 100644
--- a/travail_pratique/vec2/vec2.c
+++ b/travail_pratique/vec2/vec2.c
@@ -40,6 +40,12 @@ double vec2_norm(vec2 v) {
     return sqrt(vec2_norm_sqr(v));
 }
 
+vec2 vec2_normalize(vec2 v) {
+    double norm = vec2_norm(v);
+
+    return vec2_mul(1.0 / norm, v);
+}
+
 bool vec2_is_approx_equal(vec2 lhs, vec2 rhs, double eps) {
     return vec2_norm(vec2_sub(lhs, rhs)) < eps;
 }
diff --git a/travail_pratique/vec2/vec2.h b/travail_pratique/vec2/vec2.h
index f085f0729629803a415e8455d0c61fc41f975ac6..402824d12890dd2e0946fb591680c72eeb717e55 100644
--- a/travail_pratique/vec2/vec2.h
+++ b/travail_pratique/vec2/vec2.h
@@ -21,6 +21,8 @@ double vec2_norm_sqr(vec2 v);
 
 double vec2_norm(vec2 v);
 
+vec2 vec2_normalize(vec2 v);
+
 bool vec2_is_approx_equal(vec2 lhs, vec2 rhs, double eps);
 
 void vec2_print(vec2 v);