glm/glm/gtx/statistics_operation.inl
2010-04-14 13:23:59 +01:00

82 lines
2.4 KiB
C++

///////////////////////////////////////////////////////////////////////////////////////////////////
// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
///////////////////////////////////////////////////////////////////////////////////////////////////
// Created : 2007-11-21
// Updated : 2007-11-21
// Licence : This source is under MIT License
// File : glm/gtx/statistics_operator.inl
///////////////////////////////////////////////////////////////////////////////////////////////////
// Dependency:
// - GLM core
///////////////////////////////////////////////////////////////////////////////////////////////////
#include <cassert>
namespace glm
{
//! Compute the sum of square of differences between each matrices paremeters
template <typename T>
inline T statDistanceGTX(const detail::tmat2x2<T>& m1, const detail::tmat2x2<T>& m2)
{
T result = T(0);
for(int j = 0; j < 2; ++j)
for(int i = 0; i < 2; ++i)
{
T diff = m1[j][i] - m2[j][i];
result += diff * diff;
}
return result;
}
template <typename T>
inline T statDistanceGTX(const detail::tmat3x3<T>& m1, const detail::tmat3x3<T>& m2)
{
T result = T(0);
for(int j = 0; j < 3; ++j)
for(int i = 0; i < 3; ++i)
{
T diff = m1[j][i] - m2[j][i];
result += diff * diff;
}
return result;
}
template <typename T>
inline T statDistanceGTX(const detail::tmat4x4<T>& m1, const detail::tmat4x4<T>& m2)
{
T result = T(0);
for(int j = 0; j < 4; ++j)
for(int i = 0; i < 4; ++i)
{
T diff = m1[j][i] - m2[j][i];
result += diff * diff;
}
return result;
}
template <typename T>
T expectedValueGTX(const detail::tmat4x4<T>& m)
{
T result = T(0);
for(int j = 0; j < 4; ++j)
for(int i = 0; i < 4; ++i)
result += m[j][i];
result *= T(0,0625);
return result;
}
template <typename T>
T varianceGTX(const detail::tmat4x4<T>& m)
{
T ExpectedValue = expectedValueGTX(m);
T ExpectedValueOfSquaredMatrix = expectedValueGTX(matrixCompMult(m));
return ExpectedValueOfSquaredMatrix - ExpectedValue * ExpectedValue;
}
template <typename T>
T standardDevitionGTX(const detail::tmat4x4<T>& m)
{
return sqrt(varianceGTX(m));
}
}