From d5052f1c296dddf51b3e83d59bf3e3c1952cb2d0 Mon Sep 17 00:00:00 2001 From: cathook Date: Sun, 1 Jun 2014 13:56:57 +0800 Subject: big chnage --- doc/html/Vector_8h_source.html | 252 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 252 insertions(+) create mode 100644 doc/html/Vector_8h_source.html (limited to 'doc/html/Vector_8h_source.html') diff --git a/doc/html/Vector_8h_source.html b/doc/html/Vector_8h_source.html new file mode 100644 index 0000000..9cf6d8f --- /dev/null +++ b/doc/html/Vector_8h_source.html @@ -0,0 +1,252 @@ + + + + + + + +Templates -- Meow: meowpp/math/Vector.h Source File + + + + + + + + + + + +
+
+ + + + + + + +
+
Templates -- Meow +  1.1.2 +
+
不能,也不應該先編譯成obj-file的templates
+
+
+ + +
+
+ +
+
+
+ +
+
+
+
Vector.h
+
+
+Go to the documentation of this file.
1 #ifndef math_Vector_H__
+
2 #define math_Vector_H__
+
3 
+
4 #include "../Self.h"
+
5 #include "Matrix.h"
+
6 #include "utility.h"
+
7 
+
8 #include <vector>
+
9 
+
10 #include <cmath>
+
11 
+
12 namespace meow {
+
13 
+
19 template<class Scalar>
+
20 class Vector {
+
21 private:
+
22  Matrix<Scalar> matrix_;
+
23 public:
+
29  Vector(){
+
30  }
+
31 
+
39  Vector(Vector const& v) {
+
40  matrix_.copyFrom(v.matrix_);
+
41  }
+
42 
+
50  Vector(Matrix<Scalar> const& m) {
+
51  matrix_.copyFrom(m.col(0));
+
52  }
+
53 
+
62  Vector(Matrix<Scalar> const& m, size_t i) {
+
63  matrix_.copyFrom(m.col(i));
+
64  }
+
65 
+
73  Vector(std::vector<Scalar> const& v) {
+
74  matrix_.size(v.size(), 1, Scalar(0));
+
75  for (size_t i = 0, I = v.size(); i < I; i++) {
+
76  matrix_.entry(i, 0, v[i]);
+
77  }
+
78  }
+
79 
+
88  Vector(size_t d, Scalar const& e) {
+
89  matrix_.reset(d, 1, e);
+
90  }
+
91 
+ +
94  }
+
95 
+
97  Vector& copyFrom(Vector const& v) {
+
98  matrix_.copyFrom(v.matrix_);
+
99  return *this;
+
100  }
+
101 
+ +
104  matrix_.referenceFrom(v.matrix_);
+
105  return *this;
+
106  }
+
107 
+
109  Matrix<Scalar> const& matrix() const {
+
110  return matrix_;
+
111  }
+
112 
+
114  size_t dimension() const {
+
115  return matrix_.rows();
+
116  }
+
117 
+
125  size_t dimension(size_t d, Scalar const& s) {
+
126  matrix_.rows(d, s);
+
127  return dimension();
+
128  }
+
129 
+
134  bool valid() const {
+
135  return (dimension() > 0);
+
136  }
+
137 
+
139  Scalar entry(size_t i) const {
+
140  return matrix_.entry(i, 0);
+
141  }
+
142 
+
149  Scalar entry(size_t i, Scalar const& s) {
+
150  matrix_.entry(i, 0, s);
+
151  return entry(i);
+
152  }
+
153 
+
161  void entries(size_t i, size_t j, Scalar const& s) {
+
162  for (size_t it = i; it <= j; it++) {
+
163  matrix_.entry(it, 0, s);
+
164  }
+
165  }
+
166 
+
168  Vector subVector(size_t i, size_t j) {
+
169  return Vector(matrix_.subMatrix(i, 0, j, 0));
+
170  }
+
171 
+
173  Vector positive() const {
+
174  return *this;
+
175  }
+
176 
+
178  Vector negative() const {
+
179  return Vector(matrix_.negative());
+
180  }
+
181 
+
183  Vector add(Vector const& v) const {
+
184  return Vector(matrix_.add(v.matrix_));
+
185  }
+
186 
+
188  Vector sub(Vector const& v) const {
+
189  return Vector(matrix_.sub(v.matrix_));
+
190  }
+
191 
+
193  Vector mul(Scalar const& s) const {
+
194  return Vector(matrix_.mul(s));
+
195  }
+
196 
+
198  Vector div(Scalar const& s) const {
+
199  return Vector(matrix_.div(s));
+
200  }
+
201 
+
203  Scalar dot(Vector const& v) const {
+
204  return matrix_.transpose().mul(v.matrix_).entry(0, 0);
+
205  }
+
206 
+
208  Scalar length() const {
+
209  return Scalar(sqrt((double)length2()));
+
210  }
+
211 
+
213  Scalar length2() const {
+
214  return dot(*this);
+
215  }
+
216 
+
218  Vector normalize() const {
+
219  return div(length());
+
220  }
+
221 
+ +
224  copyFrom(normalize());
+
225  return *this;
+
226  }
+
227 
+
229  Vector& operator=(Vector const& v) {
+
230  return copyFrom(v);
+
231  }
+
232 
+
234  Scalar operator()(size_t i) const {
+
235  return entry(i);
+
236  }
+
237 
+
239  Vector operator+() const {
+
240  return positive();
+
241  }
+
242 
+
244  Vector operator-() const {
+
245  return negative();
+
246  }
+
247 
+
249  Vector operator+(Vector const& v) const {
+
250  return add(v);
+
251  }
+
252 
+
254  Vector operator-(Vector const& v) const {
+
255  return sub(v);
+
256  }
+
257 
+
259  Scalar operator*(Vector const& v) const {
+
260  return dot(v);
+
261  }
+
262 
+
264  Vector operator*(Scalar const& s) const {
+
265  return mul(s);
+
266  }
+
267 
+
269  Vector operator/(Scalar const& s) const {
+
270  return div(s);
+
271  }
+
272 };
+
273 
+
274 }
+
275 
+
276 #endif // math_Vector_H__
+
+
+ + + + + -- cgit v1.2.3