From f34e2346092649f5affa8a91cad2eaf9632387c5 Mon Sep 17 00:00:00 2001 From: Abdelrahman Date: Sat, 3 Feb 2024 19:18:50 +0000 Subject: [PATCH] Define utilities to multiply and divide a vector by a number --- include/vector/vec.h | 10 ++++++++++ src/vector/vec.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/include/vector/vec.h b/include/vector/vec.h index d1b08fa..f9a2e26 100644 --- a/include/vector/vec.h +++ b/include/vector/vec.h @@ -28,6 +28,8 @@ typedef struct { #define vec_add(T, v1, v2) vec_add_##T(v1, v2) #define vec_sub(T, v1, v2) vec_sub_##T(v1, v2) #define vec_mul(T, v1, v2) vec_mul_##T(v1, v2) +#define vec_mul_num(T, v1, num) vec_mul_num_##T(v1, num) +#define vec_div_num(T, v1, num) vec_div_num_##T(v1, num) #define vec_dot(T, v1, v2) vec_dot_##T(v1, v2) #define vec_magnitude(T, v) vec_magnitude_##T(v) #define vec_unit(T, v) vec_unit_##T(v) @@ -35,6 +37,8 @@ typedef struct { vec2i_t vec_add_vec2i_t(vec2i_t v1, vec2i_t v2); vec2i_t vec_sub_vec2i_t(vec2i_t v1, vec2i_t v2); vec2i_t vec_mul_vec2i_t(vec2i_t v1, vec2i_t v2); +vec2i_t vec_mul_num_vec2i_t(vec2i_t v1, i32 num); +vec2i_t vec_div_num_vec2i_t(vec2i_t v1, i32 num); i32 vec_dot_vec2i_t(vec2i_t v1, vec2i_t v2); i32 vec_magnitude_vec2i_t(vec2i_t v); vec2i_t vec_unit_vec2i_t(vec2i_t v); @@ -42,6 +46,8 @@ vec2i_t vec_unit_vec2i_t(vec2i_t v); vec2f_t vec_add_vec2f_t(vec2f_t v1, vec2f_t v2); vec2f_t vec_sub_vec2f_t(vec2f_t v1, vec2f_t v2); vec2f_t vec_mul_vec2f_t(vec2f_t v1, vec2f_t v2); +vec2f_t vec_mul_num_vec2f_t(vec2f_t v1, f32 num); +vec2f_t vec_div_num_vec2f_t(vec2f_t v1, f32 num); f32 vec_dot_vec2f_t(vec2f_t v1, vec2f_t v2); f32 vec_magnitude_vec2f_t(vec2f_t v); vec2f_t vec_unit_vec2f_t(vec2f_t v); @@ -49,6 +55,8 @@ vec2f_t vec_unit_vec2f_t(vec2f_t v); vec3i_t vec_add_vec3i_t(vec3i_t v1, vec3i_t v2); vec3i_t vec_sub_vec3i_t(vec3i_t v1, vec3i_t v2); vec3i_t vec_mul_vec3i_t(vec3i_t v1, vec3i_t v2); +vec3i_t vec_mul_num_vec3i_t(vec3i_t v1, i32 num); +vec3i_t vec_div_num_vec3i_t(vec3i_t v1, i32 num); i32 vec_dot_vec3i_t(vec3i_t v1, vec3i_t v2); i32 vec_magnitude_vec3i_t(vec3i_t v); vec3i_t vec_unit_vec3i_t(vec3i_t v); @@ -56,6 +64,8 @@ vec3i_t vec_unit_vec3i_t(vec3i_t v); vec3f_t vec_add_vec3f_t(vec3f_t v1, vec3f_t v2); vec3f_t vec_sub_vec3f_t(vec3f_t v1, vec3f_t v2); vec3f_t vec_mul_vec3f_t(vec3f_t v1, vec3f_t v2); +vec3f_t vec_mul_num_vec3f_t(vec3f_t v1, f32 num); +vec3f_t vec_div_num_vec3f_t(vec3f_t v1, f32 num); f32 vec_dot_vec3f_t(vec3f_t v1, vec3f_t v2); f32 vec_magnitude_vec3f_t(vec3f_t v); vec3f_t vec_unit_vec3f_t(vec3f_t v); diff --git a/src/vector/vec.c b/src/vector/vec.c index 56096cc..8145339 100644 --- a/src/vector/vec.c +++ b/src/vector/vec.c @@ -13,6 +13,14 @@ vec2i_t vec_mul_vec2i_t(vec2i_t v1, vec2i_t v2) { return (vec2i_t){.x = v1.x * v2.x, .y = v1.y * v2.y}; } +vec2i_t vec_mul_num_vec2i_t(vec2i_t v1, i32 num) { + return (vec2i_t){.x = v1.x * num, .y = v1.y * num}; +} + +vec2i_t vec_div_num_vec2i_t(vec2i_t v1, i32 num) { + return (vec2i_t){.x = v1.x / num, .y = v1.y / num}; +} + i32 vec_dot_vec2i_t(vec2i_t v1, vec2i_t v2) { return v1.x * v2.x + v1.y * v2.y; } @@ -39,6 +47,14 @@ vec2f_t vec_mul_vec2f_t(vec2f_t v1, vec2f_t v2) { return (vec2f_t){.x = v1.x * v2.x, .y = v1.y * v2.y}; } +vec2f_t vec_mul_num_vec2f_t(vec2f_t v1, f32 num) { + return (vec2f_t){.x = v1.x * num, .y = v1.y * num}; +} + +vec2f_t vec_div_num_vec2f_t(vec2f_t v1, f32 num) { + return (vec2f_t){.x = v1.x / num, .y = v1.y / num}; +} + f32 vec_dot_vec2f_t(vec2f_t v1, vec2f_t v2) { return v1.x * v2.x + v1.y * v2.y; } @@ -65,6 +81,14 @@ vec3i_t vec_mul_vec3i_t(vec3i_t v1, vec3i_t v2) { return (vec3i_t){.x = v1.x * v2.x, .y = v1.y * v2.y, .z = v1.z * v2.z}; } +vec3i_t vec_mul_num_vec3i_t(vec3i_t v1, i32 num) { + return (vec3i_t){.x = v1.x * num, .y = v1.y * num, .z = v1.z * num}; +} + +vec3i_t vec_div_num_vec3i_t(vec3i_t v1, i32 num) { + return (vec3i_t){.x = v1.x / num, .y = v1.y / num, .z = v1.z / num}; +} + i32 vec_dot_vec3i_t(vec3i_t v1, vec3i_t v2) { return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z; } @@ -87,6 +111,14 @@ vec3f_t vec_sub_vec3f_t(vec3f_t v1, vec3f_t v2) { return (vec3f_t){.x = v1.x - v2.x, .y = v1.y - v2.y, .z = v1.z - v2.z}; } +vec3f_t vec_mul_num_vec3f_t(vec3f_t v1, f32 num) { + return (vec3f_t){.x = v1.x * num, .y = v1.y * num, .z = v1.z * num}; +} + +vec3f_t vec_div_num_vec3f_t(vec3f_t v1, f32 num) { + return (vec3f_t){.x = v1.x / num, .y = v1.y / num, .z = v1.z / num}; +} + vec3f_t vec_mul_vec3f_t(vec3f_t v1, vec3f_t v2) { return (vec3f_t){.x = v1.x * v2.x, .y = v1.y * v2.y, .z = v1.z * v2.z}; }