Create vec3 module
This commit is contained in:
@@ -10,6 +10,7 @@ endmacro()
|
||||
|
||||
add_library(batomorph
|
||||
src/ff.c
|
||||
src/vec3.c
|
||||
)
|
||||
configure_target(batomorph)
|
||||
target_include_directories(batomorph PUBLIC include)
|
||||
|
||||
16
include/vec3.h
Normal file
16
include/vec3.h
Normal 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
51
src/vec3.c
Normal 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));
|
||||
}
|
||||
Reference in New Issue
Block a user