Private Member Functions | Private Attributes | List of all members
NETGeographicLib::EllipticFunction Class Reference

.NET wrapper for GeographicLib::EllipticFunction. More...

#include <EllipticFunction.h>

Public Member Functions

Constructor
 EllipticFunction (double k2, double alpha2)
 
 EllipticFunction (double k2, double alpha2, double kp2, double alphap2)
 
 ~EllipticFunction ()
 
void Reset (double k2, double alpha2)
 
void Reset (double k2, double alpha2, double kp2, double alphap2)
 
Complete elliptic integrals.
double K ()
 
double E ()
 
double D ()
 
double KE ()
 
double Pi ()
 
double G ()
 
double H ()
 
Incomplete elliptic integrals.
double F (double phi)
 
double E (double phi)
 
double Ed (double ang)
 
double Einv (double x)
 
double Pi (double phi)
 
double D (double phi)
 
double G (double phi)
 
double H (double phi)
 
Incomplete integrals in terms of Jacobi elliptic functions.
double F (double sn, double cn, double dn)
 
double E (double sn, double cn, double dn)
 
double Pi (double sn, double cn, double dn)
 
double D (double sn, double cn, double dn)
 
double G (double sn, double cn, double dn)
 
double H (double sn, double cn, double dn)
 
Periodic versions of incomplete elliptic integrals.
double deltaF (double sn, double cn, double dn)
 
double deltaE (double sn, double cn, double dn)
 
double deltaEinv (double stau, double ctau)
 
double deltaPi (double sn, double cn, double dn)
 
double deltaD (double sn, double cn, double dn)
 
double deltaG (double sn, double cn, double dn)
 
double deltaH (double sn, double cn, double dn)
 
Elliptic functions.
void sncndn (double x, [System::Runtime::InteropServices::Out] double% sn, [System::Runtime::InteropServices::Out] double% cn, [System::Runtime::InteropServices::Out] double% dn)
 
double Delta (double sn, double cn)
 

Static Public Member Functions

Symmetric elliptic integrals.
static double RF (double x, double y, double z)
 
static double RF (double x, double y)
 
static double RC (double x, double y)
 
static double RG (double x, double y, double z)
 
static double RG (double x, double y)
 
static double RJ (double x, double y, double z, double p)
 
static double RD (double x, double y, double z)
 

Public Attributes

