From 0345f9040507db7d4dbda80944cdf1f095d0d788 Mon Sep 17 00:00:00 2001 From: Abdelrahman Said Date: Wed, 20 Dec 2023 16:37:50 +0000 Subject: [PATCH] Add vector magnitude calculation --- include/vector/vec.h | 5 +++++ src/raytracer/main.c | 2 +- src/vector/vec.c | 21 +++++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/include/vector/vec.h b/include/vector/vec.h index fd1637d..658c3b2 100644 --- a/include/vector/vec.h +++ b/include/vector/vec.h @@ -29,25 +29,30 @@ typedef struct { #define vec_sub(T, v1, v2) vec_sub_##T(v1, v2) #define vec_mul(T, v1, v2) vec_mul_##T(v1, v2) #define vec_dot(T, v1, v2) vec_dot_##T(v1, v2) +#define vec_magnitude(T, v) vec_magnitude_##T(v) 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); i32 vec_dot_vec2i_t(vec2i_t v1, vec2i_t v2); +i32 vec_magnitude_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); f32 vec_dot_vec2f_t(vec2f_t v1, vec2f_t v2); +f32 vec_magnitude_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); i32 vec_dot_vec3i_t(vec3i_t v1, vec3i_t v2); +i32 vec_magnitude_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); f32 vec_dot_vec3f_t(vec3f_t v1, vec3f_t v2); +f32 vec_magnitude_vec3f_t(vec3f_t v); #endif // !VEC_H diff --git a/src/raytracer/main.c b/src/raytracer/main.c index f6d560d..6dd409a 100644 --- a/src/raytracer/main.c +++ b/src/raytracer/main.c @@ -30,7 +30,7 @@ solutions_t ray_intersects_sphere(vec3f_t origin, vec3f_t direction, colour_t trace_ray(vec3f_t origin, vec3f_t direction, f32 t_min, f32 t_max, const scene_t *scene, colour_t default_colour); -int main(int argc, char *argv[]) { +i32 main(i32 argc, char *argv[]) { colour_t bg = (colour_t){.r = 27, .g = 38, .b = 79, .a = 255}; vec3f_t camera = {.x = 0.0f, .y = 0.0f, .z = 0.0f}; vec3f_t viewport = {.x = 1.0f, .y = 1.0f, .z = 1.0f}; diff --git a/src/vector/vec.c b/src/vector/vec.c index 7ecedf7..e9cef13 100644 --- a/src/vector/vec.c +++ b/src/vector/vec.c @@ -1,4 +1,5 @@ #include "vector/vec.h" +#include vec2i_t vec_add_vec2i_t(vec2i_t v1, vec2i_t v2) { return (vec2i_t){.x = v1.x + v2.x, .y = v1.y + v2.y}; @@ -16,6 +17,11 @@ i32 vec_dot_vec2i_t(vec2i_t v1, vec2i_t v2) { return v1.x * v2.x + v1.y * v2.y; } +i32 vec_magnitude_vec2i_t(vec2i_t v) { + i32 dot_product = vec_dot_vec2i_t(v, v); + return (i32)sqrtf((f32)dot_product); +} + vec2f_t vec_add_vec2f_t(vec2f_t v1, vec2f_t v2) { return (vec2f_t){.x = v1.x + v2.x, .y = v1.y + v2.y}; } @@ -32,6 +38,11 @@ f32 vec_dot_vec2f_t(vec2f_t v1, vec2f_t v2) { return v1.x * v2.x + v1.y * v2.y; } +f32 vec_magnitude_vec2f_t(vec2f_t v) { + f32 dot_product = vec_dot_vec2f_t(v, v); + return sqrtf(dot_product); +} + vec3i_t vec_add_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}; } @@ -48,6 +59,11 @@ i32 vec_dot_vec3i_t(vec3i_t v1, vec3i_t v2) { return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z; } +i32 vec_magnitude_vec3i_t(vec3i_t v) { + i32 dot_product = vec_dot_vec3i_t(v, v); + return (i32)sqrtf((f32)dot_product); +} + vec3f_t vec_add_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}; } @@ -63,3 +79,8 @@ vec3f_t vec_mul_vec3f_t(vec3f_t v1, vec3f_t v2) { f32 vec_dot_vec3f_t(vec3f_t v1, vec3f_t v2) { return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z; } + +f32 vec_magnitude_vec3f_t(vec3f_t v) { + f32 dot_product = vec_dot_vec3f_t(v, v); + return sqrtf(dot_product); +}