// Example of using the GeographicLib::AuxLatitude class. See the paper // // - C. F. F. Karney, // On auxiliary latitudes, // Survey Review 56(395), 165--180 (2024). // https://doi.org/10.1080/00396265.2023.2217604 // preprint: https://arxiv.org/abs/2212.05818 #include #include #include #include #include int main(int argc, const char* const argv[]) { try { using latitude = GeographicLib::AuxLatitude; using angle = GeographicLib::AuxAngle; if (argc != 3) { std::cerr << "Usage: example-AuxLatitude \n"; return 1; } double n = GeographicLib::Utility::fract(std::string(argv[1])); int auxin = GeographicLib::Utility::val(std::string(argv[2])); double a = 1+n, b = 1-n; // Equatorial radius and polar semiaxis latitude aux(latitude::axes(a, b)); bool exact = true; // Do the exact calculation std::cout << std::setprecision(9) << std::fixed; int m = 1; for (int l = 0; l < 90*m; ++l) { angle phi(angle::degrees((l+0.5)/m)); for (int auxout = 0; auxout < latitude::AUXNUMBER; ++auxout) { angle eta = aux.Convert(auxin, auxout, phi, exact); std::cout << (auxout ? " " : "") << eta.degrees(); } std::cout << "\n"; } } catch (const std::exception& e) { std::cerr << "Caught exception: " << e.what() << "\n"; return 1; } }