Inspector functions.
property double k2 { double get()
 
property double kp2 { double get()
 
property double alpha2 { double get()
 
property double alphap2 { double get()
 

Private Member Functions

 !EllipticFunction ()
 

Private Attributes

GeographicLib::EllipticFunctionm_pEllipticFunction
 

Detailed Description

.NET wrapper for GeographicLib::EllipticFunction.

This class allows .NET applications to access GeographicLib::EllipticFunction.

This provides the elliptic functions and integrals needed for Ellipsoid, GeodesicExact, and TransverseMercatorExact. Two categories of function are provided:

In the latter case, an object is constructed giving the modulus k (and optionally the parameter α2). The modulus is always passed as its square k2 which allows k to be pure imaginary (k2 < 0). (Confusingly, Abramowitz and Stegun call m = k2 the "parameter" and n = α2 the "characteristic".)

In geodesic applications, it is convenient to separate the incomplete integrals into secular and periodic components, e.g.,

\[ E(\phi, k) = (2 E(\phi) / \pi) [ \phi + \delta E(\phi, k) ] \]

where δE(φ, k) is an odd periodic function with period π.

The computation of the elliptic integrals uses the algorithms given in

with the additional optimizations given in http://dlmf.nist.gov/19.36.i. The computation of the Jacobi elliptic functions uses the algorithm given in

The notation follows http://dlmf.nist.gov/19 and http://dlmf.nist.gov/22

C# Example:

using System;
namespace example_EllipticFunction
{
class Program
{
static void Main(string[] args)
{
try {
EllipticFunction ell = new EllipticFunction(0.1, 1.0); // parameter m = 0.1
// See Abramowitz and Stegun, table 17.1
Console.WriteLine( String.Format( "{0} {1}", ell.K(), ell.E()));
double phi = 20 * Math.Acos(-1.0) / 180.0;;
// See Abramowitz and Stegun, table 17.6 with
// alpha = asin(sqrt(m)) = 18.43 deg and phi = 20 deg
Console.WriteLine( String.Format("{0} {1}", ell.E(phi),
ell.E(Math.Sin(phi), Math.Cos(phi),
Math.Sqrt(1 - ell.k2 * Math.Sin(phi) * Math.Sin(phi))) ) );
// See Carlson 1995, Sec 3.
Console.WriteLine(String.Format("RF(1,2,0) = {0}", EllipticFunction.RF(1,2)));
Console.WriteLine(String.Format("RF(2,3,4) = {0}", EllipticFunction.RF(2,3,4)));
Console.WriteLine(String.Format("RC(0,1/4) = {0}", EllipticFunction.RC(0,0.25)));
Console.WriteLine(String.Format("RC(9/4,2) = {0}", EllipticFunction.RC(2.25,2)));
Console.WriteLine(String.Format("RC(1/4,-2) = {0}", EllipticFunction.RC(0.25,-2)));
Console.WriteLine(String.Format("RJ(0,1,2,3) = {0}", EllipticFunction.RJ(0,1,2,3)));
Console.WriteLine(String.Format("RJ(2,3,4,5) = {0}", EllipticFunction.RJ(2,3,4,5)));
Console.WriteLine(String.Format("RD(0,2,1) = {0}", EllipticFunction.RD(0,2,1)));
Console.WriteLine(String.Format("RD(2,3,4) = {0}", EllipticFunction.RD(2,3,4)));
Console.WriteLine(String.Format("RG(0,16,16) = {0}", EllipticFunction.RG(16,16)));
Console.WriteLine(String.Format("RG(2,3,4) = {0}", EllipticFunction.RG(2,3,4)));
Console.WriteLine(String.Format("RG(0,0.0796,4) = {0}", EllipticFunction.RG(0.0796, 4)));
}
catch (GeographicErr e) {
Console.WriteLine( String.Format( "Caught exception: {0}", e.Message ) );
}
}
}
}

Managed C++ Example:

// Example of using the GeographicLib::EllipticFunction class
#include <iostream>
#include <iomanip>
#include <exception>
#include <cmath>
using namespace std;
using namespace GeographicLib;
int main() {
try {
EllipticFunction ell(0.1); // parameter m = 0.1
// See Abramowitz and Stegun, table 17.1
cout << ell.K() << " " << ell.E() << "\n";
double phi = 20, sn, cn;
Math::sincosd(phi, sn ,cn);
// See Abramowitz and Stegun, table 17.6 with
// alpha = asin(sqrt(m)) = 18.43 deg and phi = 20 deg
cout << ell.E(phi * Math::degree()) << " "
<< ell.E(sn, cn, ell.Delta(sn, cn))
<< "\n";
// See Carlson 1995, Sec 3.
cout << fixed << setprecision(16)
<< "RF(1,2,0) = " << EllipticFunction::RF(1,2) << "\n"
<< "RF(2,3,4) = " << EllipticFunction::RF(2,3,4) << "\n"
<< "RC(0,1/4) = " << EllipticFunction::RC(0,0.25) << "\n"
<< "RC(9/4,2) = " << EllipticFunction::RC(2.25,2) << "\n"
<< "RC(1/4,-2) = " << EllipticFunction::RC(0.25,-2) << "\n"
<< "RJ(0,1,2,3) = " << EllipticFunction::RJ(0,1,2,3) << "\n"
<< "RJ(2,3,4,5) = " << EllipticFunction::RJ(2,3,4,5) << "\n"
<< "RD(0,2,1) = " << EllipticFunction::RD(0,2,1) << "\n"
<< "RD(2,3,4) = " << EllipticFunction::RD(2,3,4) << "\n"
<< "RG(0,16,16) = " << EllipticFunction::RG(16,16) << "\n"
<< "RG(2,3,4) = " << EllipticFunction::RG(2,3,4) << "\n"
<< "RG(0,0.0796,4) = " << EllipticFunction::RG(0.0796,4) << "\n";
}
catch (const exception& e) {
cout << "Caught exception: " << e.what() << "\n";
}
}

Visual Basic Example:

Imports NETGeographicLib
Module example_EllipticFunction
Sub Main()
Try
Dim ell As EllipticFunction = New EllipticFunction(0.1, 1.0)
' See Abramowitz and Stegun, table 17.1
Console.WriteLine(String.Format("{0} {1}", ell.K(), ell.E()))
Dim phi As Double = 20 * Math.Acos(-1.0) / 180.0
' See Abramowitz and Stegun, table 17.6 with
' alpha = asin(sqrt(m)) = 18.43 deg and phi = 20 deg
Console.WriteLine(String.Format("{0} {1}", ell.E(phi),
ell.E(Math.Sin(phi), Math.Cos(phi),
Math.Sqrt(1 - ell.k2 * Math.Sin(phi) * Math.Sin(phi)))))
' See Carlson 1995, Sec 3.
Console.WriteLine(String.Format("RF(1,2,0) = {0}", EllipticFunction.RF(1, 2)))
Console.WriteLine(String.Format("RF(2,3,4) = {0}", EllipticFunction.RF(2, 3, 4)))
Console.WriteLine(String.Format("RC(0,1/4) = {0}", EllipticFunction.RC(0, 0.25)))
Console.WriteLine(String.Format("RC(9/4,2) = {0}", EllipticFunction.RC(2.25, 2)))
Console.WriteLine(String.Format("RC(1/4,-2) = {0}", EllipticFunction.RC(0.25, -2)))
Console.WriteLine(String.Format("RJ(0,1,2,3) = {0}", EllipticFunction.RJ(0, 1, 2, 3)))
Console.WriteLine(String.Format("RJ(2,3,4,5) = {0}", EllipticFunction.RJ(2, 3, 4, 5)))
Console.WriteLine(String.Format("RD(0,2,1) = {0}", EllipticFunction.RD(0, 2, 1)))
Console.WriteLine(String.Format("RD(2,3,4) = {0}", EllipticFunction.RD(2, 3, 4)))
Console.WriteLine(String.Format("RG(0,16,16) = {0}", EllipticFunction.RG(16, 16)))
Console.WriteLine(String.Format("RG(2,3,4) = {0}", EllipticFunction.RG(2, 3, 4)))
Console.WriteLine(String.Format("RG(0,0.0796,4) = {0}", EllipticFunction.RG(0.0796, 4)))
Catch ex As GeographicErr
Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
End Try
End Sub
End Module

INTERFACE DIFFERENCES:
The k2, kp2, alpha2, and alphap2 functions are implemented as properties.

Definition at line 69 of file EllipticFunction.h.

Constructor & Destructor Documentation

◆ !EllipticFunction()

EllipticFunction::!EllipticFunction ( )
private

Definition at line 47 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ EllipticFunction() [1/2]

EllipticFunction::EllipticFunction ( double  k2,
double  alpha2 
)

Constructor specifying the modulus and parameter.

Parameters
[in]k2the square of the modulus k2. k2 must lie in (-∞, 1). (No checking is done.)
[in]alpha2the parameter α2. α2 must lie in (-∞, 1). (No checking is done.)

If only elliptic integrals of the first and second kinds are needed, then set α2 = 0 (the default value); in this case, we have Π(φ, 0, k) = F(φ, k), G(φ, 0, k) = E(φ, k), and H(φ, 0, k) = F(φ, k) - D(φ, k).

Definition at line 21 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ EllipticFunction() [2/2]

EllipticFunction::EllipticFunction ( double  k2,
double  alpha2,
double  kp2,
double  alphap2 
)

Constructor specifying the modulus and parameter and their complements.

Parameters
[in]k2the square of the modulus k2. k2 must lie in (-∞, 1). (No checking is done.)
[in]alpha2the parameter α2. α2 must lie in (-∞, 1). (No checking is done.)
[in]kp2the complementary modulus squared k'2 = 1 − k2.
[in]alphap2the complementary parameter α'2 = 1 − α2.

The arguments must satisfy k2 + kp2 = 1 and alpha2 + alphap2 = 1. (No checking is done that these conditions are met.) This constructor is provided to enable accuracy to be maintained, e.g., when k is very close to unity.

Definition at line 34 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ ~EllipticFunction()

NETGeographicLib::EllipticFunction::~EllipticFunction ( )
inline

Destructor calls the finalizer.

Definition at line 121 of file EllipticFunction.h.

Member Function Documentation

◆ D() [1/3]

double EllipticFunction::D ( )

Jahnke's complete integral.

Returns
D(k).

D(k) is defined in http://dlmf.nist.gov/19.2.E6

\[ D(k) = \int_0^{\pi/2} \frac{\sin^2\phi}{\sqrt{1-k^2\sin^2\phi}}\,d\phi. \]

Definition at line 81 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ D() [2/3]

double EllipticFunction::D ( double  phi)

Jahnke's incomplete elliptic integral.

Parameters
[in]phi
Returns
D(φ, k).

D(φ, k) is defined in http://dlmf.nist.gov/19.2.E4

\[ D(\phi, k) = \int_0^\phi \frac{\sin^2\theta}{\sqrt{1-k^2\sin^2\theta}}\,d\theta. \]

Definition at line 141 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ D() [3/3]

double EllipticFunction::D ( double  sn,
double  cn,
double  dn 
)

Jahnke's incomplete elliptic integral in terms of Jacobi elliptic functions.

Parameters
[in]sn= sinφ
[in]cn= cosφ
[in]dn= sqrt(1 − k2 sin2φ)
Returns
D(φ, k) as though φ ∈ (−π, π].

Definition at line 177 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ Delta()

double EllipticFunction::Delta ( double  sn,
double  cn 
)

The Δ amplitude function.

Parameters
[in]snsinφ
[in]cncosφ
Returns
Δ = sqrt(1 − k2 sin2φ)

Definition at line 250 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ deltaD()

double EllipticFunction::deltaD ( double  sn,
double  cn,
double  dn 
)

The periodic Jahnke's incomplete elliptic integral.

Parameters
[in]sn= sinφ
[in]cn= cosφ
[in]dn= sqrt(1 − k2 sin2φ)
Returns
the periodic function π D(φ, k) / (2 D(k)) - φ

Definition at line 219 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ deltaE()

double EllipticFunction::deltaE ( double  sn,
double  cn,
double  dn 
)

The periodic incomplete integral of the second kind.

Parameters
[in]sn= sinφ
[in]cn= cosφ
[in]dn= sqrt(1 − k2 sin2φ)
Returns
the periodic function π E(φ, k) / (2 E(k)) - φ

Definition at line 201 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ deltaEinv()

double EllipticFunction::deltaEinv ( double  stau,
double  ctau 
)

The periodic inverse of the incomplete integral of the second kind.

Parameters
[in]stau= sinτ
[in]ctau= sinτ
Returns
the periodic function E−1(τ (2 E(k)/π), k) - τ

Definition at line 207 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ deltaF()

double EllipticFunction::deltaF ( double  sn,
double  cn,
double  dn 
)

The periodic incomplete integral of the first kind.

Parameters
[in]sn= sinφ
[in]cn= cosφ
[in]dn= sqrt(1 − k2 sin2φ)
Returns
the periodic function π F(φ, k) / (2 K(k)) - φ

Definition at line 195 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ deltaG()

double EllipticFunction::deltaG ( double  sn,
double  cn,
double  dn 
)

Legendre's periodic geodesic longitude integral.

Parameters
[in]sn= sinφ
[in]cn= cosφ
[in]dn= sqrt(1 − k2 sin2φ)
Returns
the periodic function π G(φ, k) / (2 G(k)) - φ

Definition at line 225 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ deltaH()

double EllipticFunction::deltaH ( double  sn,
double  cn,
double  dn 
)

Cayley's periodic geodesic longitude difference integral.

Parameters
[in]sn= sinφ
[in]cn= cosφ
[in]dn= sqrt(1 − k2 sin2φ)
Returns
the periodic function π H(φ, k) / (2 H(k)) - φ

Definition at line 231 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ deltaPi()

double EllipticFunction::deltaPi ( double  sn,
double  cn,
double  dn 
)

The periodic incomplete integral of the third kind.

Parameters
[in]sn= sinφ
[in]cn= cosφ
[in]dn= sqrt(1 − k2 sin2φ)
Returns
the periodic function π Π(φ, k) / (2 Π(k)) - φ

Definition at line 213 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ E() [1/3]

double EllipticFunction::E ( )

The complete integral of the second kind.

Returns
E(k)

E(k) is defined in http://dlmf.nist.gov/19.2.E5

\[ E(k) = \int_0^{\pi/2} \sqrt{1-k^2\sin^2\phi}\,d\phi. \]

Definition at line 75 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ E() [2/3]

double EllipticFunction::E ( double  phi)

The incomplete integral of the second kind.

Parameters
[in]phi
Returns
E(φ, k).

E(φ, k) is defined in http://dlmf.nist.gov/19.2.E5

\[ E(\phi, k) = \int_0^\phi \sqrt{1-k^2\sin^2\theta}\,d\theta. \]

Definition at line 117 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ E() [3/3]

double EllipticFunction::E ( double  sn,
double  cn,
double  dn 
)

The incomplete integral of the second kind in terms of Jacobi elliptic functions.

Parameters
[in]sn= sinφ
[in]cn= cosφ
[in]dn= sqrt(1 − k2 sin2φ)
Returns
E(φ, k) as though φ ∈ (−π, π].

Definition at line 165 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ Ed()

double EllipticFunction::Ed ( double  ang)

The incomplete integral of the second kind with the argument given in degrees.

Parameters
[in]angin degrees.
Returns
Eang/180, k).

Definition at line 123 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ Einv()

double EllipticFunction::Einv ( double  x)

The inverse of the incomplete integral of the second kind.

Parameters
[in]x
Returns
φ = E−1(x, k); i.e., the solution of such that E(φ, k) = x.

Definition at line 129 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ F() [1/2]

double EllipticFunction::F ( double  phi)

The incomplete integral of the first kind.

Parameters
[in]phi
Returns
F(φ, k).

F(φ, k) is defined in http://dlmf.nist.gov/19.2.E4

\[ F(\phi, k) = \int_0^\phi \frac1{\sqrt{1-k^2\sin^2\theta}}\,d\theta. \]

Definition at line 111 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ F() [2/2]

double EllipticFunction::F ( double  sn,
double  cn,
double  dn 
)

The incomplete integral of the first kind in terms of Jacobi elliptic functions.

Parameters
[in]sn= sinφ
[in]cn= cosφ
[in]dn= sqrt(1 − k2 sin2φ)
Returns
F(φ, k) as though φ ∈ (−π, π].

Definition at line 159 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ G() [1/3]

double EllipticFunction::G ( )

Legendre's complete geodesic longitude integral.

Returns
G2, k)

G2, k) is given by

\[ G(\alpha^2, k) = \int_0^{\pi/2} \frac{\sqrt{1-k^2\sin^2\phi}}{1 - \alpha^2\sin^2\phi}\,d\phi. \]

Definition at line 99 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ G() [2/3]

double EllipticFunction::G ( double  phi)

Legendre's geodesic longitude integral.

Parameters
[in]phi
Returns
G(φ, α2, k).

G(φ, α2, k) is defined by

\[ \begin{aligned} G(\phi, \alpha^2, k) &= \frac{k^2}{\alpha^2} F(\phi, k) + \biggl(1 - \frac{k^2}{\alpha^2}\biggr) \Pi(\phi, \alpha^2, k) \\ &= \int_0^\phi \frac{\sqrt{1-k^2\sin^2\theta}}{1 - \alpha^2\sin^2\theta}\,d\theta. \end{aligned} \]

Legendre expresses the longitude of a point on the geodesic in terms of this combination of elliptic integrals in Exercices de Calcul Intégral, Vol. 1 (1811), p. 181, https://books.google.com/books?id=riIOAAAAQAAJ&pg=PA181.

See geodellip for the expression for the longitude in terms of this function.

Definition at line 147 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ G() [3/3]

double EllipticFunction::G ( double  sn,
double  cn,
double  dn 
)

Legendre's geodesic longitude integral in terms of Jacobi elliptic functions.

Parameters
[in]sn= sinφ
[in]cn= cosφ
[in]dn= sqrt(1 − k2 sin2φ)
Returns
G(φ, α2, k) as though φ ∈ (−π, π].

Definition at line 183 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ H() [1/3]

double EllipticFunction::H ( )

Cayley's complete geodesic longitude difference integral.

Returns
H2, k)

