#include "structs.h"
#include "math.h"
vec3 vec3Add(vec3 a, vec3 b) {
    return (vec3){a.x + b.x, a.y + b.y, a.z + b.z};
}
vec3 vec3Subtract(vec3 a, vec3 b) {
    return (vec3){a.x - b.x, a.y - b.y, a.z - b.z};
}
vec3 vec3Scale(vec3 vector, double scalar) {
    return (vec3){vector.x * scalar, vector.y * scalar, vector.z * scalar};
}
double vec3Product(vec3 a, vec3 b) {
    return (a.x * b.x + a.y * b.y + a.z * b.z);
}
double vec3Length(vec3 vector) {
    return sqrt(vector.x * vector.x + vector.y * vector.y + vector.z * vector.z);
}
vec3 vec3Normalize(vec3 vector) {
    double length = vec3Length(vector);
    return (vec3){vector.x / length, vector.y / length, vector.z / length};
}
vec3 vec3Cross(vec3 a, vec3 b) {
    return (vec3){a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x};
}