charles/src/basics/vector.cc

112 lines
1.5 KiB
C++
Raw Normal View History

2014-08-08 21:12:37 -07:00
/* vector.cc
* vim: set tw=80:
* Eryn Wells <eryn@erynwells.me>
*/
#include <cmath>
2014-08-08 21:12:37 -07:00
#include "basics/vector.hh"
namespace charles {
namespace basics {
/*
* charles::basics::Vector4::Vector4 --
*/
2014-08-08 21:12:37 -07:00
Vector4::Vector4()
: Vector4(0, 0, 0)
{ }
2014-08-08 21:12:37 -07:00
/*
* 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;
2014-08-08 21:12:37 -07:00
}
/*
* 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();
}
2014-08-08 21:12:37 -07:00
} /* namespace basics */
} /* namespace charles */