File: wcstrig_8h-source.html

package info (click to toggle)
python-pywcs 1.11-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 11,888 kB
  • sloc: ansic: 31,441; lex: 6,170; fortran: 6,080; sh: 3,478; python: 3,122; sed: 408; makefile: 76
file content (240 lines) | stat: -rw-r--r-- 21,774 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>WCSLIB 4.8.2: wcstrig.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.6 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
<h1>wcstrig.h</h1><a href="wcstrig_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*============================================================================</span>
<a name="l00002"></a>00002 <span class="comment"></span>
<a name="l00003"></a>00003 <span class="comment">  WCSLIB 4.8 - an implementation of the FITS WCS standard.</span>
<a name="l00004"></a>00004 <span class="comment">  Copyright (C) 1995-2011, Mark Calabretta</span>
<a name="l00005"></a>00005 <span class="comment"></span>
<a name="l00006"></a>00006 <span class="comment">  This file is part of WCSLIB.</span>
<a name="l00007"></a>00007 <span class="comment"></span>
<a name="l00008"></a>00008 <span class="comment">  WCSLIB is free software: you can redistribute it and/or modify it under the</span>
<a name="l00009"></a>00009 <span class="comment">  terms of the GNU Lesser General Public License as published by the Free</span>
<a name="l00010"></a>00010 <span class="comment">  Software Foundation, either version 3 of the License, or (at your option)</span>
<a name="l00011"></a>00011 <span class="comment">  any later version.</span>
<a name="l00012"></a>00012 <span class="comment"></span>
<a name="l00013"></a>00013 <span class="comment">  WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY</span>
<a name="l00014"></a>00014 <span class="comment">  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span>
<a name="l00015"></a>00015 <span class="comment">  FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for</span>
<a name="l00016"></a>00016 <span class="comment">  more details.</span>
<a name="l00017"></a>00017 <span class="comment"></span>
<a name="l00018"></a>00018 <span class="comment">  You should have received a copy of the GNU Lesser General Public License</span>
<a name="l00019"></a>00019 <span class="comment">  along with WCSLIB.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
<a name="l00020"></a>00020 <span class="comment"></span>
<a name="l00021"></a>00021 <span class="comment">  Correspondence concerning WCSLIB may be directed to:</span>
<a name="l00022"></a>00022 <span class="comment">    Internet email: mcalabre@atnf.csiro.au</span>
<a name="l00023"></a>00023 <span class="comment">    Postal address: Dr. Mark Calabretta</span>
<a name="l00024"></a>00024 <span class="comment">                    Australia Telescope National Facility, CSIRO</span>
<a name="l00025"></a>00025 <span class="comment">                    PO Box 76</span>
<a name="l00026"></a>00026 <span class="comment">                    Epping NSW 1710</span>
<a name="l00027"></a>00027 <span class="comment">                    AUSTRALIA</span>
<a name="l00028"></a>00028 <span class="comment"></span>
<a name="l00029"></a>00029 <span class="comment">  Author: Mark Calabretta, Australia Telescope National Facility</span>
<a name="l00030"></a>00030 <span class="comment">  http://www.atnf.csiro.au/~mcalabre/index.html</span>
<a name="l00031"></a>00031 <span class="comment">  $Id: wcstrig.h,v 4.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $</span>
<a name="l00032"></a>00032 <span class="comment">*=============================================================================</span>
<a name="l00033"></a>00033 <span class="comment">*</span>
<a name="l00034"></a>00034 <span class="comment">* Summary of the wcstrig routines</span>
<a name="l00035"></a>00035 <span class="comment">* -------------------------------</span>
<a name="l00036"></a>00036 <span class="comment">* When dealing with celestial coordinate systems and spherical projections</span>
<a name="l00037"></a>00037 <span class="comment">* (some moreso than others) it is often desirable to use an angular measure</span>
<a name="l00038"></a>00038 <span class="comment">* that provides an exact representation of the latitude of the north or south</span>
<a name="l00039"></a>00039 <span class="comment">* pole.  The WCSLIB routines use the following trigonometric functions that</span>
<a name="l00040"></a>00040 <span class="comment">* take or return angles in degrees:</span>
<a name="l00041"></a>00041 <span class="comment">*</span>
<a name="l00042"></a>00042 <span class="comment">*   - cosd()</span>
<a name="l00043"></a>00043 <span class="comment">*   - sind()</span>
<a name="l00044"></a>00044 <span class="comment">*   - tand()</span>
<a name="l00045"></a>00045 <span class="comment">*   - acosd()</span>
<a name="l00046"></a>00046 <span class="comment">*   - asind()</span>
<a name="l00047"></a>00047 <span class="comment">*   - atand()</span>
<a name="l00048"></a>00048 <span class="comment">*   - atan2d()</span>
<a name="l00049"></a>00049 <span class="comment">*   - sincosd()</span>
<a name="l00050"></a>00050 <span class="comment">*</span>
<a name="l00051"></a>00051 <span class="comment">* These "trigd" routines are expected to handle angles that are a multiple of</span>
<a name="l00052"></a>00052 <span class="comment">* 90 degrees returning an exact result.  Some C implementations provide these</span>
<a name="l00053"></a>00053 <span class="comment">* as part of a system library and in such cases it may (or may not!) be</span>
<a name="l00054"></a>00054 <span class="comment">* preferable to use them.  WCSLIB provides wrappers on the standard trig</span>
<a name="l00055"></a>00055 <span class="comment">* functions based on radian measure, adding tests for multiples of 90 degrees.</span>
<a name="l00056"></a>00056 <span class="comment">*</span>
<a name="l00057"></a>00057 <span class="comment">* However, wcstrig.h also provides the choice of using preprocessor macro</span>
<a name="l00058"></a>00058 <span class="comment">* implementations of the trigd functions that don't test for multiples of</span>
<a name="l00059"></a>00059 <span class="comment">* 90 degrees (compile with -DWCSTRIG_MACRO).  These are typically 20% faster</span>
<a name="l00060"></a>00060 <span class="comment">* but may lead to problems near the poles.</span>
<a name="l00061"></a>00061 <span class="comment">*</span>
<a name="l00062"></a>00062 <span class="comment">*</span>
<a name="l00063"></a>00063 <span class="comment">* cosd() - Cosine of an angle in degrees</span>
<a name="l00064"></a>00064 <span class="comment">* --------------------------------------</span>
<a name="l00065"></a>00065 <span class="comment">* cosd() returns the cosine of an angle given in degrees.</span>
<a name="l00066"></a>00066 <span class="comment">*</span>
<a name="l00067"></a>00067 <span class="comment">* Given:</span>
<a name="l00068"></a>00068 <span class="comment">*   angle     double    [deg].</span>
<a name="l00069"></a>00069 <span class="comment">*</span>
<a name="l00070"></a>00070 <span class="comment">* Function return value:</span>
<a name="l00071"></a>00071 <span class="comment">*             double    Cosine of the angle.</span>
<a name="l00072"></a>00072 <span class="comment">*</span>
<a name="l00073"></a>00073 <span class="comment">*</span>
<a name="l00074"></a>00074 <span class="comment">* sind() - Sine of an angle in degrees</span>
<a name="l00075"></a>00075 <span class="comment">* ------------------------------------</span>
<a name="l00076"></a>00076 <span class="comment">* sind() returns the sine of an angle given in degrees.</span>
<a name="l00077"></a>00077 <span class="comment">*</span>
<a name="l00078"></a>00078 <span class="comment">* Given:</span>
<a name="l00079"></a>00079 <span class="comment">*   angle     double    [deg].</span>
<a name="l00080"></a>00080 <span class="comment">*</span>
<a name="l00081"></a>00081 <span class="comment">* Function return value:</span>
<a name="l00082"></a>00082 <span class="comment">*             double    Sine of the angle.</span>
<a name="l00083"></a>00083 <span class="comment">*</span>
<a name="l00084"></a>00084 <span class="comment">*</span>
<a name="l00085"></a>00085 <span class="comment">* sincosd() - Sine and cosine of an angle in degrees</span>
<a name="l00086"></a>00086 <span class="comment">* --------------------------------------------------</span>
<a name="l00087"></a>00087 <span class="comment">* sincosd() returns the sine and cosine of an angle given in degrees.</span>
<a name="l00088"></a>00088 <span class="comment">*</span>
<a name="l00089"></a>00089 <span class="comment">* Given:</span>
<a name="l00090"></a>00090 <span class="comment">*   angle     double    [deg].</span>
<a name="l00091"></a>00091 <span class="comment">*</span>
<a name="l00092"></a>00092 <span class="comment">* Returned:</span>
<a name="l00093"></a>00093 <span class="comment">*   sin       *double   Sine of the angle.</span>
<a name="l00094"></a>00094 <span class="comment">*</span>
<a name="l00095"></a>00095 <span class="comment">*   cos       *double   Cosine of the angle.</span>
<a name="l00096"></a>00096 <span class="comment">*</span>
<a name="l00097"></a>00097 <span class="comment">* Function return value:</span>
<a name="l00098"></a>00098 <span class="comment">*             void</span>
<a name="l00099"></a>00099 <span class="comment">*</span>
<a name="l00100"></a>00100 <span class="comment">*</span>
<a name="l00101"></a>00101 <span class="comment">* tand() - Tangent of an angle in degrees</span>
<a name="l00102"></a>00102 <span class="comment">* ---------------------------------------</span>
<a name="l00103"></a>00103 <span class="comment">* tand() returns the tangent of an angle given in degrees.</span>
<a name="l00104"></a>00104 <span class="comment">*</span>
<a name="l00105"></a>00105 <span class="comment">* Given:</span>
<a name="l00106"></a>00106 <span class="comment">*   angle     double    [deg].</span>
<a name="l00107"></a>00107 <span class="comment">*</span>
<a name="l00108"></a>00108 <span class="comment">* Function return value:</span>
<a name="l00109"></a>00109 <span class="comment">*             double    Tangent of the angle.</span>
<a name="l00110"></a>00110 <span class="comment">*</span>
<a name="l00111"></a>00111 <span class="comment">*</span>
<a name="l00112"></a>00112 <span class="comment">* acosd() - Inverse cosine, returning angle in degrees</span>
<a name="l00113"></a>00113 <span class="comment">* ----------------------------------------------------</span>
<a name="l00114"></a>00114 <span class="comment">* acosd() returns the inverse cosine in degrees.</span>
<a name="l00115"></a>00115 <span class="comment">*</span>
<a name="l00116"></a>00116 <span class="comment">* Given:</span>
<a name="l00117"></a>00117 <span class="comment">*   x         double    in the range [-1,1].</span>
<a name="l00118"></a>00118 <span class="comment">*</span>
<a name="l00119"></a>00119 <span class="comment">* Function return value:</span>
<a name="l00120"></a>00120 <span class="comment">*             double    Inverse cosine of x [deg].</span>
<a name="l00121"></a>00121 <span class="comment">*</span>
<a name="l00122"></a>00122 <span class="comment">*</span>
<a name="l00123"></a>00123 <span class="comment">* asind() - Inverse sine, returning angle in degrees</span>
<a name="l00124"></a>00124 <span class="comment">* --------------------------------------------------</span>
<a name="l00125"></a>00125 <span class="comment">* asind() returns the inverse sine in degrees.</span>
<a name="l00126"></a>00126 <span class="comment">*</span>
<a name="l00127"></a>00127 <span class="comment">* Given:</span>
<a name="l00128"></a>00128 <span class="comment">*   y         double    in the range [-1,1].</span>
<a name="l00129"></a>00129 <span class="comment">*</span>
<a name="l00130"></a>00130 <span class="comment">* Function return value:</span>
<a name="l00131"></a>00131 <span class="comment">*             double    Inverse sine of y [deg].</span>
<a name="l00132"></a>00132 <span class="comment">*</span>
<a name="l00133"></a>00133 <span class="comment">*</span>
<a name="l00134"></a>00134 <span class="comment">* atand() - Inverse tangent, returning angle in degrees</span>
<a name="l00135"></a>00135 <span class="comment">* -----------------------------------------------------</span>
<a name="l00136"></a>00136 <span class="comment">* atand() returns the inverse tangent in degrees.</span>
<a name="l00137"></a>00137 <span class="comment">*</span>
<a name="l00138"></a>00138 <span class="comment">* Given:</span>
<a name="l00139"></a>00139 <span class="comment">*   s         double</span>
<a name="l00140"></a>00140 <span class="comment">*</span>
<a name="l00141"></a>00141 <span class="comment">* Function return value:</span>
<a name="l00142"></a>00142 <span class="comment">*             double    Inverse tangent of s [deg].</span>
<a name="l00143"></a>00143 <span class="comment">*</span>
<a name="l00144"></a>00144 <span class="comment">*</span>
<a name="l00145"></a>00145 <span class="comment">* atan2d() - Polar angle of (x,y), in degrees</span>
<a name="l00146"></a>00146 <span class="comment">* -------------------------------------------</span>
<a name="l00147"></a>00147 <span class="comment">* atan2d() returns the polar angle, beta, in degrees, of polar coordinates</span>
<a name="l00148"></a>00148 <span class="comment">* (rho,beta) corresponding Cartesian coordinates (x,y).  It is equivalent to</span>
<a name="l00149"></a>00149 <span class="comment">* the arg(x,y) function of WCS Paper II, though with transposed arguments.</span>
<a name="l00150"></a>00150 <span class="comment">*</span>
<a name="l00151"></a>00151 <span class="comment">* Given:</span>
<a name="l00152"></a>00152 <span class="comment">*   y         double    Cartesian y-coordinate.</span>
<a name="l00153"></a>00153 <span class="comment">*</span>
<a name="l00154"></a>00154 <span class="comment">*   x         double    Cartesian x-coordinate.</span>
<a name="l00155"></a>00155 <span class="comment">*</span>
<a name="l00156"></a>00156 <span class="comment">* Function return value:</span>
<a name="l00157"></a>00157 <span class="comment">*             double    Polar angle of (x,y) [deg].</span>
<a name="l00158"></a>00158 <span class="comment">*</span>
<a name="l00159"></a>00159 <span class="comment">*===========================================================================*/</span>
<a name="l00160"></a>00160 
<a name="l00161"></a>00161 <span class="preprocessor">#ifndef WCSLIB_WCSTRIG</span>
<a name="l00162"></a>00162 <span class="preprocessor"></span><span class="preprocessor">#define WCSLIB_WCSTRIG</span>
<a name="l00163"></a>00163 <span class="preprocessor"></span>
<a name="l00164"></a>00164 <span class="preprocessor">#include &lt;math.h&gt;</span>
<a name="l00165"></a>00165 
<a name="l00166"></a>00166 <span class="preprocessor">#include "wcsconfig.h"</span>
<a name="l00167"></a>00167 
<a name="l00168"></a>00168 <span class="preprocessor">#ifdef HAVE_SINCOS</span>
<a name="l00169"></a>00169 <span class="preprocessor"></span>  <span class="keywordtype">void</span> sincos(<span class="keywordtype">double</span> angle, <span class="keywordtype">double</span> *sin, <span class="keywordtype">double</span> *cos);
<a name="l00170"></a>00170 <span class="preprocessor">#endif</span>
<a name="l00171"></a>00171 <span class="preprocessor"></span>
<a name="l00172"></a>00172 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00173"></a>00173 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
<a name="l00174"></a>00174 <span class="preprocessor">#endif</span>
<a name="l00175"></a>00175 <span class="preprocessor"></span>
<a name="l00176"></a>00176 
<a name="l00177"></a>00177 <span class="preprocessor">#ifdef WCSTRIG_MACRO</span>
<a name="l00178"></a>00178 <span class="preprocessor"></span>
<a name="l00179"></a>00179 <span class="comment">/* Macro implementation of the trigd functions. */</span>
<a name="l00180"></a>00180 <span class="preprocessor">#include "<a class="code" href="wcsmath_8h.html">wcsmath.h</a>"</span>
<a name="l00181"></a>00181 
<a name="l00182"></a>00182 <span class="preprocessor">#define cosd(X) cos((X)*D2R)</span>
<a name="l00183"></a>00183 <span class="preprocessor"></span><span class="preprocessor">#define sind(X) sin((X)*D2R)</span>
<a name="l00184"></a>00184 <span class="preprocessor"></span><span class="preprocessor">#define tand(X) tan((X)*D2R)</span>
<a name="l00185"></a>00185 <span class="preprocessor"></span><span class="preprocessor">#define acosd(X) acos(X)*R2D</span>
<a name="l00186"></a>00186 <span class="preprocessor"></span><span class="preprocessor">#define asind(X) asin(X)*R2D</span>
<a name="l00187"></a>00187 <span class="preprocessor"></span><span class="preprocessor">#define atand(X) atan(X)*R2D</span>
<a name="l00188"></a>00188 <span class="preprocessor"></span><span class="preprocessor">#define atan2d(Y,X) atan2(Y,X)*R2D</span>
<a name="l00189"></a>00189 <span class="preprocessor"></span><span class="preprocessor">#ifdef HAVE_SINCOS</span>
<a name="l00190"></a>00190 <span class="preprocessor"></span><span class="preprocessor">  #define sincosd(X,S,C) sincos((X)*D2R,(S),(C))</span>
<a name="l00191"></a>00191 <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l00192"></a>00192 <span class="preprocessor"></span><span class="preprocessor">  #define sincosd(X,S,C) *(S) = sin((X)*D2R); *(C) = cos((X)*D2R);</span>
<a name="l00193"></a>00193 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00194"></a>00194 <span class="preprocessor"></span>
<a name="l00195"></a>00195 <span class="preprocessor">#else</span>
<a name="l00196"></a>00196 <span class="preprocessor"></span>
<a name="l00197"></a>00197 <span class="comment">/* Use WCSLIB wrappers or native trigd functions. */</span>
<a name="l00198"></a>00198 
<a name="l00199"></a>00199 <span class="keywordtype">double</span> <a class="code" href="wcstrig_8h.html#42ae26d339f06986ca7f12ba02abcd32" title="Cosine of an angle in degrees.">cosd</a>(<span class="keywordtype">double</span> angle);
<a name="l00200"></a>00200 <span class="keywordtype">double</span> <a class="code" href="wcstrig_8h.html#2b83ceb814c90ebfa042a26d884ac159" title="Sine of an angle in degrees.">sind</a>(<span class="keywordtype">double</span> angle);
<a name="l00201"></a>00201 <span class="keywordtype">void</span> <a class="code" href="wcstrig_8h.html#ee847369fa66666bfe1e72e7872499b6" title="Sine and cosine of an angle in degrees.">sincosd</a>(<span class="keywordtype">double</span> angle, <span class="keywordtype">double</span> *sin, <span class="keywordtype">double</span> *cos);
<a name="l00202"></a>00202 <span class="keywordtype">double</span> <a class="code" href="wcstrig_8h.html#666bbac788099d5bc6d88e685f2713a3" title="Tangent of an angle in degrees.">tand</a>(<span class="keywordtype">double</span> angle);
<a name="l00203"></a>00203 <span class="keywordtype">double</span> <a class="code" href="wcstrig_8h.html#b4e520246350c50275f899c9b97c68d3" title="Inverse cosine, returning angle in degrees.">acosd</a>(<span class="keywordtype">double</span> x);
<a name="l00204"></a>00204 <span class="keywordtype">double</span> <a class="code" href="wcstrig_8h.html#7a2ae59365f19adb4af90f4df3074e50" title="Inverse sine, returning angle in degrees.">asind</a>(<span class="keywordtype">double</span> y);
<a name="l00205"></a>00205 <span class="keywordtype">double</span> <a class="code" href="wcstrig_8h.html#872bdab5707df527946ecbad24ee03ab" title="Inverse tangent, returning angle in degrees.">atand</a>(<span class="keywordtype">double</span> s);
<a name="l00206"></a>00206 <span class="keywordtype">double</span> <a class="code" href="wcstrig_8h.html#d029e98723548c7236e805c7b48c7c90" title="Polar angle of , in degrees.">atan2d</a>(<span class="keywordtype">double</span> y, <span class="keywordtype">double</span> x);
<a name="l00207"></a>00207 
<a name="l00208"></a>00208 <span class="comment">/* Domain tolerance for asin() and acos() functions. */</span>
<a name="l00209"></a><a class="code" href="wcstrig_8h.html#dd1b8466211aa6885bed0619f32b35c7">00209</a> <span class="preprocessor">#define WCSTRIG_TOL 1e-10</span>
<a name="l00210"></a>00210 <span class="preprocessor"></span>
<a name="l00211"></a>00211 <span class="preprocessor">#endif </span><span class="comment">/* WCSTRIG_MACRO */</span>
<a name="l00212"></a>00212 
<a name="l00213"></a>00213 
<a name="l00214"></a>00214 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00215"></a>00215 <span class="preprocessor"></span>}
<a name="l00216"></a>00216 <span class="preprocessor">#endif</span>
<a name="l00217"></a>00217 <span class="preprocessor"></span>
<a name="l00218"></a>00218 <span class="preprocessor">#endif </span><span class="comment">/* WCSLIB_WCSTRIG */</span>
</pre></div></div>
<hr size="1"><address style="text-align: right;"><small>Generated on Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
</body>
</html>