CONFIG LIB  1.5
Configuration Files Library (by TGG 2020)
matr3d.cpp
1 /*********************************************************************/
2 /* */
3 /* Config files library - (C) TGG 2019 */
4 /* */
5 /*********************************************************************/
6 /* Warszawa, 2019 */
7 /*********************************************************************/
8 /* */
9 /* File: matr3d.cpp */
10 /* */
11 /* Author: F.A.Dul, modif. by T.Grabowski */
12 /* */
13 /* Contents - matrix 3x3 class */
14 /* */
15 /* */
16 /*********************************************************************/
17 /* */
18 /* */
19 
20 #include "matr3d.h"
21 
22 // Matrix 3x3 and Vector 3D operators
23 
24 
25 VECTOR_3D operator *( const MATRIX_3x3 &A , const VECTOR_3D &b )
26 {
27  VECTOR_3D w;
28 
29  w.x = A.xx * b.x + A.xy * b.y + A.xz * b.z;
30  w.y = A.yx * b.x + A.yy * b.y + A.yz * b.z;
31  w.z = A.zx * b.x + A.zy * b.y + A.zz * b.z;
32 
33  return w;
34 }
35 
36 
37 VECTOR_3D operator *( const VECTOR_3D &b , const MATRIX_3x3 &A )
38 {
39  VECTOR_3D w;
40 
41  w.x = b.x * A.xx + b.y * A.yx + b.z * A.zx;
42  w.y = b.x * A.xy + b.y * A.yy + b.z * A.zy;
43  w.z = b.x * A.xz + b.y * A.yz + b.z * A.zz;
44 
45  return w;
46 }
47 
48 
50 {
51  MATRIX_3x3 C;
52 
53  C.xx = A.xx * B.xx; C.xy = A.xy * B.xy; C.xz = A.xz * B.xz;
54  C.yx = A.yx * B.yx; C.yy = A.yy * B.yy; C.yz = A.yz * B.yz;
55  C.zx = A.zx * B.zx; C.zy = A.zy * B.zy; C.zz = A.zz * B.zz;
56 
57  return C;
58 }
59 
60 
62 {
63  MATRIX_3x3 C;
64 
65  C.xx = A.xx + B.xx; C.xy = A.xy + B.xy; C.xz = A.xz + B.xz;
66  C.yx = A.yx + B.yx; C.yy = A.yy + B.yy; C.yz = A.yz + B.yz;
67  C.zx = A.zx + B.zx; C.zy = A.zy + B.zy; C.zz = A.zz + B.zz;
68 
69  return C;
70 }
71 
72 
74 {
75  MATRIX_3x3 C;
76 
77  C.xx = A.xx - B.xx; C.xy = A.xy - B.xy; C.xz = A.xz - B.xz;
78  C.yx = A.yx - B.yx; C.yy = A.yy - B.yy; C.yz = A.yz - B.yz;
79  C.zx = A.zx - B.zx; C.zy = A.zy - B.zy; C.zz = A.zz - B.zz;
80 
81  return C;
82 }
83 
84 
86 {
87  MATRIX_3x3 C;
88 
89  C.xx = -A.xx; C.xy = -A.xy; C.xz = -A.xz;
90  C.yx = -A.yx; C.yy = -A.yy; C.yz = -A.yz;
91  C.zx = -A.zx; C.zy = -A.zy; C.zz = -A.zz;
92 
93  return C;
94 }
95 
96 
97 
98 MATRIX_3x3 operator *( const MATRIX_3x3 &A , const double &s )
99 {
100  MATRIX_3x3 C;
101 
102  C.xx = A.xx * s; C.xy = A.xy * s; C.xz = A.xz * s;
103  C.yx = A.yx * s; C.yy = A.yy * s; C.yz = A.yz * s;
104  C.zx = A.zx * s; C.zy = A.zy * s; C.zz = A.zz * s;
105 
106  return C;
107 }
108 
109 
110 MATRIX_3x3 operator *( const double &s , const MATRIX_3x3 &A )
111 {
112  MATRIX_3x3 C;
113 
114  C.xx = A.xx * s; C.xy = A.xy * s; C.xz = A.xz * s;
115  C.yx = A.yx * s; C.yy = A.yy * s; C.yz = A.yz * s;
116  C.zx = A.zx * s; C.zy = A.zy * s; C.zz = A.zz * s;
117 
118  return C;
119 }
120 
121 
122 MATRIX_3x3 operator /( const MATRIX_3x3 &A , const double &s )
123 {
124  MATRIX_3x3 C;
125 
126  C.xx = A.xx / s; C.xy = A.xy / s; C.xz = A.xz / s;
127  C.yx = A.yx / s; C.yy = A.yy / s; C.yz = A.yz / s;
128  C.zx = A.zx / s; C.zy = A.zy / s; C.zz = A.zz / s;
129 
130  return C;
131 }
132 
133 void operator /=( MATRIX_3x3 &A , const double &s )
134 {
135  A.xx /= s; A.xy /= s; A.xz /= s;
136  A.yx /= s; A.yy /= s; A.yz /= s;
137  A.zx /= s; A.zy /= s; A.zz /= s;
138 }
139 
140 MATRIX_3x3 operator !( const MATRIX_3x3 &A ) // A^T
141 {
142  return MATRIX_3x3 (
143  A.xx , A.yx , A.zx ,
144  A.xy , A.yy , A.zy ,
145  A.xz , A.yz , A.zz
146  );
147 }
148 
149 
151 {
152  MATRIX_3x3 C;
153 
154  C.xx = A.xx * B.xx + A.xy * B.yx + A.xz * B.zx;
155  C.yx = A.yx * B.xx + A.yy * B.yx + A.yz * B.zx;
156  C.zx = A.zx * B.xx + A.zy * B.yx + A.zz * B.zx;
157 
158  C.xy = A.xx * B.xy + A.xy * B.yy + A.xz * B.zy;
159  C.yy = A.yx * B.xy + A.yy * B.yy + A.yz * B.zy;
160  C.zy = A.zx * B.xy + A.zy * B.yy + A.zz * B.zy;
161 
162  C.xz = A.xx * B.xz + A.xy * B.yz + A.xz * B.zz;
163  C.yz = A.yx * B.xz + A.yy * B.yz + A.yz * B.zz;
164  C.zz = A.zx * B.xz + A.zy * B.yz + A.zz * B.zz;
165 
166  return C;
167 }
168 
169 MATRIX_3x3 operator ~( const MATRIX_3x3 &A ) // A^(-1)
170 {
171 // C = A^(-1)
172 
173  MATRIX_3x3 C = A;
174  double w = C.Det();
175  C.SetToZero();
176 
177  C.xx = A.yy * A.zz - A.zy * A.yz;
178  C.xy = A.xz * A.zy - A.xy * A.zz;
179  C.xz = A.xy * A.yz - A.xz * A.yy;
180 
181  C.yx = A.yz * A.zx - A.yx * A.zz;
182  C.yy = A.xx * A.zz - A.xz * A.zx;
183  C.yz = A.xz * A.yx - A.xx * A.yz;
184 
185  C.zx = A.yx * A.zy - A.yy * A.zx;
186  C.zy = A.xy * A.zx - A.xx * A.zy;
187  C.zz = A.xx * A.yy - A.xy * A.yx;
188 
189  if( w != 0.0 ) C /= w;
190 
191  return C;
192 }
193 
195 {
196  return b * ~B;
197 }
198 
199 
200 
operator-
MATRIX_3x3 operator-(const MATRIX_3x3 &A, const MATRIX_3x3 &B)
Arithmetic operator - subtraction of 2 matrices (sum of A and -B)
Definition: matr3d.cpp:73
matr3d.h
MATRIX_3x3 class and functions.
VECTOR_3D::z
double z
z coordinate
Definition: vector3d.h:38
MATRIX_3x3::SetToZero
void SetToZero(void)
reset matrix - set all components to zero
Definition: matr3d.h:100
MATRIX_3x3::xy
double xy
(0,1) element
Definition: matr3d.h:45
operator&
MATRIX_3x3 operator&(const MATRIX_3x3 &A, const MATRIX_3x3 &B)
Arithmetic operator - multiplication of 2 matrices components ( AxxBxx, AxyBxy, .....
Definition: matr3d.cpp:49
VECTOR_3D::x
double x
x coordinate
Definition: vector3d.h:38
VECTOR_3D
Vector 3D class - vector manipulation.
Definition: vector3d.h:34
operator+
MATRIX_3x3 operator+(const MATRIX_3x3 &A, const MATRIX_3x3 &B)
Arithmetic operator - sum of 2 matrices.
Definition: matr3d.cpp:61
operator/=
void operator/=(MATRIX_3x3 &A, const double &s)
Arithmetic operator - division assignment.
Definition: matr3d.cpp:133
MATRIX_3x3::zz
double zz
(2,2) element
Definition: matr3d.h:52
MATRIX_3x3::zx
double zx
(2,0) element
Definition: matr3d.h:50
MATRIX_3x3::yz
double yz
(1,2) element
Definition: matr3d.h:49
MATRIX_3x3::Det
double Det(void)
matrix determinant
Definition: matr3d.h:114
operator~
MATRIX_3x3 operator~(const MATRIX_3x3 &A)
Arithmetic operator - matrix inversion ( A^(-1) )
Definition: matr3d.cpp:169
MATRIX_3x3
MATRIX_3x3 class and functions.
Definition: matr3d.h:41
MATRIX_3x3::zy
double zy
(2,1) element
Definition: matr3d.h:51
operator/
MATRIX_3x3 operator/(const MATRIX_3x3 &A, const double &s)
Arithmetic operator - division of matrix by scalar (product of matrix and 1/s)
Definition: matr3d.cpp:122
operator!
MATRIX_3x3 operator!(const MATRIX_3x3 &A)
Arithmetic operator - matrix transposition ( A^T )
Definition: matr3d.cpp:140
MATRIX_3x3::xz
double xz
(0,2) element
Definition: matr3d.h:46
MATRIX_3x3::yy
double yy
(1,1) element
Definition: matr3d.h:48
MATRIX_3x3::xx
double xx
(0,0) element
Definition: matr3d.h:44
operator*
MATRIX_3x3 operator*(const MATRIX_3x3 &A, const MATRIX_3x3 &B)
Arithmetic operator - multiplication of 2 matrices.
Definition: matr3d.cpp:150
MATRIX_3x3::yx
double yx
(1,0) element
Definition: matr3d.h:47
VECTOR_3D::y
double y
y coordinate
Definition: vector3d.h:38