Specialisation of MatrixN to aid 3 dimensional rotations. More...
#include <Matrix3.hh>
Public Member Functions | |
Matrix3 () | |
Matrix3 (const Matrix< 3 > &m3) | |
Matrix3 (const Vector3 &axis, const double angle) | |
Matrix3 (const Vector3 &from, const Vector3 &to) | |
Matrix3 & | setAsRotation (const Vector3 &from, const Vector3 &to) |
Matrix & | set (const size_t i, const size_t j, const double value) |
double | get (const size_t i, const size_t j) const |
Vector< N > | getRow (const size_t row) const |
Matrix< N > & | setRow (const size_t row, const Vector< N > &r) |
Vector< N > | getColumn (const size_t col) const |
Matrix< N > & | setColumn (const size_t col, const Vector< N > &c) |
Matrix< N > | transpose () const |
Matrix< N > | inverse () const |
Calculate inverse. | |
double | det () const |
Calculate determinant. | |
double | trace () const |
Calculate trace. | |
Matrix< N > | operator- () const |
Negate. | |
size_t | size () const |
Get dimensionality. | |
bool | isZero (double tolerance=1E-5) const |
Index-wise check for nullness, allowing for numerical precision. | |
bool | isEqual (Matrix< N > other) const |
Check for index-wise equality, allowing for numerical precision. | |
bool | isSymm () const |
Check for symmetry under transposition. | |
bool | isDiag () const |
Check that all off-diagonal elements are zero, allowing for numerical precision. | |
bool | operator== (const Matrix< N > &a) const |
bool | operator!= (const Matrix< N > &a) const |
bool | operator< (const Matrix< N > &a) const |
bool | operator<= (const Matrix< N > &a) const |
bool | operator> (const Matrix< N > &a) const |
bool | operator>= (const Matrix< N > &a) const |
Matrix< N > & | operator*= (const Matrix< N > &m) |
Matrix< N > & | operator*= (const double a) |
Matrix< N > & | operator/= (const double a) |
Matrix< N > & | operator+= (const Matrix< N > &m) |
Matrix< N > & | operator-= (const Matrix< N > &m) |
Static Public Member Functions | |
static Matrix3 | mkXRotation (const double angle) |
static Matrix3 | mkYRotation (const double angle) |
static Matrix3 | mkZRotation (const double angle) |
static Matrix< N > | mkZero () |
static Matrix< N > | mkDiag (Vector< N > diag) |
static Matrix< N > | mkIdentity () |
Protected Types | |
typedef Eigen::Matrix< double, N > | EMatrix |
Protected Attributes | |
EMatrix | _matrix |
Specialisation of MatrixN to aid 3 dimensional rotations.
Definition at line 13 of file Matrix3.hh.
typedef Eigen::Matrix<double,N> EMatrix [protected, inherited] |
Definition at line 254 of file MatrixN.hh.
Matrix3 | ( | ) | [inline] |
Definition at line 15 of file Matrix3.hh.
Referenced by Matrix3::mkXRotation(), Matrix3::mkYRotation(), and Matrix3::mkZRotation().
Definition at line 17 of file Matrix3.hh.
00017 : Matrix<3>::Matrix(m3) { }
Definition at line 19 of file Matrix3.hh.
References Matrix< 3 >::_matrix, Vector< N >::_vec, and Vector3::unit().
Definition at line 24 of file Matrix3.hh.
References Matrix3::setAsRotation().
00024 { 00025 setAsRotation(from, to); 00026 }
double det | ( | ) | const [inline, inherited] |
Calculate determinant.
Definition at line 142 of file MatrixN.hh.
00142 { 00143 return _matrix.determinant(); 00144 }
double get | ( | const size_t | i, | |
const size_t | j | |||
) | const [inline, inherited] |
Definition at line 84 of file MatrixN.hh.
00084 { 00085 if (i < N && j < N) { 00086 return _matrix(i, j); 00087 } else { 00088 throw std::runtime_error("Attempted get access outside matrix bounds."); 00089 } 00090 }
Vector<N> getColumn | ( | const size_t | col | ) | const [inline, inherited] |
Definition at line 107 of file MatrixN.hh.
Vector<N> getRow | ( | const size_t | row | ) | const [inline, inherited] |
Definition at line 92 of file MatrixN.hh.
00092 { 00093 Vector<N> rtn; 00094 for (size_t i = 0; i < N; ++i) { 00095 rtn.set(i, _matrix(row,i)); 00096 } 00097 return rtn; 00098 }
Matrix<N> inverse | ( | ) | const [inline, inherited] |
Calculate inverse.
Definition at line 135 of file MatrixN.hh.
00135 { 00136 Matrix<N> tmp; 00137 tmp._matrix = _matrix.inverse(); 00138 return tmp; 00139 }
bool isDiag | ( | ) | const [inline, inherited] |
Check that all off-diagonal elements are zero, allowing for numerical precision.
Definition at line 194 of file MatrixN.hh.
00194 { 00195 for (size_t i=0; i < N; ++i) { 00196 for (size_t j=0; j < N; ++j) { 00197 if (i == j) continue; 00198 if (! Rivet::isZero(_matrix(i,j)) ) return false; 00199 } 00200 } 00201 return true; 00202 }
bool isEqual | ( | Matrix< N > | other | ) | const [inline, inherited] |
Check for index-wise equality, allowing for numerical precision.
Definition at line 179 of file MatrixN.hh.
00179 { 00180 for (size_t i=0; i < N; ++i) { 00181 for (size_t j=i; j < N; ++j) { 00182 if (! Rivet::isZero(_matrix(i,j) - other._matrix(i,j)) ) return false; 00183 } 00184 } 00185 return true; 00186 }
bool isSymm | ( | ) | const [inline, inherited] |
Check for symmetry under transposition.
Definition at line 189 of file MatrixN.hh.
bool isZero | ( | double | tolerance = 1E-5 |
) | const [inline, inherited] |
Index-wise check for nullness, allowing for numerical precision.
Definition at line 169 of file MatrixN.hh.
00169 { 00170 for (size_t i=0; i < N; ++i) { 00171 for (size_t j=0; j < N; ++j) { 00172 if (! Rivet::isZero(_matrix(i,j), tolerance) ) return false; 00173 } 00174 } 00175 return true; 00176 }
Definition at line 48 of file MatrixN.hh.
static Matrix<N> mkIdentity | ( | ) | [inline, static, inherited] |
Definition at line 56 of file MatrixN.hh.
static Matrix3 mkXRotation | ( | const double | angle | ) | [inline, static] |
Definition at line 29 of file Matrix3.hh.
References Matrix3::Matrix3().
static Matrix3 mkYRotation | ( | const double | angle | ) | [inline, static] |
Definition at line 33 of file Matrix3.hh.
References Matrix3::Matrix3().
static Matrix<N> mkZero | ( | ) | [inline, static, inherited] |
Definition at line 43 of file MatrixN.hh.
static Matrix3 mkZRotation | ( | const double | angle | ) | [inline, static] |
Definition at line 37 of file Matrix3.hh.
References Matrix3::Matrix3().
bool operator!= | ( | const Matrix< N > & | a | ) | const [inline, inherited] |
Definition at line 208 of file MatrixN.hh.
00208 { 00209 return _matrix != a._matrix; 00210 }
Matrix<N>& operator*= | ( | const double | a | ) | [inline, inherited] |
Definition at line 233 of file MatrixN.hh.
00233 { 00234 _matrix *= a; 00235 return *this; 00236 }
Definition at line 228 of file MatrixN.hh.
Definition at line 243 of file MatrixN.hh.
Matrix<N> operator- | ( | ) | const [inline, inherited] |
Negate.
Definition at line 157 of file MatrixN.hh.
00157 { 00158 Matrix<N> rtn; 00159 rtn._matrix = -_matrix; 00160 return rtn; 00161 }
Definition at line 248 of file MatrixN.hh.
Matrix<N>& operator/= | ( | const double | a | ) | [inline, inherited] |
Definition at line 238 of file MatrixN.hh.
00238 { 00239 _matrix /= a; 00240 return *this; 00241 }
bool operator< | ( | const Matrix< N > & | a | ) | const [inline, inherited] |
Definition at line 212 of file MatrixN.hh.
00212 { 00213 return _matrix < a._matrix; 00214 }
bool operator<= | ( | const Matrix< N > & | a | ) | const [inline, inherited] |
Definition at line 216 of file MatrixN.hh.
00216 { 00217 return _matrix <= a._matrix; 00218 }
bool operator== | ( | const Matrix< N > & | a | ) | const [inline, inherited] |
Definition at line 204 of file MatrixN.hh.
00204 { 00205 return _matrix == a._matrix; 00206 }
bool operator> | ( | const Matrix< N > & | a | ) | const [inline, inherited] |
Definition at line 220 of file MatrixN.hh.
00220 { 00221 return _matrix > a._matrix; 00222 }
bool operator>= | ( | const Matrix< N > & | a | ) | const [inline, inherited] |
Definition at line 224 of file MatrixN.hh.
00224 { 00225 return _matrix >= a._matrix; 00226 }
Matrix& set | ( | const size_t | i, | |
const size_t | j, | |||
const double | value | |||
) | [inline, inherited] |
Definition at line 75 of file MatrixN.hh.
00075 { 00076 if (i < N && j < N) { 00077 _matrix(i, j) = value; 00078 } else { 00079 throw std::runtime_error("Attempted set access outside matrix bounds."); 00080 } 00081 return *this; 00082 }
Definition at line 42 of file Matrix3.hh.
References Matrix< 3 >::_matrix, Vector< N >::_vec, Rivet::angle(), Rivet::cross(), Rivet::isZero(), Rivet::theta(), and Vector3::unit().
Referenced by Matrix3::Matrix3().
Definition at line 116 of file MatrixN.hh.
00116 { 00117 for (size_t i = 0; i < N; ++i) { 00118 _matrix(i,col) = c.get(i); 00119 } 00120 return *this; 00121 }
Definition at line 100 of file MatrixN.hh.
00100 { 00101 for (size_t i = 0; i < N; ++i) { 00102 _matrix(row,i) = r.get(i); 00103 } 00104 return *this; 00105 }
size_t size | ( | ) | const [inline, inherited] |
double trace | ( | ) | const [inline, inherited] |
Calculate trace.
Definition at line 147 of file MatrixN.hh.
00147 { 00148 double tr = 0.0; 00149 for (size_t i = 0; i < N; ++i) { 00150 tr += _matrix(i,i); 00151 } 00152 return tr; 00153 // return _matrix.trace(); 00154 }
Matrix<N> transpose | ( | ) | const [inline, inherited] |
Definition at line 123 of file MatrixN.hh.
Definition at line 255 of file MatrixN.hh.
Referenced by Matrix3::Matrix3(), and Matrix3::setAsRotation().