H2, k) is given by

\[ H(\alpha^2, k) = \int_0^{\pi/2} \frac{\cos^2\phi}{(1-\alpha^2\sin^2\phi)\sqrt{1-k^2\sin^2\phi}} \,d\phi. \]

Definition at line 105 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ H() [2/3]

double EllipticFunction::H ( double  phi)

Cayley's geodesic longitude difference integral.

Parameters
[in]phi
Returns
H(φ, α2, k).

H(φ, α2, k) is defined by

\[ \begin{aligned} H(\phi, \alpha^2, k) &= \frac1{\alpha^2} F(\phi, k) + \biggl(1 - \frac1{\alpha^2}\biggr) \Pi(\phi, \alpha^2, k) \\ &= \int_0^\phi \frac{\cos^2\theta}{(1-\alpha^2\sin^2\theta)\sqrt{1-k^2\sin^2\theta}} \,d\theta. \end{aligned} \]

Cayley expresses the longitude difference of a point on the geodesic in terms of this combination of elliptic integrals in Phil. Mag. 40 (1870), p. 333, https://books.google.com/books?id=Zk0wAAAAIAAJ&pg=PA333.

See geodellip for the expression for the longitude in terms of this function.

Definition at line 153 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ H() [3/3]

double EllipticFunction::H ( double  sn,
double  cn,
double  dn 
)

