/usr/share/doc/geographiclib/html/EllipticFunction_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 | <!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: EllipticFunction.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 Page</span></a></li>
<li><a href="pages.html"><span>Related 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 List</span></a></li>
<li><a href="globals.html"><span>File 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>EllipticFunction.hpp</h1> </div>
</div>
<div class="contents">
<a href="EllipticFunction_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 EllipticFunction.hpp</span>
<a name="l00003"></a>00003 <span class="comment"> * \brief Header for GeographicLib::EllipticFunction 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) <charles@karney.com></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_ELLIPTICFUNCTION_HPP)</span>
<a name="l00011"></a><a class="code" href="EllipticFunction_8hpp.html#a94cb49e5d48fa1a0399e4303f1ad162a">00011</a> <span class="preprocessor"></span><span class="preprocessor">#define GEOGRAPHICLIB_ELLIPTICFUNCTION_HPP "$Id: EllipticFunction.hpp 6866 2010-09-11 02:15:29Z karney $"</span>
<a name="l00012"></a>00012 <span class="preprocessor"></span>
<a name="l00013"></a>00013 <span class="preprocessor">#include "<a class="code" href="Constants_8hpp.html" title="Header for GeographicLib::Constants class.">GeographicLib/Constants.hpp</a>"</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 Elliptic functions needed for TransverseMercatorExact</span>
<a name="l00019"></a>00019 <span class="comment"> *</span>
<a name="l00020"></a>00020 <span class="comment"> * This provides the subset of elliptic functions needed for</span>
<a name="l00021"></a>00021 <span class="comment"> * TransverseMercatorExact. For a given ellipsoid, only parameters \e</span>
<a name="l00022"></a>00022 <span class="comment"> * e<sup>2</sup> and 1 - \e e<sup>2</sup> are needed. This class taken the</span>
<a name="l00023"></a>00023 <span class="comment"> * parameter as a constructor parameters and caches the values of the</span>
<a name="l00024"></a>00024 <span class="comment"> * required complete integrals. A method is provided for Jacobi elliptic</span>
<a name="l00025"></a>00025 <span class="comment"> * functions and for the incomplete elliptic integral of the second kind in</span>
<a name="l00026"></a>00026 <span class="comment"> * terms of the amplitude.</span>
<a name="l00027"></a>00027 <span class="comment"> *</span>
<a name="l00028"></a>00028 <span class="comment"> * The computation of the elliptic integrals uses the algorithms given in</span>
<a name="l00029"></a>00029 <span class="comment"> * - B. C. Carlson,</span>
<a name="l00030"></a>00030 <span class="comment"> * <a href="http://dx.doi.org/10.1007/BF02198293"> Computation of elliptic</span>
<a name="l00031"></a>00031 <span class="comment"> * integrals</a>, Numerical Algorithms 10, 13&ndash;26 (1995).</span>
<a name="l00032"></a>00032 <span class="comment"> * .</span>
<a name="l00033"></a>00033 <span class="comment"> * The computation of the Jacobi elliptic functions uses the algorithm given</span>
<a name="l00034"></a>00034 <span class="comment"> * in</span>
<a name="l00035"></a>00035 <span class="comment"> * - R. Bulirsch,</span>
<a name="l00036"></a>00036 <span class="comment"> * <a href="http://dx.doi.org/10.1007/BF01397975"> Numerical Calculation of</span>
<a name="l00037"></a>00037 <span class="comment"> * Elliptic Integrals and Elliptic Functions</a>, Numericshe Mathematik 7,</span>
<a name="l00038"></a>00038 <span class="comment"> * 78&ndash;90 (1965).</span>
<a name="l00039"></a>00039 <span class="comment"> * .</span>
<a name="l00040"></a>00040 <span class="comment"> * The notation follows Abramowitz and Stegun, Chapters 16 and 17.</span>
<a name="l00041"></a>00041 <span class="comment"> **********************************************************************/</span>
<a name="l00042"></a><a class="code" href="classGeographicLib_1_1EllipticFunction.html">00042</a> <span class="keyword">class </span><a class="code" href="classGeographicLib_1_1EllipticFunction.html" title="Elliptic functions needed for TransverseMercatorExact.">EllipticFunction</a> {
<a name="l00043"></a>00043 <span class="keyword">private</span>:
<a name="l00044"></a>00044 <span class="keyword">typedef</span> <a class="code" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> real;
<a name="l00045"></a>00045 <span class="keyword">static</span> <span class="keyword">const</span> real tol, tolRF, tolRD, tolRG0, tolJAC, tolJAC1;
<a name="l00046"></a>00046 <span class="keyword">enum</span> { num = 10 }; <span class="comment">// Max depth required for sncndn. Probably 5 is enough.</span>
<a name="l00047"></a>00047 <span class="keyword">static</span> real RF(real x, real y, real z) <span class="keywordflow">throw</span>();
<a name="l00048"></a>00048 <span class="keyword">static</span> real RD(real x, real y, real z) <span class="keywordflow">throw</span>();
<a name="l00049"></a>00049 <span class="keyword">static</span> real RG0(real x, real y) <span class="keywordflow">throw</span>();
<a name="l00050"></a>00050 <span class="keyword">const</span> real _m, _m1;
<a name="l00051"></a>00051 <span class="keyword">mutable</span> <span class="keywordtype">bool</span> _init;
<a name="l00052"></a>00052 <span class="keyword">mutable</span> real _kc, _ec, _kec;
<a name="l00053"></a>00053 <span class="keywordtype">bool</span> Init() <span class="keyword">const</span> <span class="keywordflow">throw</span>();
<a name="l00054"></a>00054 <span class="keyword">public</span>:
<a name="l00055"></a>00055 <span class="comment"></span>
<a name="l00056"></a>00056 <span class="comment"> /**</span>
<a name="l00057"></a>00057 <span class="comment"> * Constructor.</span>
<a name="l00058"></a>00058 <span class="comment"> *</span>
<a name="l00059"></a>00059 <span class="comment"> * @param[in] m the parameter which must lie in [0, 1]. (No checking</span>
<a name="l00060"></a>00060 <span class="comment"> * is done.)</span>
<a name="l00061"></a>00061 <span class="comment"> **********************************************************************/</span>
<a name="l00062"></a>00062 <span class="keyword">explicit</span> <a class="code" href="classGeographicLib_1_1EllipticFunction.html#ada122111b55eb0ab9c7b9fafb0a4b1e6">EllipticFunction</a>(real <a class="code" href="classGeographicLib_1_1EllipticFunction.html#aba29c348874db7880ab7b1065f03ff7c">m</a>) <span class="keywordflow">throw</span>();
<a name="l00063"></a>00063 <span class="comment"></span>
<a name="l00064"></a>00064 <span class="comment"> /**</span>
<a name="l00065"></a>00065 <span class="comment"> * @return the parameter \e m.</span>
<a name="l00066"></a>00066 <span class="comment"> **********************************************************************/</span>
<a name="l00067"></a><a class="code" href="classGeographicLib_1_1EllipticFunction.html#aba29c348874db7880ab7b1065f03ff7c">00067</a> <a class="code" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> <a class="code" href="classGeographicLib_1_1EllipticFunction.html#aba29c348874db7880ab7b1065f03ff7c">m</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _m; }
<a name="l00068"></a>00068 <span class="comment"></span>
<a name="l00069"></a>00069 <span class="comment"> /**</span>
<a name="l00070"></a>00070 <span class="comment"> * @return the complementary parameter \e m' = (1 - \e m).</span>
<a name="l00071"></a>00071 <span class="comment"> **********************************************************************/</span>
<a name="l00072"></a><a class="code" href="classGeographicLib_1_1EllipticFunction.html#ad1fbe801f6731285462d35d874a149ba">00072</a> <a class="code" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> <a class="code" href="classGeographicLib_1_1EllipticFunction.html#ad1fbe801f6731285462d35d874a149ba">m1</a>() <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> _m1; }
<a name="l00073"></a>00073 <span class="comment"></span>
<a name="l00074"></a>00074 <span class="comment"> /**</span>
<a name="l00075"></a>00075 <span class="comment"> * @return the complete integral of first kind, \e K(\e m).</span>
<a name="l00076"></a>00076 <span class="comment"> **********************************************************************/</span>
<a name="l00077"></a><a class="code" href="classGeographicLib_1_1EllipticFunction.html#a6c6c8029d93946b32184ee964525938c">00077</a> <a class="code" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> <a class="code" href="classGeographicLib_1_1EllipticFunction.html#a6c6c8029d93946b32184ee964525938c">K</a>() <span class="keyword">const</span> throw() { _init || Init(); <span class="keywordflow">return</span> _kc; }
<a name="l00078"></a>00078 <span class="comment"></span>
<a name="l00079"></a>00079 <span class="comment"> /**</span>
<a name="l00080"></a>00080 <span class="comment"> * @return the complete integral of second kind, \e E(\e m).</span>
<a name="l00081"></a>00081 <span class="comment"> **********************************************************************/</span>
<a name="l00082"></a><a class="code" href="classGeographicLib_1_1EllipticFunction.html#a184174d29953891896b41c597c34eb9a">00082</a> <a class="code" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> <a class="code" href="classGeographicLib_1_1EllipticFunction.html#a184174d29953891896b41c597c34eb9a">E</a>() <span class="keyword">const</span> throw() { _init || Init(); <span class="keywordflow">return</span> _ec; }
<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"> * @return the difference \e K(\e m) - \e E(\e m) (which can be computed</span>
<a name="l00086"></a>00086 <span class="comment"> * directly).</span>
<a name="l00087"></a>00087 <span class="comment"> **********************************************************************/</span>
<a name="l00088"></a><a class="code" href="classGeographicLib_1_1EllipticFunction.html#a12bcdf2c3fc7bcb165318822171328f7">00088</a> <a class="code" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> <a class="code" href="classGeographicLib_1_1EllipticFunction.html#a12bcdf2c3fc7bcb165318822171328f7">KE</a>() <span class="keyword">const</span> throw() { _init || Init(); <span class="keywordflow">return</span> _kec; }
<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"> * The Jacobi elliptic functions.</span>
<a name="l00092"></a>00092 <span class="comment"> *</span>
<a name="l00093"></a>00093 <span class="comment"> * @param[in] x the argument.</span>
<a name="l00094"></a>00094 <span class="comment"> * @param[out] sn sn(<i>x</i>|<i>m</i>).</span>
<a name="l00095"></a>00095 <span class="comment"> * @param[out] cn cn(<i>x</i>|<i>m</i>).</span>
<a name="l00096"></a>00096 <span class="comment"> * @param[out] dn dn(<i>x</i>|<i>m</i>).</span>
<a name="l00097"></a>00097 <span class="comment"> **********************************************************************/</span>
<a name="l00098"></a>00098 <span class="keywordtype">void</span> <a class="code" href="classGeographicLib_1_1EllipticFunction.html#a0b8d63970c4276503d03d4133ee6c321">sncndn</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> x, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& sn, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& cn, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a>& dn) <span class="keyword">const</span> <span class="keywordflow">throw</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"> * The incomplete integral of the second kind.</span>
<a name="l00102"></a>00102 <span class="comment"> *</span>
<a name="l00103"></a>00103 <span class="comment"> * @param[in] phi</span>
<a name="l00104"></a>00104 <span class="comment"> * @return int sqrt(1 - \e m sin<sup>2</sup>(\e phi)) \e dphi.</span>
<a name="l00105"></a>00105 <span class="comment"> **********************************************************************/</span>
<a name="l00106"></a>00106 <a class="code" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> <a class="code" href="classGeographicLib_1_1EllipticFunction.html#a184174d29953891896b41c597c34eb9a">E</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> phi) <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"> * The incomplete integral of the second kind in terms of Jacobi elliptic</span>
<a name="l00110"></a>00110 <span class="comment"> * functions</span>
<a name="l00111"></a>00111 <span class="comment"> *</span>
<a name="l00112"></a>00112 <span class="comment"> * @param[in] sn</span>
<a name="l00113"></a>00113 <span class="comment"> * @param[in] cn</span>
<a name="l00114"></a>00114 <span class="comment"> * @param[in] dn</span>
<a name="l00115"></a>00115 <span class="comment"> * @return int dn(\e w)<sup>2</sup> \e dw (A+S 17.2.10).</span>
<a name="l00116"></a>00116 <span class="comment"> *</span>
<a name="l00117"></a>00117 <span class="comment"> * Instead of specifying the ampltiude \e phi, we provide \e sn = sin(\e</span>
<a name="l00118"></a>00118 <span class="comment"> * phi), \e cn = cos(\e phi), \e dn = sqrt(1 - \e m sin<sup>2</sup>(\e</span>
<a name="l00119"></a>00119 <span class="comment"> * phi)).</span>
<a name="l00120"></a>00120 <span class="comment"> **********************************************************************/</span>
<a name="l00121"></a>00121 <a class="code" href="classGeographicLib_1_1Math.html#aeee4778d7cf2f9fb9648efe4911da59d">Math::real</a> <a class="code" href="classGeographicLib_1_1EllipticFunction.html#a184174d29953891896b41c597c34eb9a">E</a>(<a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> sn, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> cn, <a class="code" href="Geod_8cpp.html#a5caf95d46b184d9ca1d3764b3781b3c9">real</a> dn) <span class="keyword">const</span> <span class="keywordflow">throw</span>();
<a name="l00122"></a>00122 };
<a name="l00123"></a>00123
<a name="l00124"></a>00124
<a name="l00125"></a>00125 } <span class="comment">// namespace GeographicLib</span>
<a name="l00126"></a>00126
<a name="l00127"></a>00127 <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
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.1 </small></address>
</body>
</html>
|