Making some functions in Vector use the new 'OperationType'.

This commit is contained in:
David Williams 2012-11-29 18:16:32 +01:00
parent b10b995a84
commit a026546bb4
3 changed files with 17 additions and 17 deletions

View File

@ -131,15 +131,15 @@ namespace PolyVox
void setW(StorageType tW); void setW(StorageType tW);
///Get the length of the vector. ///Get the length of the vector.
double length(void) const; float length(void) const;
///Get the squared length of the vector. ///Get the squared length of the vector.
double lengthSquared(void) const; OperationType lengthSquared(void) const;
///Find the angle between this vector and that which is passed as a parameter. ///Find the angle between this vector and that which is passed as a parameter.
double angleTo(const Vector<Size,StorageType,OperationType>& vector) const; float angleTo(const Vector<Size,StorageType,OperationType>& vector) const;
///Find the cross product between this vector and the vector passed as a parameter. ///Find the cross product between this vector and the vector passed as a parameter.
Vector<Size,StorageType,OperationType> cross(const Vector<Size,StorageType,OperationType>& vector) const; Vector<Size,StorageType,OperationType> cross(const Vector<Size,StorageType,OperationType>& vector) const;
///Find the dot product between this vector and the vector passed as a parameter. ///Find the dot product between this vector and the vector passed as a parameter.
StorageType dot(const Vector<Size,StorageType,OperationType>& rhs) const; OperationType dot(const Vector<Size,StorageType,OperationType>& rhs) const;
///Normalise the vector. ///Normalise the vector.
void normalise(void); void normalise(void);

View File

@ -573,23 +573,23 @@ namespace PolyVox
\return Length of the Vector. \return Length of the Vector.
*/ */
template <uint32_t Size, typename StorageType, typename OperationType> template <uint32_t Size, typename StorageType, typename OperationType>
inline double Vector<Size, StorageType, OperationType>::length(void) const inline float Vector<Size, StorageType, OperationType>::length(void) const
{ {
return sqrt(lengthSquared()); return sqrt(static_cast<float>(lengthSquared()));
} }
/** /**
\return Squared length of the Vector. \return Squared length of the Vector.
*/ */
template <uint32_t Size, typename StorageType, typename OperationType> template <uint32_t Size, typename StorageType, typename OperationType>
inline double Vector<Size, StorageType, OperationType>::lengthSquared(void) const inline OperationType Vector<Size, StorageType, OperationType>::lengthSquared(void) const
{ {
double result = 0.0f; OperationType tLengthSquared = static_cast<OperationType>(0);
for(uint32_t ct = 0; ct < Size; ++ct) for(uint32_t ct = 0; ct < Size; ++ct)
{ {
result += m_tElements[ct] * m_tElements[ct]; tLengthSquared += static_cast<OperationType>(m_tElements[ct]) * static_cast<OperationType>(m_tElements[ct]);
} }
return result; return tLengthSquared;
} }
/** /**
@ -602,9 +602,9 @@ namespace PolyVox
\return The angle between them in radians. \return The angle between them in radians.
*/ */
template <uint32_t Size, typename StorageType, typename OperationType> template <uint32_t Size, typename StorageType, typename OperationType>
inline double Vector<Size, StorageType, OperationType>::angleTo(const Vector<Size, StorageType, OperationType>& vector) const inline float Vector<Size, StorageType, OperationType>::angleTo(const Vector<Size, StorageType, OperationType>& vector) const
{ {
return acos(dot(vector) / (vector.length() * this->length())); return acos(static_cast<float>(dot(vector)) / (vector.length() * this->length()));
} }
/** /**
@ -636,12 +636,12 @@ namespace PolyVox
\see cross() \see cross()
*/ */
template <uint32_t Size, typename StorageType, typename OperationType> template <uint32_t Size, typename StorageType, typename OperationType>
inline StorageType Vector<Size, StorageType, OperationType>::dot(const Vector<Size, StorageType, OperationType>& rhs) const inline OperationType Vector<Size, StorageType, OperationType>::dot(const Vector<Size, StorageType, OperationType>& rhs) const
{ {
StorageType dotProduct = static_cast<StorageType>(0); OperationType dotProduct = static_cast<OperationType>(0);
for(uint32_t ct = 0; ct < Size; ++ct) for(uint32_t ct = 0; ct < Size; ++ct)
{ {
dotProduct += m_tElements[ct] * rhs.m_tElements[ct]; dotProduct += static_cast<OperationType>(m_tElements[ct]) * static_cast<OperationType>(rhs.m_tElements[ct]);
} }
return dotProduct; return dotProduct;
} }

View File

@ -32,7 +32,7 @@ using namespace PolyVox;
void TestVector::testLength() void TestVector::testLength()
{ {
Vector3DInt8 vec(3, 4, 5); Vector3DInt8 vec(3, 4, 5);
QCOMPARE(vec.lengthSquared(), double(3*3+4*4+5*5)); QCOMPARE(vec.lengthSquared(), int32_t(3*3+4*4+5*5)); // QCOMPARE is strict on types. For an int8 vector, the OperationType is int32_t.
} }
void TestVector::testDotProduct() void TestVector::testDotProduct()
@ -40,7 +40,7 @@ void TestVector::testDotProduct()
Vector3DInt8 vecxy(3, 4, 0); Vector3DInt8 vecxy(3, 4, 0);
Vector3DInt8 vecz(0, 0, 1); Vector3DInt8 vecz(0, 0, 1);
QCOMPARE(vecxy.dot(vecz), int8_t(0)); //QCOMPARE is very strict on the types matching QCOMPARE(vecxy.dot(vecz), int32_t(0)); // QCOMPARE is strict on types. For an int8 vector, the OperationType is int32_t .
} }
void TestVector::testEquality() void TestVector::testEquality()