1 /**
2  * \file NETGeographicLib/EllipticFunction.cpp
3  * \brief Implementation for NETGeographicLib::EllipticFunction class
4  *
5  * NETGeographicLib is copyright (c) Scott Heiman (2013)
6  * GeographicLib is Copyright (c) Charles Karney (2010-2012)
7  * <charles@karney.com> and licensed under the MIT/X11 License.
8  * For more information, see
9  * https://geographiclib.sourceforge.io/
10  **********************************************************************/
11 #include "stdafx.h"
12 #include "GeographicLib/EllipticFunction.hpp"
13 #include "EllipticFunction.h"
14 #include "NETGeographicLib.h"
15 
16 using namespace NETGeographicLib;
17 
18 const char BADALLOC[] = "Failed to allocate memory for the GeographicLib::EllipticFunction.";
19 
20 //*****************************************************************************
EllipticFunction(double k2,double alpha2)21 EllipticFunction::EllipticFunction(double k2, double alpha2)
22 {
23     try
24     {
25         m_pEllipticFunction = new GeographicLib::EllipticFunction( k2, alpha2 );
26     }
27     catch ( std::bad_alloc )
28     {
29         throw gcnew GeographicErr( BADALLOC );
30     }
31 }
32 
33 //*****************************************************************************
EllipticFunction(double k2,double alpha2,double kp2,double alphap2)34 EllipticFunction::EllipticFunction(double k2, double alpha2, double kp2, double alphap2)
35 {
36     try
37     {
38         m_pEllipticFunction = new GeographicLib::EllipticFunction( k2, alpha2, kp2, alphap2 );
39     }
40     catch ( std::bad_alloc err )
41     {
42         throw gcnew GeographicErr( BADALLOC );
43     }
44 }
45 
46 //*****************************************************************************
47 EllipticFunction::!EllipticFunction()
48 {
49     if ( m_pEllipticFunction != NULL )
50     {
51         delete m_pEllipticFunction;
52         m_pEllipticFunction = NULL;
53     }
54 }
55 
56 //*****************************************************************************
Reset(double k2,double alpha2)57 void EllipticFunction::Reset(double k2, double alpha2 )
58 {
59     m_pEllipticFunction->Reset( k2, alpha2 );
60 }
61 
62 //*****************************************************************************
Reset(double k2,double alpha2,double kp2,double alphap2)63 void EllipticFunction::Reset(double k2, double alpha2, double kp2, double alphap2)
64 {
65     m_pEllipticFunction->Reset( k2, alpha2, kp2, alphap2 );
66 }
67 
68 //*****************************************************************************
K()69 double EllipticFunction::K()
70 {
71     return m_pEllipticFunction->K();
72 }
73 
74 //*****************************************************************************
E()75 double EllipticFunction::E()
76 {
77     return m_pEllipticFunction->E();
78 }
79 
80 //*****************************************************************************
D()81 double EllipticFunction::D()
82 {
83     return m_pEllipticFunction->D();
84 }
85 
86 //*****************************************************************************
KE()87 double EllipticFunction::KE()
88 {
89     return m_pEllipticFunction->KE();
90 }
91 
92 //*****************************************************************************
Pi()93 double EllipticFunction::Pi()
94 {
95     return m_pEllipticFunction->Pi();
96 }
97 
98 //*****************************************************************************
G()99 double EllipticFunction::G()
100 {
101     return m_pEllipticFunction->G();
102 }
103 
104 //*****************************************************************************
H()105 double EllipticFunction::H()
106 {
107     return m_pEllipticFunction->H();
108 }
109 
110 //*****************************************************************************
F(double phi)111 double EllipticFunction::F(double phi)
112 {
113     return m_pEllipticFunction->F( phi );
114 }
115 
116 //*****************************************************************************
E(double phi)117 double EllipticFunction::E(double phi)
118 {
119     return m_pEllipticFunction->E( phi );
120 }
121 
122 //*****************************************************************************
Ed(double ang)123 double EllipticFunction::Ed(double ang)
124 {
125     return m_pEllipticFunction->Ed(ang);
126 }
127 
128 //*****************************************************************************
Einv(double x)129 double EllipticFunction::Einv(double x)
130 {
131     return m_pEllipticFunction->Einv(x);
132 }
133 
134 //*****************************************************************************
Pi(double phi)135 double EllipticFunction::Pi(double phi)
136 {
137     return m_pEllipticFunction->Pi(phi);
138 }
139 
140 //*****************************************************************************
D(double phi)141 double EllipticFunction::D(double phi)
142 {
143     return m_pEllipticFunction->D(phi);
144 }
145 
146 //*****************************************************************************
G(double phi)147 double EllipticFunction::G(double phi)
148 {
149     return m_pEllipticFunction->G(phi);
150 }
151 
152 //*****************************************************************************
H(double phi)153 double EllipticFunction::H(double phi)
154 {
155     return m_pEllipticFunction->H(phi);
156 }
157 
158 //*****************************************************************************
F(double sn,double cn,double dn)159 double EllipticFunction::F(double sn, double cn, double dn)
160 {
161     return m_pEllipticFunction->F( sn, cn, dn );
162 }
163 
164 //*****************************************************************************
E(double sn,double cn,double dn)165 double EllipticFunction::E(double sn, double cn, double dn)
166 {
167     return m_pEllipticFunction->E( sn, cn, dn );
168 }
169 
170 //*****************************************************************************
Pi(double sn,double cn,double dn)171 double EllipticFunction::Pi(double sn, double cn, double dn)
172 {
173     return m_pEllipticFunction->Pi( sn, cn, dn );
174 }
175 
176 //*****************************************************************************
D(double sn,double cn,double dn)177 double EllipticFunction::D(double sn, double cn, double dn)
178 {
179     return m_pEllipticFunction->D( sn, cn, dn );
180 }
181 
182 //*****************************************************************************
G(double sn,double cn,double dn)183 double EllipticFunction::G(double sn, double cn, double dn)
184 {
185     return m_pEllipticFunction->G( sn, cn, dn );
186 }
187 
188 //*****************************************************************************
H(double sn,double cn,double dn)189 double EllipticFunction::H(double sn, double cn, double dn)
190 {
191     return m_pEllipticFunction->H( sn, cn, dn );
192 }
193 
194 //*****************************************************************************
deltaF(double sn,double cn,double dn)195 double EllipticFunction::deltaF(double sn, double cn, double dn)
196 {
197     return m_pEllipticFunction->deltaF( sn, cn, dn );
198 }
199 
200 //*****************************************************************************
deltaE(double sn,double cn,double dn)201 double EllipticFunction::deltaE(double sn, double cn, double dn)
202 {
203     return m_pEllipticFunction->deltaE( sn, cn, dn );
204 }
205 
206 //*****************************************************************************
deltaEinv(double stau,double ctau)207 double EllipticFunction::deltaEinv(double stau, double ctau)
208 {
209     return m_pEllipticFunction->deltaEinv( stau, ctau );
210 }
211 
212 //*****************************************************************************
deltaPi(double sn,double cn,double dn)213 double EllipticFunction::deltaPi(double sn, double cn, double dn)
214 {
215     return m_pEllipticFunction->deltaPi( sn, cn, dn );
216 }
217 
218 //*****************************************************************************
deltaD(double sn,double cn,double dn)219 double EllipticFunction::deltaD(double sn, double cn, double dn)
220 {
221     return m_pEllipticFunction->deltaD( sn, cn, dn );
222 }
223 
224 //*****************************************************************************
deltaG(double sn,double cn,double dn)225 double EllipticFunction::deltaG(double sn, double cn, double dn)
226 {
227     return m_pEllipticFunction->deltaG( sn, cn, dn );
228 }
229 
230 //*****************************************************************************
deltaH(double sn,double cn,double dn)231 double EllipticFunction::deltaH(double sn, double cn, double dn)
232 {
233     return m_pEllipticFunction->deltaH( sn, cn, dn );
234 }
235 
236 //*****************************************************************************
237 void EllipticFunction::sncndn(double x,
238     [System::Runtime::InteropServices::Out] double% sn,
239     [System::Runtime::InteropServices::Out] double% cn,
240     [System::Runtime::InteropServices::Out] double% dn)
241 {
242     double lsn, lcn, ldn;
243     m_pEllipticFunction->sncndn( x, lsn, lcn, ldn );
244     sn = lsn;
245     cn = lcn;
246     dn = ldn;
247 }
248 
249 //*****************************************************************************
Delta(double sn,double cn)250 double EllipticFunction::Delta(double sn, double cn)
251 {
252     return m_pEllipticFunction->Delta( sn, cn );
253 }
254 
255 //*****************************************************************************
RF(double x,double y,double z)256 double EllipticFunction::RF(double x, double y, double z)
257 {
258     return GeographicLib::EllipticFunction::RF( x, y, z );
259 }
260 
261 //*****************************************************************************
RF(double x,double y)262 double EllipticFunction::RF(double x, double y)
263 {
264     return GeographicLib::EllipticFunction::RF( x, y );
265 }
266 
267 //*****************************************************************************
RC(double x,double y)268 double EllipticFunction::RC(double x, double y)
269 {
270     return GeographicLib::EllipticFunction::RC( x, y );
271 }
272 
273 //*****************************************************************************
RG(double x,double y,double z)274 double EllipticFunction::RG(double x, double y, double z)
275 {
276     return GeographicLib::EllipticFunction::RG( x, y, z );
277 }
278 
279 //*****************************************************************************
RG(double x,double y)280 double EllipticFunction::RG(double x, double y)
281 {
282     return GeographicLib::EllipticFunction::RG( x, y );
283 }
284 
285 //*****************************************************************************
RJ(double x,double y,double z,double p)286 double EllipticFunction::RJ(double x, double y, double z, double p)
287 {
288     return GeographicLib::EllipticFunction::RJ( x, y, z, p );
289 }
290 
291 //*****************************************************************************
RD(double x,double y,double z)292 double EllipticFunction::RD(double x, double y, double z)
293 {
294     return GeographicLib::EllipticFunction::RD( x, y, z );
295 }
296 
297 //*****************************************************************************
get()298 double EllipticFunction::k2::get()
299 { return m_pEllipticFunction->k2(); }
300 
301 //*****************************************************************************
get()302 double EllipticFunction::kp2::get()
303 { return m_pEllipticFunction->kp2(); }
304 
305 //*****************************************************************************
get()306 double EllipticFunction::alpha2::get()
307 { return m_pEllipticFunction->alpha2(); }
308 
309 //*****************************************************************************
get()310 double EllipticFunction::alphap2::get()
311 { return m_pEllipticFunction->alpha2(); }
312