From 0d3871ff24243c680537ccacb4e0eceb66f93b4f Mon Sep 17 00:00:00 2001 From: Camden Dixie O'Brien Date: Tue, 23 Sep 2025 15:35:26 +0100 Subject: [PATCH] Create vec3 module --- CMakeLists.txt | 1 + include/vec3.h | 16 ++++++++++++++++ src/vec3.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 include/vec3.h create mode 100644 src/vec3.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 661a5a4..bd5e3ab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,7 @@ endmacro() add_library(batomorph src/ff.c + src/vec3.c ) configure_target(batomorph) target_include_directories(batomorph PUBLIC include) diff --git a/include/vec3.h b/include/vec3.h new file mode 100644 index 0000000..5ef216b --- /dev/null +++ b/include/vec3.h @@ -0,0 +1,16 @@ +#ifndef VEC3_H +#define VEC3_H + +typedef struct { + double x, y, z; +} vec3_t; + +vec3_t vec3_scale(vec3_t v, double s); +vec3_t vec3_add(vec3_t v, vec3_t u); +vec3_t vec3_sub(vec3_t v, vec3_t u); +double vec3_dot(vec3_t v, vec3_t u); +vec3_t vec3_cross(vec3_t v, vec3_t u); +double vec3_len(vec3_t v); +vec3_t vec3_unit(vec3_t v); + +#endif diff --git a/src/vec3.c b/src/vec3.c new file mode 100644 index 0000000..c71291d --- /dev/null +++ b/src/vec3.c @@ -0,0 +1,51 @@ +#include "vec3.h" + +#include + +vec3_t vec3_scale(vec3_t v, double s) +{ + v.x *= s; + v.y *= s; + v.z *= s; + return v; +} + +vec3_t vec3_add(vec3_t v, vec3_t u) +{ + v.x += u.x; + v.y += u.y; + v.z += u.z; + return v; +} + +vec3_t vec3_sub(vec3_t v, vec3_t u) +{ + v.x -= u.x; + v.y -= u.y; + v.z -= u.z; + return v; +} + +double vec3_dot(vec3_t v, vec3_t u) +{ + return v.x * u.x + v.y * u.y + v.z * u.z; +} + +vec3_t vec3_cross(vec3_t v, vec3_t u) +{ + return (vec3_t) { + .x = v.y * u.z - v.z * u.y, + .y = v.z * u.x - v.x * u.z, + .z = v.x * u.y - v.y * u.x, + }; +} + +double vec3_len(vec3_t v) +{ + return sqrt(v.x * v.x + v.y * v.y + v.z * v.z); +} + +vec3_t vec3_unit(vec3_t v) +{ + return vec3_scale(v, 1.0 / vec3_len(v)); +}