280 lines
3.7 KiB
C++
Executable File
280 lines
3.7 KiB
C++
Executable File
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// vector.cpp
|
|
//
|
|
// Description
|
|
// Classe définissant un vecteur.
|
|
//
|
|
// Copyright
|
|
// Laboratoire LSIS
|
|
// Equipe LXAO
|
|
//
|
|
// Historique
|
|
// 12/05/1999 Création par Sébastien Thon
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
#include <math.h>
|
|
#include <stdio.h>
|
|
#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);
|
|
}
|