source: trunk/MagicSoft/Cosy/base/coord.h@ 954

Last change on this file since 954 was 921, checked in by tbretz, 24 years ago
*** empty log message ***
File size: 3.8 KB
Line 
1#ifndef COORD_H
2#define COORD_H
3
4#include <math.h> // floor
5
6#include "slalib/slamac.h" // D2PI
7
8class Deg
9{
10protected:
11 double fDeg;
12
13public:
14 Deg(const double d) : fDeg(d) {}
15 Deg(const Deg &c) { fDeg = c.fDeg; }
16
17 void Set(double d) { fDeg=d; }
18
19 double operator()() { return fDeg; }
20
21 operator double() const { return fDeg*D2PI/360.0; }
22};
23
24class XY
25{
26protected:
27 double fX;
28 double fY;
29
30public:
31 XY(double x=0, double y=0) : fX(x), fY(y) {}
32 XY(const XY &c) { fX = c.fX; fY = c.fY; }
33
34 void Set(double x, double y) { fX=x; fY=y; }
35
36 double X() const { return fX; }
37 double Y() const { return fY; }
38
39 void operator/=(double c) { fX/=c; fY/=c; }
40 void operator*=(double c) { fX*=c; fY*=c; }
41
42 XY operator/(double c) const { return XY(fX/c, fY/c); }
43 XY operator*(double c) const { return XY(fX*c, fY*c); }
44 XY operator*(const XY &c) const { return XY(fX*c.fX, fY*c.fY); }
45 XY operator/(const XY &c) const { return XY(fX/c.fX, fY/c.fY); }
46 XY operator+(const XY &c) const { return XY(fX+c.fX, fY+c.fY); }
47 XY operator-(const XY &c) const { return XY(fX-c.fX, fY-c.fY); }
48 XY operator-() const { return XY(-fX, -fY); }
49
50 double Sqr() const { return fX*fX + fY*fY; }
51 double Sqrt() const { return sqrt(Sqr()); }
52 double Ratio() const { return fX/fY; }
53 void Round() { fX=(int)(floor(fX+.5)); fY=(int)(floor(fY+.5)); }
54};
55
56class AltAz : public XY
57{
58public:
59 AltAz(double alt=0, double az=0) : XY(alt, az) {}
60
61 double Alt() const { return fX; }
62 double Az() const { return fY; }
63
64 void Alt(double d) { fX=d; }
65 void Az(double d) { fY=d; }
66 void operator*=(const XY &c) { fX*=c.X(); fY*=c.Y(); }
67 void operator-=(const AltAz &c) { fX-=c.fX; fY-=c.fY; }
68
69 AltAz operator/(double c) const { return AltAz(fX/c, fY/c); }
70 AltAz operator*(double c) const { return AltAz(fX*c, fY*c); }
71 AltAz operator*(const XY &c) const { return AltAz(fX*c.X(), fY*c.Y()); }
72 AltAz operator/(const XY &c) const { return AltAz(fX/c.X(), fY/c.Y()); }
73 AltAz operator+(const AltAz &c) const { return AltAz(fX+c.fX, fY+c.fY); }
74 AltAz operator-(const AltAz &c) const { return AltAz(fX-c.fX, fY-c.fY); }
75 AltAz operator-() const { return AltAz(-fX, -fY); }
76};
77
78class ZdAz : public XY
79{
80public:
81 ZdAz(double zd=0, double az=0) : XY(zd, az) {}
82 ZdAz(const ZdAz &c) : XY(c) {}
83
84 double Zd() const { return fX; }
85 double Az() const { return fY; }
86
87 void Zd(double d) { fX=d; }
88 void Az(double d) { fY=d; }
89 void operator*=(const XY &c) { fX*=c.X(); fY*=c.Y(); }
90 void operator-=(const ZdAz &c) { fX-=c.fX; fY-=c.fY; }
91 void operator+=(const ZdAz &c) { fX+=c.fX; fY+=c.fY; }
92
93 ZdAz operator/(double c) const { return ZdAz(fX/c, fY/c); }
94 ZdAz operator*(double c) const { return ZdAz(fX*c, fY*c); }
95 ZdAz operator*(const XY &c) const { return ZdAz(fX*c.X(), fY*c.Y()); }
96 ZdAz operator/(const XY &c) const { return ZdAz(fX/c.X(), fY/c.Y()); }
97 ZdAz operator+(const ZdAz &c) const { return ZdAz(fX+c.fX, fY+c.fY); }
98 ZdAz operator-(const ZdAz &c) const { return ZdAz(fX-c.fX, fY-c.fY); }
99 ZdAz operator-() const { return ZdAz(-fX, -fY); }
100};
101
102class RaDec : public XY
103{
104public:
105 RaDec(double ra=0, double dec=0) : XY(ra, dec) {}
106
107 double Ra() const { return fX; }
108 double Dec() const { return fY; }
109
110 RaDec operator/(double c) const { return RaDec(fX/c, fY/c); }
111 RaDec operator*(double c) const { return RaDec(fX*c, fY*c); }
112 RaDec operator*(const XY &c) const { return RaDec(fX*c.X(), fY*c.Y()); }
113 RaDec operator+(const RaDec &c) const { return RaDec(fX+c.fX, fY+c.fY); }
114 RaDec operator-(const RaDec &c) const { return RaDec(fX-c.fX, fY-c.fY); }
115 RaDec operator-() const { return RaDec(-fX, -fY); }
116};
117
118inline double Rad2Deg(double rad)
119{
120 return 360.0/D2PI*rad;
121}
122
123inline double Deg2Rad(double rad)
124{
125 return D2PI/360.0*rad;
126}
127#endif
Note: See TracBrowser for help on using the repository browser.