.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::EllipticFunction * | m_pEllipticFunction |
.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.,
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:
Managed C++ Example:
Visual Basic Example:
INTERFACE DIFFERENCES:
The k2, kp2, alpha2, and alphap2 functions are implemented as properties.
Definition at line 69 of file EllipticFunction.h.
|
private |
Definition at line 47 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
EllipticFunction::EllipticFunction | ( | double | k2, |
double | alpha2 | ||
) |
Constructor specifying the modulus and parameter.
[in] | k2 | the square of the modulus k2. k2 must lie in (-∞, 1). (No checking is done.) |
[in] | alpha2 | the 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::EllipticFunction | ( | double | k2, |
double | alpha2, | ||
double | kp2, | ||
double | alphap2 | ||
) |
Constructor specifying the modulus and parameter and their complements.
[in] | k2 | the square of the modulus k2. k2 must lie in (-∞, 1). (No checking is done.) |
[in] | alpha2 | the parameter α2. α2 must lie in (-∞, 1). (No checking is done.) |
[in] | kp2 | the complementary modulus squared k'2 = 1 − k2. |
[in] | alphap2 | the 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.
|
inline |
Destructor calls the finalizer.
Definition at line 121 of file EllipticFunction.h.
double EllipticFunction::D | ( | ) |
Jahnke's complete integral.
D(k) is defined in http://dlmf.nist.gov/19.2.E6
Definition at line 81 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::D | ( | double | phi | ) |
Jahnke's incomplete elliptic integral.
[in] | phi |
D(φ, k) is defined in http://dlmf.nist.gov/19.2.E4
Definition at line 141 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::D | ( | double | sn, |
double | cn, | ||
double | dn | ||
) |
Jahnke's incomplete elliptic integral in terms of Jacobi elliptic functions.
[in] | sn | = sinφ |
[in] | cn | = cosφ |
[in] | dn | = sqrt(1 − k2 sin2φ) |
Definition at line 177 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::Delta | ( | double | sn, |
double | cn | ||
) |
The Δ amplitude function.
[in] | sn | sinφ |
[in] | cn | cosφ |
Definition at line 250 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::deltaD | ( | double | sn, |
double | cn, | ||
double | dn | ||
) |
The periodic Jahnke's incomplete elliptic integral.
[in] | sn | = sinφ |
[in] | cn | = cosφ |
[in] | dn | = sqrt(1 − k2 sin2φ) |
Definition at line 219 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::deltaE | ( | double | sn, |
double | cn, | ||
double | dn | ||
) |
The periodic incomplete integral of the second kind.
[in] | sn | = sinφ |
[in] | cn | = cosφ |
[in] | dn | = sqrt(1 − k2 sin2φ) |
Definition at line 201 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::deltaEinv | ( | double | stau, |
double | ctau | ||
) |
The periodic inverse of the incomplete integral of the second kind.
[in] | stau | = sinτ |
[in] | ctau | = sinτ |
Definition at line 207 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::deltaF | ( | double | sn, |
double | cn, | ||
double | dn | ||
) |
The periodic incomplete integral of the first kind.
[in] | sn | = sinφ |
[in] | cn | = cosφ |
[in] | dn | = sqrt(1 − k2 sin2φ) |
Definition at line 195 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::deltaG | ( | double | sn, |
double | cn, | ||
double | dn | ||
) |
Legendre's periodic geodesic longitude integral.
[in] | sn | = sinφ |
[in] | cn | = cosφ |
[in] | dn | = sqrt(1 − k2 sin2φ) |
Definition at line 225 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::deltaH | ( | double | sn, |
double | cn, | ||
double | dn | ||
) |
Cayley's periodic geodesic longitude difference integral.
[in] | sn | = sinφ |
[in] | cn | = cosφ |
[in] | dn | = sqrt(1 − k2 sin2φ) |
Definition at line 231 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::deltaPi | ( | double | sn, |
double | cn, | ||
double | dn | ||
) |
The periodic incomplete integral of the third kind.
[in] | sn | = sinφ |
[in] | cn | = cosφ |
[in] | dn | = sqrt(1 − k2 sin2φ) |
Definition at line 213 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::E | ( | ) |
The complete integral of the second kind.
E(k) is defined in http://dlmf.nist.gov/19.2.E5
Definition at line 75 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::E | ( | double | phi | ) |
The incomplete integral of the second kind.
[in] | phi |
E(φ, k) is defined in http://dlmf.nist.gov/19.2.E5
Definition at line 117 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::E | ( | double | sn, |
double | cn, | ||
double | dn | ||
) |
The incomplete integral of the second kind in terms of Jacobi elliptic functions.
[in] | sn | = sinφ |
[in] | cn | = cosφ |
[in] | dn | = sqrt(1 − k2 sin2φ) |
Definition at line 165 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::Ed | ( | double | ang | ) |
The incomplete integral of the second kind with the argument given in degrees.
[in] | ang | in degrees. |
Definition at line 123 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::Einv | ( | double | x | ) |
The inverse of the incomplete integral of the second kind.
[in] | x |
Definition at line 129 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::F | ( | double | phi | ) |
The incomplete integral of the first kind.
[in] | phi |
F(φ, k) is defined in http://dlmf.nist.gov/19.2.E4
Definition at line 111 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::F | ( | double | sn, |
double | cn, | ||
double | dn | ||
) |
The incomplete integral of the first kind in terms of Jacobi elliptic functions.
[in] | sn | = sinφ |
[in] | cn | = cosφ |
[in] | dn | = sqrt(1 − k2 sin2φ) |
Definition at line 159 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::G | ( | ) |
Legendre's complete geodesic longitude integral.
G(α2, k) is given by
Definition at line 99 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::G | ( | double | phi | ) |
Legendre's geodesic longitude integral.
[in] | phi |
G(φ, α2, k) is defined by
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.
double EllipticFunction::G | ( | double | sn, |
double | cn, | ||
double | dn | ||
) |
Legendre's geodesic longitude integral in terms of Jacobi elliptic functions.
[in] | sn | = sinφ |
[in] | cn | = cosφ |
[in] | dn | = sqrt(1 − k2 sin2φ) |
Definition at line 183 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::H | ( | ) |
Cayley's complete geodesic longitude difference integral.
H(α2, k) is given by
Definition at line 105 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::H | ( | double | phi | ) |
Cayley's geodesic longitude difference integral.
[in] | phi |
H(φ, α2, k) is defined by
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.
double EllipticFunction::H | ( | double | sn, |
double | cn, | ||
double | dn | ||
) |
Cayley's geodesic longitude difference integral in terms of Jacobi elliptic functions.
[in] | sn | = sinφ |
[in] | cn | = cosφ |
[in] | dn | = sqrt(1 − k2 sin2φ) |
Definition at line 189 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::K | ( | ) |
The complete integral of the first kind.
K(k) is defined in http://dlmf.nist.gov/19.2.E4
Definition at line 69 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::KE | ( | ) |
The difference between the complete integrals of the first and second kinds.
Definition at line 87 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::Pi | ( | ) |
The complete integral of the third kind.
Π(α2, k) is defined in http://dlmf.nist.gov/19.2.E7
Definition at line 93 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::Pi | ( | double | phi | ) |
The incomplete integral of the third kind.
[in] | phi |
Π(φ, α2, k) is defined in http://dlmf.nist.gov/19.2.E7
Definition at line 135 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
double EllipticFunction::Pi | ( | double | sn, |
double | cn, | ||
double | dn | ||
) |
The incomplete integral of the third kind in terms of Jacobi elliptic functions.
[in] | sn | = sinφ |
[in] | cn | = cosφ |
[in] | dn | = sqrt(1 − k2 sin2φ) |
Definition at line 171 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
|
static |
Degenerate symmetric integral of the first kind RC.
[in] | x | |
[in] | y |
RC is defined in http://dlmf.nist.gov/19.2.E17
Definition at line 268 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
|
static |
Degenerate symmetric integral of the third kind RD.
[in] | x | |
[in] | y | |
[in] | z |
RD is defined in http://dlmf.nist.gov/19.16.E5
Definition at line 292 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
void EllipticFunction::Reset | ( | double | k2, |
double | alpha2 | ||
) |
Reset the modulus and parameter.
[in] | k2 | the new value of square of the modulus k2 which must lie in (-∞, 1). (No checking is done.) |
[in] | alpha2 | the new value of parameter α2. α2 must lie in (-∞, 1). (No checking is done.) |
Definition at line 57 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
void EllipticFunction::Reset | ( | double | k2, |
double | alpha2, | ||
double | kp2, | ||
double | alphap2 | ||
) |
Reset the modulus and parameter supplying also their complements.
[in] | k2 | the square of the modulus k2. k2 must lie in (-∞, 1). (No checking is done.) |
[in] | alpha2 | the parameter α2. α2 must lie in (-∞, 1). (No checking is done.) |
[in] | kp2 | the complementary modulus squared k'2 = 1 − k2. |
[in] | alphap2 | the 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.
|
static |
Complete symmetric integral of the first kind, RF with one argument zero.
[in] | x | |
[in] | y |
Definition at line 262 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
|
static |
Symmetric integral of the first kind RF.
[in] | x | |
[in] | y | |
[in] | z |
RF is defined in http://dlmf.nist.gov/19.16.E1
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.
|
static |
Complete symmetric integral of the second kind, RG with one argument zero.
[in] | x | |
[in] | y |
Definition at line 280 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
|
static |
Symmetric integral of the second kind RG.
[in] | x | |
[in] | y | |
[in] | z |
RG is defined in Carlson, eq 1.5
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.
|
static |
Symmetric integral of the third kind RJ.
[in] | x | |
[in] | y | |
[in] | z | |
[in] | p |
RJ is defined in http://dlmf.nist.gov/19.16.E2
Definition at line 286 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
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.
[in] | x | the argument. |
[out] | sn | sn(x, k). |
[out] | cn | cn(x, k). |
[out] | dn | dn(x, k). |
Definition at line 237 of file dotnet/NETGeographicLib/EllipticFunction.cpp.
property double NETGeographicLib::EllipticFunction::alpha2 { double get() |
Definition at line 174 of file EllipticFunction.h.
property double NETGeographicLib::EllipticFunction::alphap2 { double get() |
Definition at line 180 of file EllipticFunction.h.
property double NETGeographicLib::EllipticFunction::k2 { double get() |
Definition at line 163 of file EllipticFunction.h.
property double NETGeographicLib::EllipticFunction::kp2 { double get() |
Definition at line 169 of file EllipticFunction.h.
|
private |
Definition at line 73 of file EllipticFunction.h.