52 lines
700 B
C
52 lines
700 B
C
#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));
|
|
}
|