#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}; }