bool operator<(const Vector3D& lv, const Vector3D& rv) { if(lv.get_x()==rv.get_x()) if(lv.get_y()==rv.get_y()) if(lv.get_z()==rv.get_z()) return false; else return lv.get_z()<rv.get_z(); else return lv.get_y()<rv.get_y(); else return lv.get_x()<rv.get_x(); }
//left : the other direction of the target plan of camera NORMALIZED and perpendicular to up Vector3D left(const Camera &c) { Vector3D nrm = c.target()-c.eye();//vector normal of target plan double u1 = c.up().get_x(), u2 = c.up().get_y(), u3 = c.up().get_z(), v1 = nrm.get_x(), v2 = nrm.get_y(), v3 = nrm.get_z(); return normalize(Vector3D(u2*v3-u3*v2, u3*v1-u1*v3, u1*v2-u2*v1)); }
double operator*( const Vector3D &v1, const Vector3D &v2) { return(v1.get_x()*v2.get_x()+ v1.get_y()*v2.get_y()+ v1.get_z()*v2.get_z()); }
Vector3D operator/(const Vector3D &v, const double &d) { return Vector3D(v.get_x()/d, v.get_y()/d, v.get_z()/d); }
Vector3D operator*(const double &d, const Vector3D &v) { return Vector3D(d*v.get_x(), d*v.get_y(), d*v.get_z()); }
Vector3D operator-(const Vector3D& lv, const Vector3D& rv) { return Vector3D(lv.get_x()-rv.get_x(), lv.get_y()-rv.get_y(), lv.get_z()-rv.get_z()); }
//copy the coordinates of a vector void Vector3D::copy(const Vector3D& v) { x = v.get_x(); y = v.get_y(); z = v.get_z(); }
//overload operator == < to overload < for sphere bool operator==(const Vector3D& lv, const Vector3D& rv) { return (lv.get_x() == rv.get_x() && lv.get_y() == rv.get_y() && lv.get_z() == rv.get_z()); }
//norm normalize double norm(const Vector3D &v) { return sqrt(v.get_x()*v.get_x()+ v.get_y()*v.get_y()+ v.get_z()*v.get_z()); }