OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimColumnVector4d.h
Go to the documentation of this file.
1 //*******************************************************************
2 //
3 // License: See top level LICENSE.txt file.
4 //
5 // Author: Garrett Potts
6 //
7 // Description: This is your 3-D vector where the 4-th dimension is
8 // for the homogenious coordinate.
9 //
10 //*******************************************************************
11 // $Id: ossimColumnVector4d.h 11346 2007-07-23 12:59:48Z gpotts $
12 #ifndef ossimColumnVector4d_HEADER
13 #define ossimColumnVector4d_HEADER
15 #include <ossim/base/ossimCommon.h>
16 #include <float.h> // for FLT_EPSILON
17 #include <iomanip>
18 #include <iostream>
19 #include <cmath>
20 using namespace std;
21 
23 {
24 public:
26  {
27  data[0]=0;
28  data[1]=0;
29  data[2]=0;
30  data[3]=1;
31  }
32 
33  ossimColumnVector4d(double x, double y, double z, double w=1.0)
34  {
35  data[0]=x;
36  data[1]=y;
37  data[2]=z;
38  data[3]=w;
39  }
40 
42  {
43  data[0] = rhs.data[0];
44  data[1] = rhs.data[1];
45  data[2] = rhs.data[2];
46  data[3] = rhs.data[3];
47  }
49  {
50  return out << setiosflags(ios::fixed) << setprecision(15)
51  << v[0] << " " << v[1] <<" "
52  << v[2] << " " << v[3];
53  }
54 
55  friend ossimColumnVector4d operator*(double scalar, const ossimColumnVector4d &v)
56  {
57  return ossimColumnVector4d(v.data[0]*scalar,
58  v.data[1]*scalar,
59  v.data[2]*scalar);
60  }
61 
62  double& operator [](int index)
63  {
64  return data[index];
65  }
66 
67  const double& operator [](int index)const
68  {
69  return data[index];
70  }
71 
72  ossimColumnVector4d operator*(double scalar)const
73  {
74  return ossimColumnVector4d(data[0]*scalar,
75  data[1]*scalar,
76  data[2]*scalar);
77  }
78 
80  {
81  return ossimColumnVector4d( data[0]+rhs[0],
82  data[1]+rhs[1],
83  data[2]+rhs[2]);
84  }
85 
86  ossimColumnVector4d operator +=(const ossimColumnVector4d &rhs)
87  {
88  data[0] += rhs[0];
89  data[1] += rhs[1];
90  data[2] += rhs[2];
91 
92  return *this;
93  }
94 
96  {
97  return ossimColumnVector4d(-data[0],
98  -data[1],
99  -data[2]);
100  }
101 
102  ossimColumnVector4d operator /(double scalar)const
103  {
104  return ossimColumnVector4d( data[0]/scalar,
105  data[1]/scalar,
106  data[2]/scalar);
107  }
108 
109  ossimColumnVector4d& operator /=(double scalar)
110  {
111  data[0]/=scalar;
112  data[1]/=scalar;
113  data[2]/=scalar;
114 
115  return *this;
116  }
117 
119  {
120  return ossimColumnVector4d( data[0]-rhs[0],
121  data[1]-rhs[1],
122  data[2]-rhs[2]);
123  }
124 
125  ossimColumnVector4d operator -=(const ossimColumnVector4d &rhs)
126  {
127  data[0] -= rhs[0];
128  data[1] -= rhs[1];
129  data[2] -= rhs[2];
130 
131  return *this;
132  }
133 
134  double magnitude()const
135  {
136  return std::sqrt(data[0]*data[0] +
137  data[1]*data[1] +
138  data[2]*data[2]);
139  }
140  double dot(const ossimColumnVector4d &rhs)const
141  {
142  return (data[0]*rhs[0]+
143  data[1]*rhs[1]+
144  data[2]*rhs[2]);
145  }
146 
148  {
149  double mag = magnitude();
150 
151  if(std::abs(mag) > DBL_EPSILON)
152  {
153  mag = 1.0/mag;
154  return (*this *mag);
155  }
156 
157  return *this;
158  }
159 
161  {
162  return ossimColumnVector4d( data[1]*rhs[2] - data[2]*rhs[1],
163  data[2]*rhs[0] - data[0]*rhs[2],
164  data[0]*rhs[1] - data[1]*rhs[0]);
165  }
166 
167  ossimColumnVector4d& xAligned()// creates 4-D homogeneous vectors
168  {
169  data[0] = 1;
170  data[1] = 0;
171  data[2] = 0;
172  data[3] = 1;
173 
174  return *this;
175  }
177  {
178  data[0] = 0;
179  data[1] = 1;
180  data[2] = 0;
181  data[3] = 1;
182 
183  return *this;
184  }
186  {
187  data[0] = 0;
188  data[1] = 0;
189  data[2] = 1;
190  data[3] = 1;
191 
192  return *this;
193  }
194 
195 private:
196  double data[4];
197 };
198 
199 #endif
ossim_uint32 x
ossimRationalNumber operator-(ossim_int32 i, ossimRationalNumber &r)
#define OSSIMDLLEXPORT
ossimColumnVector4d unit() const
ossimColumnVector4d & zAligned()
ossim_uint32 y
ossimRationalNumber operator/(ossim_int32 i, ossimRationalNumber &r)
friend ossimColumnVector4d operator*(double scalar, const ossimColumnVector4d &v)
#define abs(a)
Definition: auxiliary.h:74
ostream & operator<<(ostream &out, const ossimAxes &axes)
Definition: ossimAxes.h:88
ossimColumnVector4d & xAligned()
#define DBL_EPSILON
ossimColumnVector4d cross(const ossimColumnVector4d &rhs)
ossimColumnVector4d & yAligned()
double dot(const ossimColumnVector4d &rhs) const
ossimColumnVector4d operator*(double scalar) const
ossimRationalNumber operator+(ossim_int32 i, ossimRationalNumber &r)
ossimColumnVector4d(const ossimColumnVector4d &rhs)
std::basic_ostream< char > ostream
Base class for char output streams.
Definition: ossimIosFwd.h:23
ossimColumnVector4d(double x, double y, double z, double w=1.0)