Browse Source

Math: ability to explicitly create Quaternion for given vector.

pull/7/head
Vladimír Vondruš 13 years ago
parent
commit
730c09567d
  1. 7
      src/Math/Quaternion.h
  2. 6
      src/Math/Test/QuaternionTest.cpp

7
src/Math/Quaternion.h

@ -124,6 +124,13 @@ template<class T> class Quaternion {
/** @brief Create quaternion from vector and scalar */
inline constexpr /*implicit*/ Quaternion(const Vector3<T>& vector, T scalar): _vector(vector), _scalar(scalar) {}
/**
* @brief Create quaternion from vector
*
* Scalar is set to `0`.
*/
inline constexpr explicit Quaternion(const Vector3<T>& vector): _vector(vector), _scalar(T(0)) {}
/** @brief Equality comparison */
inline bool operator==(const Quaternion<T>& other) const {
return _vector == other._vector && MathTypeTraits<T>::equals(_scalar, other._scalar);

6
src/Math/Test/QuaternionTest.cpp

@ -28,6 +28,7 @@ class QuaternionTest: public Corrade::TestSuite::Tester {
void construct();
void constructDefault();
void constructFromVector();
void addSubtract();
void negated();
void multiplyDivideScalar();
@ -54,6 +55,7 @@ typedef Math::Vector3<float> Vector3;
QuaternionTest::QuaternionTest() {
addTests(&QuaternionTest::construct,
&QuaternionTest::constructDefault,
&QuaternionTest::constructFromVector,
&QuaternionTest::addSubtract,
&QuaternionTest::negated,
&QuaternionTest::multiplyDivideScalar,
@ -83,6 +85,10 @@ void QuaternionTest::constructDefault() {
CORRADE_COMPARE(Quaternion(), Quaternion({0.0f, 0.0f, 0.0f}, {1.0f}));
}
void QuaternionTest::constructFromVector() {
CORRADE_COMPARE(Quaternion({1.0f, 2.0f, 3.0f}), Quaternion({1.0f, 2.0f, 3.0f}, 0.0f));
}
void QuaternionTest::addSubtract() {
Quaternion a({1.0f, 3.0f, -2.0f}, -4.0f);
Quaternion b({-0.5f, 1.4f, 3.0f}, 12.0f);

Loading…
Cancel
Save