26 #ifndef WFMATH_ROTMATRIX_H
27 #define WFMATH_ROTMATRIX_H
29 #include <wfmath/const.h>
37 RotMatrix<dim>
Prod(
const RotMatrix<dim>& m1,
const RotMatrix<dim>& m2);
40 RotMatrix<dim>
ProdInv(
const RotMatrix<dim>& m1,
const RotMatrix<dim>& m2);
43 RotMatrix<dim>
InvProd(
const RotMatrix<dim>& m1,
const RotMatrix<dim>& m2);
46 RotMatrix<dim>
InvProdInv(
const RotMatrix<dim>& m1,
const RotMatrix<dim>& m2);
49 Vector<dim>
Prod(
const RotMatrix<dim>& m,
const Vector<dim>& v);
51 Vector<dim>
InvProd(
const RotMatrix<dim>& m,
const Vector<dim>& v);
53 Vector<dim>
Prod(
const Vector<dim>& v,
const RotMatrix<dim>& m);
55 Vector<dim>
ProdInv(
const Vector<dim>& v,
const RotMatrix<dim>& m);
59 RotMatrix<dim>
operator*(
const RotMatrix<dim>& m1,
const RotMatrix<dim>& m2);
61 Vector<dim>
operator*(
const RotMatrix<dim>& m,
const Vector<dim>& v);
63 Vector<dim>
operator*(
const Vector<dim>& v,
const RotMatrix<dim>& m);
66 std::ostream& operator<<(std::ostream& os, const RotMatrix<dim>& m);
68 std::istream& operator>>(std::istream& is, RotMatrix<dim>& m);
90 RotMatrix() : m_flip(
false), m_valid(
false), m_age(0) {}
94 friend std::ostream& operator<< <dim>(std::ostream& os,
const RotMatrix& m);
95 friend std::istream&
operator>> <dim>(std::istream& is,
RotMatrix& m);
101 bool isEqualTo(
const RotMatrix& m,
CoordType epsilon = numeric_constants<CoordType>::epsilon())
const;
103 bool operator==(
const RotMatrix& m)
const {
return isEqualTo(m);}
104 bool operator!=(
const RotMatrix& m)
const {
return !isEqualTo(m);}
106 bool isValid()
const {
return m_valid;}
201 unsigned age()
const {
return m_age;}
258 bool _setVals(
CoordType *vals,
CoordType precision = numeric_constants<CoordType>::epsilon());
259 void checkNormalization() {
if(m_age >= WFMATH_MAX_NORM_AGE && m_valid)
normalize();}
281 #endif // WFMATH_ROTMATRIX_H