Cayley's geodesic longitude difference integral in terms of Jacobi elliptic functions.

Parameters
[in]sn= sinφ
[in]cn= cosφ
[in]dn= sqrt(1 − k2 sin2φ)
Returns
H(φ, α2, k) as though φ ∈ (−π, π].

Definition at line 189 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ K()

double EllipticFunction::K ( )

The complete integral of the first kind.

Returns
K(k).

K(k) is defined in http://dlmf.nist.gov/19.2.E4

\[ K(k) = \int_0^{\pi/2} \frac1{\sqrt{1-k^2\sin^2\phi}}\,d\phi. \]

Definition at line 69 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ KE()

double EllipticFunction::KE ( )

The difference between the complete integrals of the first and second kinds.

Returns
K(k) − E(k).

Definition at line 87 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ Pi() [1/3]

double EllipticFunction::Pi ( )

The complete integral of the third kind.

Returns
Π(α2, k)

Π(α2, k) is defined in http://dlmf.nist.gov/19.2.E7

\[ \Pi(\alpha^2, k) = \int_0^{\pi/2} \frac1{\sqrt{1-k^2\sin^2\phi}(1 - \alpha^2\sin^2\phi_)}\,d\phi. \]

Definition at line 93 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ Pi() [2/3]

double EllipticFunction::Pi ( double  phi)

