1 | // -*- C++ -*-
|
---|
2 | // ---------------------------------------------------------------------------
|
---|
3 | //
|
---|
4 | // This file is a part of the CLHEP - a Class Library for High Energy Physics.
|
---|
5 | //
|
---|
6 | // This is the definitions of the inline member functions of the
|
---|
7 | // Hep2Vector class.
|
---|
8 | //
|
---|
9 |
|
---|
10 | #include <cmath>
|
---|
11 |
|
---|
12 | namespace CLHEP {
|
---|
13 |
|
---|
14 | inline double Hep2Vector::x() const {
|
---|
15 | return dx;
|
---|
16 | }
|
---|
17 |
|
---|
18 | inline double Hep2Vector::y() const {
|
---|
19 | return dy;
|
---|
20 | }
|
---|
21 |
|
---|
22 | inline Hep2Vector::Hep2Vector(double x, double y)
|
---|
23 | : dx(x), dy(y) {}
|
---|
24 |
|
---|
25 | inline Hep2Vector::Hep2Vector( const Hep3Vector & s)
|
---|
26 | : dx(s.x()), dy(s.y()) {}
|
---|
27 |
|
---|
28 | inline void Hep2Vector::setX(double x) {
|
---|
29 | dx = x;
|
---|
30 | }
|
---|
31 |
|
---|
32 | inline void Hep2Vector::setY(double y) {
|
---|
33 | dy = y;
|
---|
34 | }
|
---|
35 |
|
---|
36 | inline void Hep2Vector::set(double x, double y) {
|
---|
37 | dx = x;
|
---|
38 | dy = y;
|
---|
39 | }
|
---|
40 |
|
---|
41 | double & Hep2Vector::operator[] (int i) { return operator()(i); }
|
---|
42 | double Hep2Vector::operator[] (int i) const { return operator()(i); }
|
---|
43 |
|
---|
44 | inline Hep2Vector::Hep2Vector(const Hep2Vector & p)
|
---|
45 | : dx(p.x()), dy(p.y()) {}
|
---|
46 |
|
---|
47 | inline Hep2Vector::~Hep2Vector() {}
|
---|
48 |
|
---|
49 | inline Hep2Vector & Hep2Vector::operator = (const Hep2Vector & p) {
|
---|
50 | dx = p.x();
|
---|
51 | dy = p.y();
|
---|
52 | return *this;
|
---|
53 | }
|
---|
54 |
|
---|
55 | inline bool Hep2Vector::operator == (const Hep2Vector& v) const {
|
---|
56 | return (v.x()==x() && v.y()==y()) ? true : false;
|
---|
57 | }
|
---|
58 |
|
---|
59 | inline bool Hep2Vector::operator != (const Hep2Vector& v) const {
|
---|
60 | return (v.x()!=x() || v.y()!=y()) ? true : false;
|
---|
61 | }
|
---|
62 |
|
---|
63 | inline Hep2Vector& Hep2Vector::operator += (const Hep2Vector & p) {
|
---|
64 | dx += p.x();
|
---|
65 | dy += p.y();
|
---|
66 | return *this;
|
---|
67 | }
|
---|
68 |
|
---|
69 | inline Hep2Vector& Hep2Vector::operator -= (const Hep2Vector & p) {
|
---|
70 | dx -= p.x();
|
---|
71 | dy -= p.y();
|
---|
72 | return *this;
|
---|
73 | }
|
---|
74 |
|
---|
75 | inline Hep2Vector Hep2Vector::operator - () const {
|
---|
76 | return Hep2Vector(-dx, -dy);
|
---|
77 | }
|
---|
78 |
|
---|
79 | inline Hep2Vector& Hep2Vector::operator *= (double a) {
|
---|
80 | dx *= a;
|
---|
81 | dy *= a;
|
---|
82 | return *this;
|
---|
83 | }
|
---|
84 |
|
---|
85 | inline double Hep2Vector::dot(const Hep2Vector & p) const {
|
---|
86 | return dx*p.x() + dy*p.y();
|
---|
87 | }
|
---|
88 |
|
---|
89 | inline double Hep2Vector::mag2() const {
|
---|
90 | return dx*dx + dy*dy;
|
---|
91 | }
|
---|
92 |
|
---|
93 | inline double Hep2Vector::mag() const {
|
---|
94 | return std::sqrt(mag2());
|
---|
95 | }
|
---|
96 |
|
---|
97 | inline double Hep2Vector::r() const {
|
---|
98 | return std::sqrt(mag2());
|
---|
99 | }
|
---|
100 |
|
---|
101 | inline Hep2Vector Hep2Vector::unit() const {
|
---|
102 | double tot = mag2();
|
---|
103 | Hep2Vector p(*this);
|
---|
104 | return tot > 0.0 ? p *= (1.0/std::sqrt(tot)) : Hep2Vector(1,0);
|
---|
105 | }
|
---|
106 |
|
---|
107 | inline Hep2Vector Hep2Vector::orthogonal() const {
|
---|
108 | double x = std::fabs(dx), y = std::fabs(dy);
|
---|
109 | if (x < y) {
|
---|
110 | return Hep2Vector(dy,-dx);
|
---|
111 | }else{
|
---|
112 | return Hep2Vector(-dy,dx);
|
---|
113 | }
|
---|
114 | }
|
---|
115 |
|
---|
116 | inline double Hep2Vector::phi() const {
|
---|
117 | return dx == 0.0 && dy == 0.0 ? 0.0 : std::atan2(dy,dx);
|
---|
118 | }
|
---|
119 |
|
---|
120 | inline double Hep2Vector::angle(const Hep2Vector & q) const {
|
---|
121 | double ptot2 = mag2()*q.mag2();
|
---|
122 | return ptot2 <= 0.0 ? 0.0 : std::acos(dot(q)/std::sqrt(ptot2));
|
---|
123 | }
|
---|
124 |
|
---|
125 | inline void Hep2Vector::setMag(double r){
|
---|
126 | double ph = phi();
|
---|
127 | setX( r * std::cos(ph) );
|
---|
128 | setY( r * std::sin(ph) );
|
---|
129 | }
|
---|
130 |
|
---|
131 | inline void Hep2Vector::setR(double r){
|
---|
132 | setMag(r);
|
---|
133 | }
|
---|
134 |
|
---|
135 | inline void Hep2Vector::setPhi(double phi){
|
---|
136 | double ma = mag();
|
---|
137 | setX( ma * std::cos(phi) );
|
---|
138 | setY( ma * std::sin(phi) );
|
---|
139 | }
|
---|
140 |
|
---|
141 | inline void Hep2Vector::setPolar(double r, double phi){
|
---|
142 | setX( r * std::cos(phi) );
|
---|
143 | setY( r * std::sin(phi) );
|
---|
144 | }
|
---|
145 |
|
---|
146 | inline Hep2Vector operator + (const Hep2Vector & a, const Hep2Vector & b) {
|
---|
147 | return Hep2Vector(a.x() + b.x(), a.y() + b.y());
|
---|
148 | }
|
---|
149 |
|
---|
150 | inline Hep2Vector operator - (const Hep2Vector & a, const Hep2Vector & b) {
|
---|
151 | return Hep2Vector(a.x() - b.x(), a.y() - b.y());
|
---|
152 | }
|
---|
153 |
|
---|
154 | inline Hep2Vector operator * (const Hep2Vector & p, double a) {
|
---|
155 | return Hep2Vector(a*p.x(), a*p.y());
|
---|
156 | }
|
---|
157 |
|
---|
158 | inline Hep2Vector operator * (double a, const Hep2Vector & p) {
|
---|
159 | return Hep2Vector(a*p.x(), a*p.y());
|
---|
160 | }
|
---|
161 |
|
---|
162 | inline double operator * (const Hep2Vector & a, const Hep2Vector & b) {
|
---|
163 | return a.dot(b);
|
---|
164 | }
|
---|
165 |
|
---|
166 | inline double Hep2Vector::getTolerance () {
|
---|
167 | return tolerance;
|
---|
168 | }
|
---|
169 |
|
---|
170 | } // namespace CLHEP
|
---|
171 |
|
---|