1
2
3
4
5
6
7 #include "vector.h"
8 #include <math.h>
9 #include <string.h>
10
11 bool Vector::operator<(const Vector& u) const {
12 return((v_[0]<u.v_[0]) ||
13 (v_[0]==u.v_[0] && v_[1]<u.v_[1]) ||
14 (v_[0]==u.v_[0] && v_[1]==u.v_[1] && v_[2]<u.v_[2])
15 );
16 }
17
18 Vector& Vector::operator*=(const Vector& u) {
19 double x = v_[0];
20 double y = v_[1];
21 double z = v_[2];
22 v_[0] = y*u.v_[2] - z*u.v_[1];
23 v_[1] = z*u.v_[0] - x*u.v_[2];
24 v_[2] = x*u.v_[1] - y*u.v_[0];
25 return *this;
26 }
27
28 Vector Vector::normalized() const {
29 double L = sqrt(v_[0]*v_[0] + v_[1]*v_[1] + v_[2]*v_[2]);
30 if(fabs(L) == 0.0) {
31 return Vector(0,0,0);
32 } else {
33 return Vector(v_[0]/L, v_[1]/L, v_[2]/L);
34 }
35 }
36
37 bool Vector::normalize() {
38 double L = sqrt(v_[0]*v_[0] + v_[1]*v_[1] + v_[2]*v_[2]);
39 if(fabs(L) == 0.0) {
40 return false;
41 } else {
42 v_[0] /= L;
43 v_[1] /= L;
44 v_[2] /= L;
45 return true;
46 }
47 }
48
49
50
51
52
53 ostream& operator<<(ostream& s, const Vector& u) {
54 s << u[0] << " " << u[1] << " " << u[2];
55 return s;
56 }
57
58 istream& operator>>(istream& s, Vector& u) {
59
60 s >> u[0];
61 if(!s.good()) { return s; }
62
63 s >> u[1];
64 if(!s.good()) { return s; }
65
66 s >> u[2];
67 if(!s.good()) { return s; }
68
69 return s;
70 }
71