Add vector magnitude calculation

This commit is contained in:
Abdelrahman Said 2023-12-20 16:37:50 +00:00
parent 2ec654774e
commit 0345f90405
3 changed files with 27 additions and 1 deletions
include/vector
src
raytracer
vector

@ -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

@ -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};

@ -1,4 +1,5 @@
#include "vector/vec.h"
#include <math.h>
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);
}