Create vec3 module

This commit is contained in:
2025-09-23 15:36:08 +01:00
parent db2c95640d
commit 65b50578fa
3 changed files with 68 additions and 0 deletions

View File

@@ -10,6 +10,7 @@ endmacro()
add_library(batomorph add_library(batomorph
src/ff.c src/ff.c
src/vec3.c
) )
configure_target(batomorph) configure_target(batomorph)
target_include_directories(batomorph PUBLIC include) target_include_directories(batomorph PUBLIC include)

16
include/vec3.h Normal file
View File

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

51
src/vec3.c Normal file
View File

@@ -0,0 +1,51 @@
#include "vec3.h"
#include <math.h>
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));
}