The incomplete integral of the third kind.

Parameters
[in]phi
Returns
Π(φ, α2, k).

Π(φ, α2, k) is defined in http://dlmf.nist.gov/19.2.E7

\[ \Pi(\phi, \alpha^2, k) = \int_0^\phi \frac1{\sqrt{1-k^2\sin^2\theta}(1 - \alpha^2\sin^2\theta_)}\,d\theta. \]

Definition at line 135 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ Pi() [3/3]

double EllipticFunction::Pi ( double  sn,
double  cn,
double  dn 
)

The incomplete integral of the third kind in terms of Jacobi elliptic functions.

Parameters
[in]sn= sinφ
[in]cn= cosφ
[in]dn= sqrt(1 − k2 sin2φ)
Returns
Π(φ, α2, k) as though φ ∈ (−π, π].

Definition at line 171 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ RC()

double EllipticFunction::RC ( double  x,
double  y 
)
static

Degenerate symmetric integral of the first kind RC.

Parameters
[in]x
[in]y
Returns
RC(x, y) = RF(x, y, y)

RC is defined in http://dlmf.nist.gov/19.2.E17

\[ R_C(x, y) = \frac12 \int_0^\infty\frac1{\sqrt{t + x}(t + y)}\,dt \]

Definition at line 268 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ RD()

