/////////////////////////////////////////////////////////////////////////////// // // vector.cpp // // Description // Classe définissant un vecteur. // // Copyright // Laboratoire LSIS // Equipe LXAO // // Historique // 12/05/1999 Création par Sébastien Thon // /////////////////////////////////////////////////////////////////////////////// #include #include #include "vector.h" double Vector::operator % ( const Vector& v ) const { return x*v.x + y*v.y + z*v.z; } Vector Vector::operator ^ ( const Vector& v ) const { return Vector( y*v.z-z*v.y, z*v.x-x*v.z, x*v.y-y*v.x ); } void Vector::normalize() { double len = (double)sqrt( x*x + y*y + z*z ); if( len == 0 ) { x=0; y=0; z=0; } else { x/=len; y/=len; z/=len; } } Vector Vector::operator + ( const Vector& v ) const { return Vector( x+v.x, y+v.y, z+v.z ); } Vector Vector::operator + ( double d ) const { return Vector( x+d, y+d, z+d ); } Vector operator + ( const Vector& v1, const Vector& v2 ) { return Vector( v1.x+v2.x, v1.y+v2.y, v1.z+v2.z ); } Vector Vector::operator - ( const Vector& v ) const { return Vector( x-v.x, y-v.y, z-v.z ); } Vector Vector::operator - ( double d ) const { return Vector( x-d, y-d, z-d ); } Vector operator - ( const Vector& v1, const Vector& v2 ) { return Vector( v1.x-v2.x, v1.y-v2.y, v1.z-v2.z ); } Vector Vector::operator - () const { return Vector( -x, -y, -z ); } Vector Vector::operator * ( const Vector& v ) const { return Vector( x*v.x, y*v.y, z*v.z ); } Vector operator * ( const Vector& v1, const Vector& v2 ) { return Vector( v1.x*v2.x, v1.y*v2.y, v1.z*v2.z ); } Vector Vector::operator * ( double d ) const { return Vector( x*d, y*d, z*d ); } Vector Vector::operator / ( double d ) const { return Vector( x/d, y/d, z/d ); } Vector Vector::operator / ( const Vector& v ) const { return Vector( x/v.x, y/v.y, z/v.z ); } Vector operator / ( const Vector& v1, const Vector& v2 ) { return Vector( v1.x/v2.x, v1.y/v2.y, v1.z/v2.z ); } int Vector::operator == ( const Vector& v ) { return( (x == v.x) && (y == v.y) && (z == v.z) ); } int Vector::operator != ( const Vector& v ) { return( (x != v.x) || (y != v.y) || (z != v.z) ); } int Vector::operator > ( const Vector& v ) { return( (x > v.x) || (y > v.y) || (z > v.z) ); } int Vector::operator < ( const Vector& v ) { return( (x < v.x) || (y < v.y) || (z < v.z) ); } Vector& Vector::operator = ( const Vector& v ) { x = v.x; y = v.y; z = v.z; return *this; } Vector& Vector::operator += ( const Vector& v ) { x += v.x; y += v.y; z += v.z; return *this; } Vector& Vector::operator -= ( const Vector& v ) { x -= v.x; y -= v.y; z -= v.z; return *this; } Vector& Vector::operator += ( double d ) { x += d; y += d; z += d; return *this; } Vector& Vector::operator -= ( double d ) { x -= d; y -= d; z -= d; return *this; } Vector& Vector::operator *= ( double d ) { x *= d; y *= d; z *= d; return *this; } Vector& Vector::operator /= ( double d ) { x /= d; y /= d; z /= d; return *this; } double Vector::length() const { return (double)sqrt( x*x + y*y + z*z ); } double Vector::distance( const Vector& v ) const { return (double)sqrt( (x-v.x)*(x-v.x) + (y-v.y)*(y-v.y) + (z-v.z)*(z-v.z) ); } double Vector::distance( double _x, double _y, double _z ) const { return (double)sqrt( (x-_x)*(x-_x) + (y-_y)*(y-_y) + (z-_z)*(z-_z) ); } double Vector::distance_squared( const Vector& v ) const { return (x-v.x)*(x-v.x) + (y-v.y)*(y-v.y) + (z-v.z)*(z-v.z); } double Vector::distance_squared( double _x, double _y, double _z ) const { return (x-_x)*(x-_x) + (y-_y)*(y-_y) + (z-_z)*(z-_z); }