OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimMatrix3x3.cpp
Go to the documentation of this file.
1 //*******************************************************************
2 //
3 // License: See top level LICENSE.txt file.
4 //
5 // Author: Garrett Potts (gpotts@imagelinks.com)
6 //
7 // Description:
8 //
9 //*******************************************************************
10 // $Id: ossimMatrix3x3.cpp 9963 2006-11-28 21:11:01Z gpotts $
11 
13 #include <ossim/matrix/newmatap.h>
16 
17 NEWMAT::Matrix ossimMatrix3x3::create()
18 {
19  NEWMAT::Matrix m(3, 3);
20 
21  m[0][0] = 1.0;
22  m[0][1] = 0.0;
23  m[0][2] = 0.0;
24 
25  m[1][0] = 0.0;
26  m[1][1] = 1.0;
27  m[1][2] = 0.0;
28 
29  m[2][0] = 0.0;
30  m[2][1] = 0.0;
31  m[2][2] = 1.0;
32 
33  return m;
34 }
35 
36 NEWMAT::Matrix ossimMatrix3x3::create(double v00, double v01, double v02,
37  double v10, double v11, double v12,
38  double v20, double v21, double v22)
39 {
40  NEWMAT::Matrix m(3, 3);
41 
42  m[0][0] = v00;
43  m[0][1] = v01;
44  m[0][2] = v02;
45 
46  m[1][0] = v10;
47  m[1][1] = v11;
48  m[1][2] = v12;
49 
50  m[2][0] = v20;
51  m[2][1] = v21;
52  m[2][2] = v22;
53 
54  return m;
55 }
56 
57 NEWMAT::Matrix ossimMatrix3x3::create(const NEWMAT::Matrix& rhs)
58 {
59  NEWMAT::Matrix m(3, 3);
60 
61  if (rhs.Ncols() != 3 || rhs.Nrows() != 3)
62  {
63  ossimNotify(ossimNotifyLevel_FATAL) << "ossimMatrix3x3::create(const NEWMAT::Matrix& rhs) ERROR:"
64  << "\nMatrix passed to function not a 3x3!"
65  << "\nnumber of columns: " << rhs.Ncols()
66  << "\nnumber of rows: " << rhs.Nrows()
67  << "\nReturn blank 3x3 matrix...\n";
68  return m;
69  }
70 
71  m[0][0] = rhs[0][0];
72  m[0][1] = rhs[0][1];
73  m[0][2] = rhs[0][2];
74  m[0][3] = rhs[0][3];
75  m[1][0] = rhs[1][0];
76  m[1][1] = rhs[1][1];
77  m[1][2] = rhs[1][2];
78  m[1][3] = rhs[1][3];
79  m[2][0] = rhs[2][0];
80  m[2][1] = rhs[2][1];
81  m[2][2] = rhs[2][2];
82  m[2][3] = rhs[2][3];
83 
84  return m;
85 }
86 
88 {
89  if (matrix.Ncols() != 3 || matrix.Nrows() != 3)
90  {
91  ossimNotify(ossimNotifyLevel_FATAL) << "FATAL: ossimColumnVector3d operator*(const NEWMAT::Matrix& lhs,"
92  << "\nconst ossimColumnVector3d& rhs), "
93  << "\nMatrix passed to function not a 3x3!"
94  << "\nnumber of columns: " << matrix.Ncols()
95  << "\nnumber of rows: " << matrix.Nrows()
96  << "\nReturn blank ossimColumnVector3d...\n";
97  return ossimColumnVector3d();
98  }
99 
100  NEWMAT::DiagonalMatrix d;
101  NEWMAT::SymmetricMatrix s;
102 
103  s << matrix;
104 
105  NEWMAT::EigenValues(s, d);
106 
107  return ossimColumnVector3d(d[0], d[1], d[2]);
108 }
109 
111 {
112  NEWMAT::Matrix m(3,3);
113 
114  m[0][0] = 1.0;
115  m[0][1] = 0.0;
116  m[0][2] = 0.0;
117 
118  m[1][0] = 0.0;
119  m[1][1] = 1.0;
120  m[1][2] = 0.0;
121 
122  m[2][0] = 0.0;
123  m[2][1] = 0.0;
124  m[2][2] = 1.0;
125 
126  return m;
127 }
128 
130 {
131  NEWMAT::Matrix m(3,3);
132 
133  m = 0.0;
134 
135  return m;
136 }
137 
138 NEWMAT::Matrix ossimMatrix3x3::createTranslationMatrix(double dx,double dy)
139 {
140  NEWMAT::Matrix m(3,3);
141 
142  m[0][0] = 1.0;
143  m[0][1] = 0.0;
144  m[0][2] = dx;
145 
146  m[1][0] = 0.0;
147  m[1][1] = 1.0;
148  m[1][2] = dy;
149 
150  m[2][0] = 0.0;
151  m[2][1] = 0.0;
152  m[2][2] = 1.0;
153 
154  return m;
155 }
156 
157 NEWMAT::Matrix ossimMatrix3x3::createRotationMatrix(double angleX,
158  double angleY,
159  double angleZ,
160  ossimCoordSysOrientMode orientationMode)
161 {
162  return (createRotationZMatrix(angleZ, orientationMode)*
163  createRotationYMatrix(angleY, orientationMode)*
164  createRotationXMatrix(angleX, orientationMode));
165 }
166 
167 NEWMAT::Matrix ossimMatrix3x3::createRotationXMatrix(double angle,
168  ossimCoordSysOrientMode orientationMode)
169 {
170  NEWMAT::Matrix m(3,3);
171  double Cosine = cos(angle*RAD_PER_DEG);
172  double Sine = sin(angle*RAD_PER_DEG);
173 
174  if(orientationMode == OSSIM_RIGHT_HANDED)
175  {
176  m << 1 << 0 << 0
177  << 0 << Cosine << Sine
178  << 0 << -Sine << Cosine;
179  }
180  else
181  {
182  m << 1 << 0 << 0
183  << 0 << Cosine << -Sine
184  << 0 << Sine << Cosine;
185  }
186  return m;
187 }
188 
189 NEWMAT::Matrix ossimMatrix3x3::createRotationYMatrix(double angle,
190  ossimCoordSysOrientMode orientationMode)
191 {
192  NEWMAT::Matrix m(3,3);
193  double Cosine = cos(angle*RAD_PER_DEG);
194  double Sine = sin(angle*RAD_PER_DEG);
195 
196  if(orientationMode == OSSIM_RIGHT_HANDED)
197  {
198  m[0][0] = Cosine;
199  m[0][1] = 0.0;
200  m[0][2] = -Sine;
201 
202  m[1][0] = 0.0;
203  m[1][1] = 1.0;
204  m[1][2] = 0.0;
205 
206  m[2][0] = Sine;
207  m[2][1] = 0.0;
208  m[2][2] = Cosine;
209  }
210  else
211  {
212  m[0][0] = Cosine;
213  m[0][1] = 0.0;
214  m[0][2] = Sine;
215 
216  m[1][0] = 0.0;
217  m[1][1] = 1.0;
218  m[1][2] = 0.0;
219 
220  m[2][0] = -Sine;
221  m[2][1] = 0.0;
222  m[2][2] = Cosine;
223  }
224  return m;
225 }
226 
227 
228 NEWMAT::Matrix ossimMatrix3x3::createRotationZMatrix(double angle,
229  ossimCoordSysOrientMode orientationMode)
230 {
231  NEWMAT::Matrix m(3,3);
232  double Cosine = cos(angle*RAD_PER_DEG);
233  double Sine = sin(angle*RAD_PER_DEG);
234 
235  if(orientationMode == OSSIM_RIGHT_HANDED)
236  {
237  m[0][0] = Cosine;
238  m[0][1] = Sine;
239  m[0][2] = 0.0;
240 
241  m[1][0] = -Sine;
242  m[1][1] = Cosine;
243  m[1][2] = 0.0;
244 
245  m[2][0] = 0.0;
246  m[2][1] = 0.0;
247  m[2][2] = 1.0;
248  }
249  else
250  {
251  m[0][0] = Cosine;
252  m[0][1] = -Sine;
253  m[0][2] = 0.0;
254 
255  m[1][0] = Sine;
256  m[1][1] = Cosine;
257  m[1][2] = 0.0;
258 
259  m[2][0] = 0.0;
260  m[2][1] = 0.0;
261  m[2][2] = 1.0;
262  }
263  return m;
264 }
265 
266 NEWMAT::Matrix ossimMatrix3x3::createScaleMatrix(double x, double y, double z)
267 {
268  NEWMAT::Matrix m = createIdentity();
269 
270  m[0][0] = x;
271  m[1][1] = y;
272  m[2][2] = z;
273 
274  return m;
275 }
276 
278 {
279 }
280 
281 const ossimMatrix3x3& ossimMatrix3x3::operator=(const ossimMatrix3x3& rhs){ return rhs; }
282 
void EigenValues(const SymmetricMatrix &, DiagonalMatrix &)
Definition: evalue.cpp:286
ossim_uint32 x
static NEWMAT::Matrix createRotationXMatrix(double angle, ossimCoordSysOrientMode orientationMode=OSSIM_RIGHT_HANDED)
static NEWMAT::Matrix createZero()
ossim_uint32 y
static NEWMAT::Matrix createRotationYMatrix(double angle, ossimCoordSysOrientMode orientationMode=OSSIM_RIGHT_HANDED)
ossimColumnVector3d getEigenValues(const NEWMAT::Matrix &rhs)
ossimCoordSysOrientMode
static NEWMAT::Matrix create()
static NEWMAT::Matrix createTranslationMatrix(double dx, double dy)
const ossimMatrix3x3 & operator=(const ossimMatrix3x3 &rhs)
static NEWMAT::Matrix createRotationZMatrix(double angle, ossimCoordSysOrientMode orientationMode=OSSIM_RIGHT_HANDED)
static NEWMAT::Matrix createIdentity()
static NEWMAT::Matrix createScaleMatrix(double X, double Y, double Z)
#define RAD_PER_DEG
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
static NEWMAT::Matrix createRotationMatrix(double angleX, double angleY, double angleZ, ossimCoordSysOrientMode orientationMode=OSSIM_RIGHT_HANDED)