干了半年,才接触这块,之前都没学过这些,至少没系统地学过.工作上不需要我这些,但是还是想学,最近终于开始接触了,为了牛逼,为了牛逼.
#include <iostream>
class Vector3
{
public:
float x ;
float y ;
float z ;
Vector3()
{
}
Vector3(const Vector3 & a): x(a.x), y(a.y), z(a.z)
{
}
Vector3(float x, float y, float z): x(x), y(y), z(z)
{
}
Vector3 & operator= (const Vector3& a)
{
x= a.x ;
y = a.y ;
z = a.z ;
return *this ;
}
bool operator == (const Vector3 & a) const
{
return x == a.x && y == a.y && z == a.z ;
}
bool operator != (const Vector3 & a) const
{
return x != a.x || y != a.y || z != a.z ;
}
void Zero()
{
x = 0 ;
y = 0 ;
z = 0 ;
}
Vector3 operator - () const
{
return Vector3(-x, -y, -z) ;
}
Vector3 operator + (const Vector3 & a) const
{
return Vector3(x + a.x, y + a.y, z + a.z) ;
}
Vector3 operator - (const Vector3 & a) const
{
return Vector3(x - a.x, y - a.y, z - a.z) ;
}
Vector3 operator * (float a) const
{
return Vector3(x * a, y * a, z * a) ;
}
Vector3 operator / (const float a) const
{
float oneOverA = 1 / a ;
return Vector3(x * oneOverA, y * oneOverA, z * oneOverA) ;
}
Vector3 operator += (const Vector3 & a)
{
x += a.x ;
y += a.y ;
z+= a.z ;
return *this ;
}
Vector3 operator -= (const Vector3 & a)
{
x -= a.x ;
y -= a.y ;
z -= a.z ;
return *this ;
}
Vector3 operator *= (float a)
{
x *= a ;
y *= a ;
z *= a ;
return *this ;
}
Vector3 operator /= (float a)
{
float oneOverA = 1 / a ;
x *= oneOverA ;
y *= oneOverA ;
z *= oneOverA ;
return *this ;
}
void Normalize()
{
float magSq = x * x + y * y + z * z ;
if (magSq > 0)
{
float oneOverMsg = 1 / sqrt(magSq) ;
x *= oneOverMsg ;
y *= oneOverMsg ;
z *= oneOverMsg ;
}
}
float operator * (const Vector3 & a) const
{
return x * a.x + y * a.y + z * a.z ;
}
inline float VectorMag(const Vector3 & a)
{
return sqrt(a.x * a.x + a.y * a.y + a.z * a.z) ;
}
} ;
inline Vector3 CrossProduct(const Vector3 & a, const Vector3 & b)
{
return Vector3(a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x) ;
}
inline Vector3 operator * (float k, const Vector3 & v)
{
return Vector3(k * v.x, k * v.y, k * v.z) ;
}
inline float Distance(const Vector3 & a, const Vector3 & b)
{
float dx = a.x - b.x ;
float dy = a.y - b.y ;
float dz = a.z - b.z ;
return sqrt(dx * dx + dy * dy + dz * dz) ;
}
extern const Vector3 & ZeroVector ;