inline double maxnorm(const vec &v) { return ( std::abs(v.getX()) > std::abs(v.getY()) ) ? ( ( std::abs(v.getX()) > std::abs(v.getZ()) ) ? std::abs(v.getX()) : std::abs(v.getZ()) ) : ( ( std::abs(v.getY()) > std::abs(v.getZ()) ) ? std::abs(v.getY()) : std::abs(v.getZ()) ); }
// cross product inline vec operator^(const vec &v1, const vec &v2) { return vec( v1.getY()*v2.getZ() - v1.getZ()*v2.getY(), v1.getZ()*v2.getX() - v1.getX()*v2.getZ(), v1.getX()*v2.getY() - v1.getY()*v2.getX() ); }
// dot product inline double operator*(const vec &v1, const vec &v2) { return v1.getX()*v2.getX() + v1.getY()*v2.getY() + v1.getZ()*v2.getZ(); }
inline vec operator-(const vec &v1){ return vec (-v1.getX(), -v1.getY(), -v1.getZ()); }
inline bool operator!=(const vec &v1, const vec &v2) { return ((v1.getX()!=v2.getX()) || (v1.getY()!=v2.getY()) || (v1.getZ()==v2.getZ())); }
inline bool operator==(const vec &v1, const vec &v2) { return ((v1.getX()==v2.getX()) && (v1.getY()==v2.getY()) && (v1.getZ()==v2.getZ())); }