10 #include "CLHEP/Vector/TwoVector.h"
11 #include "CLHEP/Vector/ThreeVector.h"
18 double Hep2Vector::tolerance = Hep2Vector::ZMpvToleranceTicks * 2.22045e-16;
20 double Hep2Vector::setTolerance (
double tol) {
22 double oldTolerance (tolerance);
27 double Hep2Vector::operator () (
int i)
const {
39 double & Hep2Vector::operator () (
int i) {
53 void Hep2Vector::rotate(
double aangle) {
54 double ss = std::sin(aangle);
55 double cc = std::cos(aangle);
66 return Hep2Vector(p.x()/
a, p.y()/
a);
69 std::ostream &
operator << (std::ostream & os,
const Hep2Vector & q) {
70 os <<
"(" << q.x() <<
", " << q.y() <<
")";
75 double & x,
double & y );
77 std::istream &
operator>>(std::istream & is, Hep2Vector & p) {
84 Hep2Vector::operator Hep3Vector ()
const {
85 return Hep3Vector ( dx, dy, 0.0 );
88 int Hep2Vector::compare (
const Hep2Vector & v)
const {
91 }
else if ( dy < v.dy ) {
93 }
else if ( dx > v.dx ) {
95 }
else if ( dx < v.dx ) {
103 bool Hep2Vector::operator > (
const Hep2Vector & v)
const {
104 return (compare(v) > 0);
107 return (compare(v) < 0);
109 bool Hep2Vector::operator>= (
const Hep2Vector & v)
const {
110 return (compare(v) >= 0);
112 bool Hep2Vector::operator<= (
const Hep2Vector & v)
const {
113 return (compare(v) <= 0);
116 bool Hep2Vector::isNear(
const Hep2Vector & p,
double epsilon)
const {
117 double limit = dot(p)*epsilon*epsilon;
118 return ( (*
this - p).mag2() <= limit );
121 double Hep2Vector::howNear(
const Hep2Vector & p )
const {
122 double d = (*
this - p).mag2();
124 if ( (pdp > 0) && (d < pdp) ) {
125 return std::sqrt (d/pdp);
126 }
else if ( (pdp == 0) && (d == 0) ) {
133 double Hep2Vector::howParallel (
const Hep2Vector & v)
const {
136 double v1v2 = std::fabs(dot(v));
139 return ( (mag2() == 0) && (v.mag2() == 0) ) ? 0 : 1;
141 double abscross = std::fabs ( dx * v.y() - dy - v.x() );
142 if ( abscross >= v1v2 ) {
145 return abscross/v1v2;
149 bool Hep2Vector::isParallel (
const Hep2Vector & v,
150 double epsilon)
const {
153 double v1v2 = std::fabs(dot(v));
156 return ( (mag2() == 0) && (v.mag2() == 0) );
158 double abscross = std::fabs ( dx * v.y() - dy - v.x() );
159 return ( abscross <= epsilon * v1v2 );
162 double Hep2Vector::howOrthogonal (
const Hep2Vector & v)
const {
165 double v1v2 = std::fabs(dot(v));
169 double abscross = std::fabs ( dx * v.y() - dy - v.x() );
170 if ( v1v2 >= abscross ) {
173 return v1v2/abscross;
177 bool Hep2Vector::isOrthogonal (
const Hep2Vector & v,
178 double epsilon)
const {
181 double v1v2 = std::fabs(dot(v));
182 double abscross = std::fabs ( dx * v.y() - dy - v.x() );
183 return ( v1v2 <= epsilon * abscross );
HepLorentzVector operator/(const HepLorentzVector &w, double c)
std::istream & operator>>(std::istream &is, HepAxisAngle &aa)
void ZMinput2doubles(std::istream &is, const char *type, double &x, double &y)
std::ostream & operator<<(std::ostream &os, const HepAxisAngle &aa)
bool operator<(const CexmcAngularRange &left, const CexmcAngularRange &right)