From 4416c8530246eddacfff658c76008851b6843ef4 Mon Sep 17 00:00:00 2001 From: Orestis Malaspinas <orestis.malaspinas@hesge.ch> Date: Mon, 24 Aug 2020 16:47:30 +0200 Subject: [PATCH] added normalize --- travail_pratique/vec2/tests/vec2_tests.c | 25 ++++++++++++++++++++++++ travail_pratique/vec2/vec2.c | 6 ++++++ travail_pratique/vec2/vec2.h | 2 ++ 3 files changed, 33 insertions(+) diff --git a/travail_pratique/vec2/tests/vec2_tests.c b/travail_pratique/vec2/tests/vec2_tests.c index b520144..12c9fa5 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 4946724..62272c3 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 f085f07..402824d 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); -- GitLab