FACT++
1.0
Main Page
Related Pages
Namespaces
Classes
Files
Examples
File List
File Members
palDtps2c.c
Go to the documentation of this file.
1
/*
2
*+
3
* Name:
4
* palDtps2c
5
6
* Purpose:
7
* Determine RA,Dec of tangent point from coordinates
8
9
* Language:
10
* Starlink ANSI C
11
12
* Type of Module:
13
* Library routine
14
15
* Invocation:
16
* palDtps2c( double xi, double eta, double ra, double dec,
17
* double * raz1, double decz1,
18
* double * raz2, double decz2, int *n);
19
20
* Arguments:
21
* xi = double (Given)
22
* First rectangular coordinate on tangent plane (radians)
23
* eta = double (Given)
24
* Second rectangular coordinate on tangent plane (radians)
25
* ra = double (Given)
26
* RA spherical coordinate of star (radians)
27
* dec = double (Given)
28
* Dec spherical coordinate of star (radians)
29
* raz1 = double * (Returned)
30
* RA spherical coordinate of tangent point, solution 1 (radians)
31
* decz1 = double * (Returned)
32
* Dec spherical coordinate of tangent point, solution 1 (radians)
33
* raz2 = double * (Returned)
34
* RA spherical coordinate of tangent point, solution 2 (radians)
35
* decz2 = double * (Returned)
36
* Dec spherical coordinate of tangent point, solution 2 (radians)
37
* n = int * (Returned)
38
* number of solutions: 0 = no solutions returned (note 2)
39
* 1 = only the first solution is useful (note 3)
40
* 2 = both solutions are useful (note 3)
41
42
43
* Description:
44
* From the tangent plane coordinates of a star of known RA,Dec,
45
* determine the RA,Dec of the tangent point.
46
47
* Authors:
48
* PTW: Pat Wallace (STFC)
49
* TIMJ: Tim Jenness (JAC, Hawaii)
50
* {enter_new_authors_here}
51
52
* Notes:
53
* - The RAZ1 and RAZ2 values are returned in the range 0-2pi.
54
* - Cases where there is no solution can only arise near the poles.
55
* For example, it is clearly impossible for a star at the pole
56
* itself to have a non-zero XI value, and hence it is
57
* meaningless to ask where the tangent point would have to be
58
* to bring about this combination of XI and DEC.
59
* - Also near the poles, cases can arise where there are two useful
60
* solutions. The argument N indicates whether the second of the
61
* two solutions returned is useful. N=1 indicates only one useful
62
* solution, the usual case; under these circumstances, the second
63
* solution corresponds to the "over-the-pole" case, and this is
64
* reflected in the values of RAZ2 and DECZ2 which are returned.
65
* - The DECZ1 and DECZ2 values are returned in the range +/-pi, but
66
* in the usual, non-pole-crossing, case, the range is +/-pi/2.
67
* - This routine is the spherical equivalent of the routine sla_DTPV2C.
68
69
* History:
70
* 2012-02-08 (TIMJ):
71
* Initial version with documentation taken from Fortran SLA
72
* Adapted with permission from the Fortran SLALIB library.
73
* {enter_further_changes_here}
74
75
* Copyright:
76
* Copyright (C) 1995 Rutherford Appleton Laboratory
77
* Copyright (C) 2012 Science and Technology Facilities Council.
78
* All Rights Reserved.
79
80
* Licence:
81
* This program is free software: you can redistribute it and/or
82
* modify it under the terms of the GNU Lesser General Public
83
* License as published by the Free Software Foundation, either
84
* version 3 of the License, or (at your option) any later
85
* version.
86
*
87
* This program is distributed in the hope that it will be useful,
88
* but WITHOUT ANY WARRANTY; without even the implied warranty of
89
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
90
* GNU Lesser General Public License for more details.
91
*
92
* You should have received a copy of the GNU Lesser General
93
* License along with this program. If not, see
94
* <http://www.gnu.org/licenses/>.
95
96
* Bugs:
97
* {note_any_bugs_here}
98
*-
99
*/
100
101
#include "
pal.h
"
102
#include "
pal1sofa.h
"
103
104
#include <math.h>
105
106
void
107
palDtps2c
(
double
xi,
double
eta,
double
ra,
double
dec,
108
double
* raz1,
double
* decz1,
109
double
* raz2,
double
* decz2,
int
*n) {
110
111
double
x2;
112
double
y2;
113
double
sd;
114
double
cd;
115
double
sdf;
116
double
r2;
117
118
x2 = xi * xi;
119
y2 = eta * eta;
120
sd = sin(dec);
121
cd = cos(dec);
122
sdf = sd * sqrt(x2 + 1. + y2);
123
r2 = cd * cd * (y2 + 1.) - sd * sd * x2;
124
if
(r2 >= 0.) {
125
double
r;
126
double
s;
127
double
c;
128
129
r = sqrt(r2);
130
s = sdf - eta * r;
131
c = sdf * eta + r;
132
if
(xi == 0. && r == 0.) {
133
r = 1.;
134
}
135
*raz1 =
eraAnp
(ra - atan2(xi, r));
136
*decz1 = atan2(s, c);
137
r = -r;
138
s = sdf - eta * r;
139
c = sdf * eta + r;
140
*raz2 =
eraAnp
(ra - atan2(xi, r));
141
*decz2 = atan2(s, c);
142
if
(fabs(sdf) < 1.) {
143
*n = 1;
144
}
else
{
145
*n = 2;
146
}
147
}
else
{
148
*n = 0;
149
}
150
return
;
151
}
pal.h
palDtps2c
void palDtps2c(double xi, double eta, double ra, double dec, double *raz1, double *decz1, double *raz2, double *decz2, int *n)
Definition:
palDtps2c.c:107
pal1sofa.h
eraAnp
double eraAnp(double a)
Definition:
anp.c:3
pal
palDtps2c.c
Generated on Sun Sep 18 2016 20:50:24 for FACT++ by
1.8.11