struct vec3 { float x, y, z; float norm() const; void display() const; void normalize(); float dot(vec3 const& b) const; vec3 cross(vec3 const& b) const; }; // Methods float vec3::dot(vec3 const& b) const { return x * b.x + y * b.y + z * b.z; } vec3 vec3::cross(vec3 const& b) const { return { y * b.z - z * b.y, z * b.x - x * b.z, x * b.y - y * b.x }; } // Functions float dot(vec3 const& a, vec3 const& b) { return a.x * b.x + a.y * b.y + a.z * b.z; } vec3 cross(vec3 const& a, vec3 const& b) { return { a.y*b.z - a.z*b.y, a.z*b.x - a.x*b.z, a.x*b.y - a.y*b.x }; }