double EllipticFunction::RD ( double  x,
double  y,
double  z 
)
static

Degenerate symmetric integral of the third kind RD.

Parameters
[in]x
[in]y
[in]z
Returns
RD(x, y, z) = RJ(x, y, z, z)

RD is defined in http://dlmf.nist.gov/19.16.E5

\[ R_D(x, y, z) = \frac32 \int_0^\infty[(t + x) (t + y)]^{-1/2} (t + z)^{-3/2}\, dt \]

Definition at line 292 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ Reset() [1/2]

void EllipticFunction::Reset ( double  k2,
double  alpha2 
)

Reset the modulus and parameter.

Parameters
[in]k2the new value of square of the modulus k2 which must lie in (-∞, 1). (No checking is done.)
[in]alpha2the new value of parameter α2. α2 must lie in (-∞, 1). (No checking is done.)

Definition at line 57 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ Reset() [2/2]

void EllipticFunction::Reset ( double  k2,
double  alpha2,
double  kp2,
double  alphap2 
)

Reset the modulus and parameter supplying also their complements.

Parameters
[in]k2the square of the modulus k2. k2 must lie in (-∞, 1). (No checking is done.)
[in]alpha2the parameter α2. α2 must lie in (-∞, 1). (No checking is done.)
[in]kp2the complementary modulus squared k'2 = 1 − k2.
[in]alphap2the complementary parameter α'2 = 1 − α2.

The arguments must satisfy k2 + kp2 = 1 and alpha2 + alphap2 = 1. (No checking is done that these conditions are met.) This constructor is provided to enable accuracy to be maintained, e.g., when is very small.

Definition at line 63 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ RF() [1/2]

double EllipticFunction::RF ( double  x,
double  y 
)
static

Complete symmetric integral of the first kind, RF with one argument zero.

Parameters
[in]x
[in]y
Returns
RF(x, y, 0)

Definition at line 262 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ RF() [2/2]

double EllipticFunction::RF ( double  x,
double  y,
double  z 
)
static

Symmetric integral of the first kind RF.

Parameters
[in]x
[in]y
[in]z
Returns
RF(x, y, z)

RF is defined in http://dlmf.nist.gov/19.16.E1

\[ R_F(x, y, z) = \frac12 \int_0^\infty\frac1{\sqrt{(t + x) (t + y) (t + z)}}\, dt \]

If one of the arguments is zero, it is more efficient to call the two-argument version of this function with the non-zero arguments.

Definition at line 256 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ RG() [1/2]

double EllipticFunction::RG ( double  x,
double  y 
)
static

Complete symmetric integral of the second kind, RG with one argument zero.

Parameters
[in]x
[in]y
Returns
RG(x, y, 0)

Definition at line 280 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ RG() [2/2]

double EllipticFunction::RG ( double  x,
double  y,
double  z 
)
static

Symmetric integral of the second kind RG.

Parameters
[in]x
[in]y
[in]z
Returns
RG(x, y, z)

RG is defined in Carlson, eq 1.5

\[ R_G(x, y, z) = \frac14 \int_0^\infty[(t + x) (t + y) (t + z)]^{-1/2} \biggl( \frac x{t + x} + \frac y{t + y} + \frac z{t + z} \biggr)t\,dt \]

See also http://dlmf.nist.gov/19.16.E3. If one of the arguments is zero, it is more efficient to call the two-argument version of this function with the non-zero arguments.

Definition at line 274 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ RJ()

double EllipticFunction::RJ ( double  x,
double  y,
double  z,
double  p 
)
static

Symmetric integral of the third kind RJ.

Parameters
[in]x
[in]y
[in]z
[in]p
Returns
RJ(x, y, z, p)

RJ is defined in http://dlmf.nist.gov/19.16.E2

\[ R_J(x, y, z, p) = \frac32 \int_0^\infty[(t + x) (t + y) (t + z)]^{-1/2} (t + p)^{-1}\, dt \]

Definition at line 286 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

◆ sncndn()

void EllipticFunction::sncndn ( double  x,
[System::Runtime::InteropServices::Out] double%  sn,
[System::Runtime::InteropServices::Out] double%  cn,
[System::Runtime::InteropServices::Out] double%  dn 
)

The Jacobi elliptic functions.

Parameters
[in]xthe argument.
[out]snsn(x, k).
[out]cncn(x, k).
[out]dndn(x, k).

Definition at line 237 of file dotnet/NETGeographicLib/EllipticFunction.cpp.

Member Data Documentation

◆ alpha2

property double NETGeographicLib::EllipticFunction::alpha2 { double get()
Returns
the parameter α2.

Definition at line 174 of file EllipticFunction.h.

◆ alphap2

property double NETGeographicLib::EllipticFunction::alphap2 { double get()
Returns
the complementary parameter α'2 = 1 − α2.

Definition at line 180 of file EllipticFunction.h.

◆ k2

property double NETGeographicLib::EllipticFunction::k2 { double get()
Returns
the square of the modulus k2.

Definition at line 163 of file EllipticFunction.h.

◆ kp2

property double NETGeographicLib::EllipticFunction::kp2 { double get()
Returns
the square of the complementary modulus k'2 = 1 − k2.

Definition at line 169 of file EllipticFunction.h.

◆ m_pEllipticFunction

GeographicLib::EllipticFunction* NETGeographicLib::EllipticFunction::m_pEllipticFunction
private

Definition at line 73 of file EllipticFunction.h.


The documentation for this class was generated from the following files:
e
Array< double, 1, 3 > e(1./3., 0.5, 2.)
GeographicLib
Namespace for GeographicLib.
Definition: JacobiConformal.hpp:15
EllipticFunction.hpp
Header for GeographicLib::EllipticFunction class.
GeographicLib::EllipticFunction
Elliptic integrals and functions.
Definition: EllipticFunction.hpp:62
NETGeographicLib::EllipticFunction::EllipticFunction
EllipticFunction(double k2, double alpha2)
Definition: dotnet/NETGeographicLib/EllipticFunction.cpp:21
NETGeographicLib::EllipticFunction::RC
static double RC(double x, double y)
Definition: dotnet/NETGeographicLib/EllipticFunction.cpp:268
main
int main(int argc, char **argv)
Definition: cmake/example_cmake_find_gtsam/main.cpp:63
NETGeographicLib::EllipticFunction::RG
static double RG(double x, double y, double z)
Definition: dotnet/NETGeographicLib/EllipticFunction.cpp:274
NETGeographicLib::EllipticFunction::RJ
static double RJ(double x, double y, double z, double p)
Definition: dotnet/NETGeographicLib/EllipticFunction.cpp:286
cn
static double cn[6]
Definition: fresnl.c:83
degree
const double degree
Definition: SimpleRotation.cpp:59
Math.hpp
Header for GeographicLib::Math class.
sn
static double sn[6]
Definition: fresnl.c:63
NETGeographicLib::EllipticFunction::RF
static double RF(double x, double y, double z)
Definition: dotnet/NETGeographicLib/EllipticFunction.cpp:256
std
Definition: BFloat16.h:88
args
Definition: pytypes.h:2210
NETGeographicLib
Definition: Accumulator.h:13
NETGeographicLib::EllipticFunction::RD
static double RD(double x, double y, double z)
Definition: dotnet/NETGeographicLib/EllipticFunction.cpp:292


gtsam
Author(s):
autogenerated on Sun Dec 22 2024 04:25:00