charles/src/basics/vector.cc

111 lines
1.5 KiB
C++

/* vector.cc
* vim: set tw=80:
* Eryn Wells <eryn@erynwells.me>
*/
#include <cmath>
#include "basics/vector.hh"
namespace charles {
namespace basics {
/*
* charles::basics::Vector4::Vector4 --
*/
Vector4::Vector4()
: Vector4(0, 0, 0)
{ }
/*
* charles::basics::Vector4::Vector4 --
*/
Vector4::Vector4(const Double& x,
const Double& y,
const Double& z)
{
mData[0] = x;
mData[1] = y;
mData[2] = z;
mData[3] = 1.0;
}
/*
* charles::basics::Vector4::X --
*/
Double&
Vector4::X()
{
return mData[0];
}
/*
* charles::basics::Vector4::Y --
*/
Double&
Vector4::Y()
{
return mData[1];
}
/*
* charles::basics::Vector4::Z --
*/
Double&
Vector4::Z()
{
return mData[2];
}
/*
* charles::basics::Vector4::length2 --
*/
Double
Vector4::Length2()
const
{
return mData[0] * mData[0] + mData[1] * mData[1] + mData[2] * mData[2];
}
Double
Vector4::Length()
const
{
return std::sqrt(Length2());
}
Double
Vector4::Dot(const Vector4& rhs)
const
{
return mData[0] * rhs.mData[0] + mData[1] * rhs.mData[1] + mData[2] + rhs.mData[2];
}
Vector4
Vector4::Cross(const Vector4& rhs)
const
{
return Vector4(mData[1]*rhs.mData[2] - mData[2]*rhs.mData[1],
mData[2]*rhs.mData[0] - mData[0]*rhs.mData[2],
mData[0]*rhs.mData[1] - mData[1]*rhs.mData[0]);
}
Vector4&
Vector4::Normalize()
{
return *this /= Length();
}
} /* namespace basics */
} /* namespace charles */