Implement a bunch of the useful Vector operations
This commit is contained in:
parent
9b076f1533
commit
fa3708edfb
2 changed files with 65 additions and 0 deletions
|
@ -3,6 +3,8 @@
|
||||||
* Eryn Wells <eryn@erynwells.me>
|
* Eryn Wells <eryn@erynwells.me>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
#include "basics/vector.hh"
|
#include "basics/vector.hh"
|
||||||
|
|
||||||
|
|
||||||
|
@ -60,6 +62,50 @@ Vector4::Z()
|
||||||
return mData[2];
|
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 basics */
|
||||||
} /* namespace charles */
|
} /* namespace charles */
|
||||||
|
|
||||||
|
|
|
@ -28,8 +28,27 @@ struct Vector4
|
||||||
Double& X();
|
Double& X();
|
||||||
Double& Y();
|
Double& Y();
|
||||||
Double& Z();
|
Double& Z();
|
||||||
|
|
||||||
|
/** Get the length-squared of this vector. */
|
||||||
|
Double Length2() const;
|
||||||
|
|
||||||
|
/** Get the length of this vector. */
|
||||||
|
Double Length() const;
|
||||||
|
|
||||||
|
/** Get the dot product of `this` and `rhs`. */
|
||||||
|
Double Dot(const Vector4& rhs) const;
|
||||||
|
|
||||||
|
/** Get the cross product of `this` and `rhs`. */
|
||||||
|
Vector4 Cross(const Vector4& rhs) const;
|
||||||
|
|
||||||
|
/** Normalize this vector. */
|
||||||
|
Vector4& Normalize();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/** Normalize the given vector and return a copy of it. */
|
||||||
|
Vector4& Normalized(const Vector4& v);
|
||||||
|
|
||||||
} /* namespace basics */
|
} /* namespace basics */
|
||||||
} /* namespace charles */
|
} /* namespace charles */
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue