ESyS-Particle  2.3.4
Matrix3.h
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2017 by The University of Queensland //
4 // Centre for Geoscience Computing //
5 // http://earth.uq.edu.au/centre-geoscience-computing //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.apache.org/licenses/LICENSE-2.0 //
10 // //
12 
13 #ifndef __MATRIX3_H
14 #define __MATRIX3_H
15 
16 #define DO_INLINE_MATRIX3 1
17 
18 #if DO_INLINE_MATRIX3 >= 1
19 #define MATRIX3_INLINE inline
20 #else
21 #define MATRIX3_INLINE
22 #endif
23 
24 // --- IO includes ---
25 #include <iostream>
26 using std::ostream;
27 
30 {
31 public:
33  {
34  };
35 };
36 
37 
38 class Vec3 ;
47 class Matrix3
48 {
49 private:
50  double m[3][3];
51 
52 public:
54  MATRIX3_INLINE Matrix3(const Vec3&, const Vec3&,const Vec3&);
55  MATRIX3_INLINE Matrix3(const double[3][3]);
57  MATRIX3_INLINE virtual ~Matrix3();
58 
59  MATRIX3_INLINE double det();
60  Vec3 solve(const Vec3&) const;
61  Vec3 solve_homogeneous() const;
62  void invert();
64  MATRIX3_INLINE void transpose();
65  MATRIX3_INLINE Matrix3 trans() const;
66  MATRIX3_INLINE Vec3 operator *(const Vec3&) const;
67  MATRIX3_INLINE Matrix3 operator *(double) const;
68  MATRIX3_INLINE Matrix3 operator /(double) const;
73  MATRIX3_INLINE bool operator==(const Matrix3&)const;
75  MATRIX3_INLINE double trace() const;
76  MATRIX3_INLINE double norm() const;
77 
78  MATRIX3_INLINE double operator()(int i, int j) const {return m[i][j];}
79 
80  MATRIX3_INLINE double& operator()(int i, int j){return m[i][j];}
81 
82  MATRIX3_INLINE friend Matrix3 operator*(double,const Matrix3&);
83 
85  MATRIX3_INLINE friend Matrix3 star(const Vec3&);
86 
88  MATRIX3_INLINE static Matrix3 Unit();
89 
91  void eigen(Vec3&,Vec3&,Vec3&,double&,double&,double&);
92 
93  // output
94  MATRIX3_INLINE friend ostream& operator<<(ostream&,const Matrix3&);
95 };
96 
97 #if DO_INLINE_MATRIX3 >= 1
98 #include "Foundation/Matrix3.hpp"
99 #endif
100 
101 #endif //__MATRIX3_H
Matrix3.hpp
Matrix3::operator+
MATRIX3_INLINE Matrix3 operator+(const Matrix3 &) const
Definition: Matrix3.hpp:229
MatSingularError
exception class for Matrix3
Definition: Matrix3.h:30
Matrix3::operator<<
MATRIX3_INLINE friend ostream & operator<<(ostream &, const Matrix3 &)
Matrix3::operator==
MATRIX3_INLINE bool operator==(const Matrix3 &) const
Definition: Matrix3.hpp:181
Matrix3::invert
void invert()
in-situ inversion
Definition: Matrix3.cpp:48
cube_eq.h
CubicEquation
A class for a cubic equation. Used for eigenvalue calculation on 3D matrices.
Definition: cube_eq.h:31
Vec3::data
double data[3]
Definition: vec3.h:49
Matrix3::solve
Vec3 solve(const Vec3 &) const
Definition: Matrix3.cpp:27
Matrix3::Matrix3
MATRIX3_INLINE Matrix3()
Definition: Matrix3.hpp:20
Vec3::unit
VEC3_INLINE Vec3 unit() const
Definition: vec3.hpp:225
Matrix3::operator()
MATRIX3_INLINE double & operator()(int i, int j)
Definition: Matrix3.h:80
MatSingularError::MatSingularError
MATRIX3_INLINE MatSingularError()
Definition: Matrix3.h:32
Matrix3.h
Matrix3::star
MATRIX3_INLINE friend Matrix3 star(const Vec3 &)
generate unit matrix
Definition: Matrix3.hpp:282
Matrix3::trans
MATRIX3_INLINE Matrix3 trans() const
return transposed
Definition: Matrix3.hpp:108
Matrix3::m
double m[3][3]
Definition: Matrix3.h:50
Matrix3::operator/
MATRIX3_INLINE Matrix3 operator/(double) const
Definition: Matrix3.hpp:154
cross
VEC3_INLINE Vec3 cross(const Vec3 &lhs, const Vec3 &rhs)
Definition: vec3.hpp:187
Vec3::norm
VEC3_INLINE double norm() const
Definition: vec3.hpp:211
Matrix3::operator()
MATRIX3_INLINE double operator()(int i, int j) const
Definition: Matrix3.h:78
Matrix3::det
MATRIX3_INLINE double det()
Definition: Matrix3.hpp:76
Matrix3::trace
MATRIX3_INLINE double trace() const
Definition: Matrix3.hpp:261
Matrix3::Unit
static MATRIX3_INLINE Matrix3 Unit()
eigenvectors, eigenvalues
Definition: Matrix3.hpp:297
Matrix3::operator*
MATRIX3_INLINE Vec3 operator*(const Vec3 &) const
Definition: Matrix3.hpp:126
Matrix3::transpose
MATRIX3_INLINE void transpose()
transpose in situ
Definition: Matrix3.hpp:93
Matrix3::inv
MATRIX3_INLINE Matrix3 inv()
return inverse;
Definition: Matrix3.hpp:84
Matrix3::operator-
MATRIX3_INLINE Matrix3 operator-(const Matrix3 &) const
Definition: Matrix3.hpp:245
Matrix3::solve_homogeneous
Vec3 solve_homogeneous() const
Definition: Matrix3.cpp:76
Vec3
Definition: vec3.h:47
esys::lsm::bpu::iter
boost::python::object iter(const boost::python::object &pyOb)
Definition: Util.h:25
Matrix3
3x3 Matrix
Definition: Matrix3.h:48
Matrix3::~Matrix3
virtual MATRIX3_INLINE ~Matrix3()
Definition: Matrix3.hpp:69
Matrix3::operator=
MATRIX3_INLINE Matrix3 & operator=(const Matrix3 &)
Definition: Matrix3.hpp:171
Matrix3::operator+=
MATRIX3_INLINE Matrix3 & operator+=(const Matrix3 &)
Definition: Matrix3.hpp:216
Matrix3::norm
MATRIX3_INLINE double norm() const
Definition: Matrix3.hpp:269
MATRIX3_INLINE
#define MATRIX3_INLINE
Definition: Matrix3.h:19
CubicEquation::getRealRoots
set< double > getRealRoots(double)
Definition: cube_eq.cpp:41
Matrix3::eigen
void eigen(Vec3 &, Vec3 &, Vec3 &, double &, double &, double &)
Definition: Matrix3.cpp:186