This file is indexed.

/usr/share/doc/geographiclib/html/PolarStereographic_8hpp_source.html is in geographiclib-tools 1.8-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>GeographicLib: PolarStereographic.hpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.1 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul class="tablist">
      <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="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li><a href="dirs.html"><span>Directories</span></a></li>
    </ul>
  </div>
  <div class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
    </ul>
  </div>
  <div class="navpath">
    <ul>
      <li><a class="el" href="dir_f624aa4962e92581e36e10adf24cfc84.html">include</a>      </li>
      <li><a class="el" href="dir_0f324d7550514966066ff24c6d4b8a42.html">GeographicLib</a>      </li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="headertitle">
<h1>PolarStereographic.hpp</h1>  </div>
</div>
<div class="contents">
<a href="PolarStereographic_8hpp.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"> * \file PolarStereographic.hpp</span>
<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::PolarStereographic class</span>
<a name="l00004"></a>00004 <span class="comment"> *</span>
<a name="l00005"></a>00005 <span class="comment"> * Copyright (c) Charles Karney (2008, 2009, 2010) &lt;charles@karney.com&gt;</span>
<a name="l00006"></a>00006 <span class="comment"> * and licensed under the LGPL.  For more information, see</span>
<a name="l00007"></a>00007 <span class="comment"> * http://geographiclib.sourceforge.net/</span>
<a name="l00008"></a>00008 <span class="comment"> **********************************************************************/</span>
<a name="l00009"></a>00009 
<a name="l00010"></a>00010 <span class="preprocessor">#if !defined(GEOGRAPHICLIB_POLARSTEREOGRAPHIC_HPP)</span>
<a name="l00011"></a><a class="code" href="PolarStereographic_8hpp.html#a7450566a6ed1475dc10f7c0dc85f5dd9">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_POLARSTEREOGRAPHIC_HPP &quot;$Id: PolarStereographic.hpp 6906 2010-12-02 22:10:56Z karney $&quot;</span>
<a name="l00012"></a>00012 <span class="preprocessor"></span>
<a name="l00013"></a>00013 <span class="preprocessor">#include &quot;<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>&quot;</span>
<a name="l00014"></a>00014 
<a name="l00015"></a>00015 <span class="keyword">namespace </span>GeographicLib {
<a name="l00016"></a>00016 <span class="comment"></span>
<a name="l00017"></a>00017 <span class="comment">  /**</span>
<a name="l00018"></a>00018 <span class="comment">   * \brief Polar Stereographic Projection</span>
<a name="l00019"></a>00019 <span class="comment">   *</span>
<a name="l00020"></a>00020 <span class="comment">   * Implementation taken from the report,</span>
<a name="l00021"></a>00021 <span class="comment">   * - J. P. Snyder,</span>
<a name="l00022"></a>00022 <span class="comment">   *   &lt;a href=&quot;http://pubs.er.usgs.gov/usgspubs/pp/pp1395&quot;&gt; Map Projections: A</span>
<a name="l00023"></a>00023 <span class="comment">   *   Working Manual&lt;/a&gt;, USGS Professional Paper 1395 (1987),</span>
<a name="l00024"></a>00024 <span class="comment">   *   pp. 160&amp;ndash;163.</span>
<a name="l00025"></a>00025 <span class="comment">   *</span>
<a name="l00026"></a>00026 <span class="comment">   * This is a straightforward implementation of the equations in Snyder except</span>
<a name="l00027"></a>00027 <span class="comment">   * that Newton&#39;s method is used to invert the projection.</span>
<a name="l00028"></a>00028 <span class="comment">   **********************************************************************/</span>
<a name="l00029"></a><a class="code" href="classGeographicLib_1_1PolarStereographic.html">00029</a>   <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1PolarStereographic.html" title="Polar Stereographic Projection.">PolarStereographic</a> {
<a name="l00030"></a>00030   <span class="keyword">private</span>:
<a name="l00031"></a>00031     <span class="keyword">typedef</span> <a class="code" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> real;
<a name="l00032"></a>00032     <span class="comment">// _Cx used to be _C but g++ 3.4 has a macro of that name</span>
<a name="l00033"></a>00033     <span class="keyword">const</span> real _a, _r, _f, _e2, _e, _e2m, _Cx, _c;
<a name="l00034"></a>00034     real _k0;
<a name="l00035"></a>00035     <span class="keyword">static</span> <span class="keyword">const</span> real tol, overflow;
<a name="l00036"></a>00036     <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> numit = 5;
<a name="l00037"></a>00037     <span class="keyword">static</span> <span class="keyword">inline</span> real sq(real x) <span class="keywordflow">throw</span>() { <span class="keywordflow">return</span> x * x; }
<a name="l00038"></a>00038     <span class="comment">// Return e * atanh(e * x) for f &gt;= 0, else return</span>
<a name="l00039"></a>00039     <span class="comment">// - sqrt(-e2) * atan( sqrt(-e2) * x) for f &lt; 0</span>
<a name="l00040"></a>00040     <span class="keyword">inline</span> real eatanhe(real x) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
<a name="l00041"></a>00041       <span class="keywordflow">return</span> _f &gt;= 0 ? _e * <a class="code" href="classGeographicLib_1_1Math.html#a62ae372f983cb076561204be8de263bd">Math::atanh</a>(_e * x) : - _e * std::atan(_e * x);
<a name="l00042"></a>00042     }
<a name="l00043"></a>00043   <span class="keyword">public</span>:
<a name="l00044"></a>00044 <span class="comment"></span>
<a name="l00045"></a>00045 <span class="comment">    /**</span>
<a name="l00046"></a>00046 <span class="comment">     * Constructor for a ellipsoid with</span>
<a name="l00047"></a>00047 <span class="comment">     *</span>
<a name="l00048"></a>00048 <span class="comment">     * @param[in] a equatorial radius (meters)</span>
<a name="l00049"></a>00049 <span class="comment">     * @param[in] r reciprocal flattening.  Setting \e r = 0 implies \e r = inf</span>
<a name="l00050"></a>00050 <span class="comment">     *   or flattening = 0 (i.e., a sphere).  Negative \e r indicates a prolate</span>
<a name="l00051"></a>00051 <span class="comment">     *   ellipsoid.</span>
<a name="l00052"></a>00052 <span class="comment">     * @param[in] k0 central scale factor.</span>
<a name="l00053"></a>00053 <span class="comment">     *</span>
<a name="l00054"></a>00054 <span class="comment">     * An exception is thrown if either of the axes of the ellipsoid is</span>
<a name="l00055"></a>00055 <span class="comment">     * not positive \e a or if \e k0 is not positive.</span>
<a name="l00056"></a>00056 <span class="comment">     **********************************************************************/</span>
<a name="l00057"></a>00057     <a class="code" href="classGeographicLib_1_1PolarStereographic.html#a56558071847ee7d71674ac29a23ec653">PolarStereographic</a>(real a, real r, real k0);
<a name="l00058"></a>00058 <span class="comment"></span>
<a name="l00059"></a>00059 <span class="comment">    /**</span>
<a name="l00060"></a>00060 <span class="comment">     * Set the scale for the projection.</span>
<a name="l00061"></a>00061 <span class="comment">     *</span>
<a name="l00062"></a>00062 <span class="comment">     * @param[in] lat (degrees) assuming \e northp = true.</span>
<a name="l00063"></a>00063 <span class="comment">     * @param[in] k scale at latitude \e lat (default 1).</span>
<a name="l00064"></a>00064 <span class="comment">     *</span>
<a name="l00065"></a>00065 <span class="comment">     * This allows a &quot;latitude of true scale&quot; to be specified.  An exception is</span>
<a name="l00066"></a>00066 <span class="comment">     * thrown if \e k is not positive or if \e lat is not in the range (-90,</span>
<a name="l00067"></a>00067 <span class="comment">     * 90].</span>
<a name="l00068"></a>00068 <span class="comment">     **********************************************************************/</span>
<a name="l00069"></a>00069     <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1PolarStereographic.html#a3f957214eb1d1248277a680e4c4ceed5">SetScale</a>(real lat, real k = real(1));
<a name="l00070"></a>00070 <span class="comment"></span>
<a name="l00071"></a>00071 <span class="comment">    /**</span>
<a name="l00072"></a>00072 <span class="comment">     * Forward projection, from geographic to polar stereographic.</span>
<a name="l00073"></a>00073 <span class="comment">     *</span>
<a name="l00074"></a>00074 <span class="comment">     * @param[in] northp the pole which is the center of projection (true means</span>
<a name="l00075"></a>00075 <span class="comment">     *   north, false means south).</span>
<a name="l00076"></a>00076 <span class="comment">     * @param[in] lat latitude of point (degrees).</span>
<a name="l00077"></a>00077 <span class="comment">     * @param[in] lon longitude of point (degrees).</span>
<a name="l00078"></a>00078 <span class="comment">     * @param[out] x easting of point (meters).</span>
<a name="l00079"></a>00079 <span class="comment">     * @param[out] y northing of point (meters).</span>
<a name="l00080"></a>00080 <span class="comment">     * @param[out] gamma meridian convergence at point (degrees).</span>
<a name="l00081"></a>00081 <span class="comment">     * @param[out] k scale of projection at point.</span>
<a name="l00082"></a>00082 <span class="comment">     *</span>
<a name="l00083"></a>00083 <span class="comment">     * No false easting or northing is added.  \e lat should be in the range</span>
<a name="l00084"></a>00084 <span class="comment">     * (-90, 90] for \e northp = true and in the range [-90, 90) for \e northp</span>
<a name="l00085"></a>00085 <span class="comment">     * = false; \e lon should be in the range [-180, 360].</span>
<a name="l00086"></a>00086 <span class="comment">     **********************************************************************/</span>
<a name="l00087"></a>00087     <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1PolarStereographic.html#a30ef1a1f906ee389e2a5f7e5fd7d8fa4">Forward</a>(<span class="keywordtype">bool</span> northp, real lat, real lon,
<a name="l00088"></a>00088                  real&amp; x, real&amp; y, real&amp; gamma, real&amp; k) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
<a name="l00089"></a>00089 <span class="comment"></span>
<a name="l00090"></a>00090 <span class="comment">    /**</span>
<a name="l00091"></a>00091 <span class="comment">     * Reverse projection, from polar stereographic to geographic.</span>
<a name="l00092"></a>00092 <span class="comment">     *</span>
<a name="l00093"></a>00093 <span class="comment">     * @param[in] northp the pole which is the center of projection (true means</span>
<a name="l00094"></a>00094 <span class="comment">     *   north, false means south).</span>
<a name="l00095"></a>00095 <span class="comment">     * @param[in] x easting of point (meters).</span>
<a name="l00096"></a>00096 <span class="comment">     * @param[in] y northing of point (meters).</span>
<a name="l00097"></a>00097 <span class="comment">     * @param[out] lat latitude of point (degrees).</span>
<a name="l00098"></a>00098 <span class="comment">     * @param[out] lon longitude of point (degrees).</span>
<a name="l00099"></a>00099 <span class="comment">     * @param[out] gamma meridian convergence at point (degrees).</span>
<a name="l00100"></a>00100 <span class="comment">     * @param[out] k scale of projection at point.</span>
<a name="l00101"></a>00101 <span class="comment">     *</span>
<a name="l00102"></a>00102 <span class="comment">     * No false easting or northing is added.  The value of \e lon returned is</span>
<a name="l00103"></a>00103 <span class="comment">     * in the range [-180, 180).</span>
<a name="l00104"></a>00104 <span class="comment">     **********************************************************************/</span>
<a name="l00105"></a>00105     <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1PolarStereographic.html#a01302b8dba43c57e3c3849f94123a157">Reverse</a>(<span class="keywordtype">bool</span> northp, real x, real y,
<a name="l00106"></a>00106                  real&amp; lat, real&amp; lon, real&amp; gamma, real&amp; k) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
<a name="l00107"></a>00107 <span class="comment"></span>
<a name="l00108"></a>00108 <span class="comment">    /**</span>
<a name="l00109"></a>00109 <span class="comment">     * PolarStereographic::Forward without returning the convergence and scale.</span>
<a name="l00110"></a>00110 <span class="comment">     **********************************************************************/</span>
<a name="l00111"></a><a class="code" href="classGeographicLib_1_1PolarStereographic.html#ac2fe4c9524ec35f8d05336555f96e1b1">00111</a>     <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1PolarStereographic.html#a30ef1a1f906ee389e2a5f7e5fd7d8fa4">Forward</a>(<span class="keywordtype">bool</span> northp, real lat, real lon,
<a name="l00112"></a>00112                  real&amp; x, real&amp; y) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
<a name="l00113"></a>00113       real gamma, k;
<a name="l00114"></a>00114       <a class="code" href="classGeographicLib_1_1PolarStereographic.html#a30ef1a1f906ee389e2a5f7e5fd7d8fa4">Forward</a>(northp, lat, lon, x, y, gamma, k);
<a name="l00115"></a>00115     }
<a name="l00116"></a>00116 <span class="comment"></span>
<a name="l00117"></a>00117 <span class="comment">    /**</span>
<a name="l00118"></a>00118 <span class="comment">     * PolarStereographic::Reverse without returning the convergence and scale.</span>
<a name="l00119"></a>00119 <span class="comment">     **********************************************************************/</span>
<a name="l00120"></a><a class="code" href="classGeographicLib_1_1PolarStereographic.html#a16572cc552eeb24ebf84319cdcd6652e">00120</a>     <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1PolarStereographic.html#a01302b8dba43c57e3c3849f94123a157">Reverse</a>(<span class="keywordtype">bool</span> northp, real x, real y,
<a name="l00121"></a>00121                  real&amp; lat, real&amp; lon) <span class="keyword">const</span> <span class="keywordflow">throw</span>() {
<a name="l00122"></a>00122       real gamma, k;
<a name="l00123"></a>00123       <a class="code" href="classGeographicLib_1_1PolarStereographic.html#a01302b8dba43c57e3c3849f94123a157">Reverse</a>(northp, x, y, lat, lon, gamma, k);
<a name="l00124"></a>00124     }
<a name="l00125"></a>00125 <span class="comment"></span>
<a name="l00126"></a>00126 <span class="comment">    /** \name Inspector functions</span>
<a name="l00127"></a>00127 <span class="comment">     **********************************************************************/</span><span class="comment"></span>
<a name="l00128"></a>00128 <span class="comment">    ///@{</span>
<a name="l00129"></a>00129 <span class="comment"></span><span class="comment">    /**</span>
<a name="l00130"></a>00130 <span class="comment">     * @return \e a the equatorial radius of the ellipsoid (meters).  This is</span>
<a name="l00131"></a>00131 <span class="comment">     *   the value used in the constructor.</span>
<a name="l00132"></a>00132 <span class="comment">     **********************************************************************/</span>
<a name="l00133"></a><a class="code" href="classGeographicLib_1_1PolarStereographic.html#ab1746576356a2409f34d9527064adfdd">00133</a>     <a class="code" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> <a class="code" href="classGeographicLib_1_1PolarStereographic.html#ab1746576356a2409f34d9527064adfdd">MajorRadius</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _a; }
<a name="l00134"></a>00134 <span class="comment"></span>
<a name="l00135"></a>00135 <span class="comment">    /**</span>
<a name="l00136"></a>00136 <span class="comment">     * @return \e r the inverse flattening of the ellipsoid.  This is the</span>
<a name="l00137"></a>00137 <span class="comment">     *   value used in the constructor.  A value of 0 is returned for a sphere</span>
<a name="l00138"></a>00138 <span class="comment">     *   (infinite inverse flattening).</span>
<a name="l00139"></a>00139 <span class="comment">     **********************************************************************/</span>
<a name="l00140"></a><a class="code" href="classGeographicLib_1_1PolarStereographic.html#a969a21c3df38517a081e233ae90c098e">00140</a>     <a class="code" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> <a class="code" href="classGeographicLib_1_1PolarStereographic.html#a969a21c3df38517a081e233ae90c098e">InverseFlattening</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _r; }
<a name="l00141"></a>00141 <span class="comment"></span>
<a name="l00142"></a>00142 <span class="comment">    /**</span>
<a name="l00143"></a>00143 <span class="comment">     * The central scale for the projection.  This is the value of \e k0 used</span>
<a name="l00144"></a>00144 <span class="comment">     * in the constructor and is the scale at the pole unless overridden by</span>
<a name="l00145"></a>00145 <span class="comment">     * PolarStereographic::SetScale.</span>
<a name="l00146"></a>00146 <span class="comment">     **********************************************************************/</span>
<a name="l00147"></a><a class="code" href="classGeographicLib_1_1PolarStereographic.html#ad6f7bd8a35208d91706ac8c258387e6f">00147</a>     <a class="code" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> <a class="code" href="classGeographicLib_1_1PolarStereographic.html#ad6f7bd8a35208d91706ac8c258387e6f">CentralScale</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _k0; }<span class="comment"></span>
<a name="l00148"></a>00148 <span class="comment">    ///@}</span>
<a name="l00149"></a>00149 <span class="comment"></span><span class="comment"></span>
<a name="l00150"></a>00150 <span class="comment">    /**</span>
<a name="l00151"></a>00151 <span class="comment">     * A global instantiation of PolarStereographic with the WGS84 ellipsoid</span>
<a name="l00152"></a>00152 <span class="comment">     * and the UPS scale factor.  However, unlike UPS, no false easting or</span>
<a name="l00153"></a>00153 <span class="comment">     * northing is added.</span>
<a name="l00154"></a>00154 <span class="comment">     **********************************************************************/</span>
<a name="l00155"></a><a class="code" href="classGeographicLib_1_1PolarStereographic.html#a2db6bcb1b59a6ddc6087ee04c64c9825">00155</a>     <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="classGeographicLib_1_1PolarStereographic.html" title="Polar Stereographic Projection.">PolarStereographic</a> <a class="code" href="classGeographicLib_1_1PolarStereographic.html#a2db6bcb1b59a6ddc6087ee04c64c9825">UPS</a>;
<a name="l00156"></a>00156   };
<a name="l00157"></a>00157 
<a name="l00158"></a>00158 } <span class="comment">// namespace GeographicLib</span>
<a name="l00159"></a>00159 
<a name="l00160"></a>00160 <span class="preprocessor">#endif</span>
</pre></div></div>
</div>
<hr class="footer"/><address class="footer"><small>Generated on Tue Feb 22 2011 for GeographicLib by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.1 </small></address>
</body>
</html>