OSDN Git Service

c069076bc356fb310ae8a4c2dd3ad3df8af901b3
[moflib/moflib.git] / moflib-1.0 / moflib / moflib / mof / Matrix2D.hpp
1 #ifndef MATRIX2D_HPP
2 #define MATRIX2D_HPP
3 #include <mof/real.hpp>
4 #include "mof/Vector2D.hpp"
5 #include "mof/Rectangle.hpp"
6 #include <memory>
7
8
9 namespace mof{
10         class Matrix2D{
11         public:
12                 struct Array{
13                         real elements[3][3];
14                 };
15         private:
16                 std::shared_ptr<Array> m_pImpl;
17         public:
18                 
19                 Matrix2D();
20                 Matrix2D(const Matrix2D& );
21                 explicit Matrix2D(const mof::Matrix2D::Array &);
22                 ~Matrix2D();
23                 real at(int row , int column) const;
24                 Array getArray() const;
25
26                 static Matrix2D createIdentity();
27                 static Matrix2D createTransposed(Matrix2D& matrix);
28                 static Matrix2D createRotation(const mof::Vector2D& angle);
29                 static Matrix2D createTranslation(const mof::Vector2D& position);
30                 static Matrix2D createScaling(const mof::Vector2D& scale);
31                 static Vector2D getTranslation(const mof::Matrix2D& matrix);
32                 Vector2D getDiagonal() const;
33
34
35                 Matrix2D operator *(const mof::Matrix2D& matrix ) const;
36                 Matrix2D operator +(const mof::Matrix2D& matrix ) const;
37                 Matrix2D operator -(const mof::Matrix2D& matrix ) const;
38
39                 friend Vector2D operator *(const mof::Vector2D& vec , const mof::Matrix2D& matrix);
40                 friend Matrix2D operator *(const mof::Matrix2D& matrix , real f);
41                 friend Matrix2D operator *(real f ,  const mof::Matrix2D & matrix);
42
43                 mof::Rectangle<int> toBoundingBox();
44         
45                 
46         };
47 } // namespace mof
48
49
50 #endif