From e6787b081101481f9adf8fbcdd55e393f7f8afc0 Mon Sep 17 00:00:00 2001 From: Pierre Louvart Date: Sun, 8 Sep 2024 18:42:46 +0200 Subject: [PATCH 01/23] - Add dymaxion projection --- src/lib_proj.cmake | 1 + src/pj_list.h | 1 + src/projections/dymaxion.cpp | 645 +++++++++++++++++++++++++++++++++++ 3 files changed, 647 insertions(+) create mode 100644 src/projections/dymaxion.cpp diff --git a/src/lib_proj.cmake b/src/lib_proj.cmake index c39e5dfd4d..482a0947eb 100644 --- a/src/lib_proj.cmake +++ b/src/lib_proj.cmake @@ -28,6 +28,7 @@ print_variable(ENABLE_IPO) ############################################## set(SRC_LIBPROJ_PROJECTIONS + projections/dymaxion.cpp projections/aeqd.cpp projections/adams.cpp projections/gnom.cpp diff --git a/src/pj_list.h b/src/pj_list.h index e0b2035687..80d2b900d5 100644 --- a/src/pj_list.h +++ b/src/pj_list.h @@ -37,6 +37,7 @@ PROJ_HEAD(crast, "Craster Parabolic (Putnins P4)") PROJ_HEAD(defmodel, "Deformation model") PROJ_HEAD(deformation, "Kinematic grid shift") PROJ_HEAD(denoy, "Denoyer Semi-Elliptical") +PROJ_HEAD(dymaxion, "Dymaxion Fuller") PROJ_HEAD(eck1, "Eckert I") PROJ_HEAD(eck2, "Eckert II") PROJ_HEAD(eck3, "Eckert III") diff --git a/src/projections/dymaxion.cpp b/src/projections/dymaxion.cpp new file mode 100644 index 0000000000..c01f2e55fc --- /dev/null +++ b/src/projections/dymaxion.cpp @@ -0,0 +1,645 @@ +/* enable predefined math constants M_* for MS Visual Studio */ +#if defined(_MSC_VER) || defined(_WIN32) +#ifndef _USE_MATH_DEFINES +#define _USE_MATH_DEFINES +#endif +#endif + +#include +#include +#include + +#include "proj.h" +#include "proj_internal.h" + +PROJ_HEAD(dymaxion, "Dymaxion") "\n\tMisc, Sph&Ell"; + + +namespace { // anonymous namespace + struct pj_face { + const PJ_XYZ p1; + const PJ_XYZ p2; + const PJ_XYZ p3; + }; +} // anonymous namespace + + +constexpr pj_face ico_faces[23] = { + { + { 0.42015243, 0.07814525, 0.90408255}, + { 0.51883673, 0.83542038, 0.18133184}, + { 0.99500944, -0.0913478 , 0.04014718} + }, { + { 0.42015243, 0.07814525, 0.90408255}, + { -0.41468223, 0.65596241, 0.63067581}, + { 0.51883673, 0.83542038, 0.18133184} + }, { + { 0.42015243, 0.07814525, 0.90408255}, + { -0.51545596, -0.3817169 , 0.76720099}, + { -0.41468223, 0.65596241, 0.63067581} + }, { + { 0.42015243, 0.07814525, 0.90408255}, + { 0.3557814 , -0.84358 , 0.40223423}, + { -0.51545596, -0.3817169 , 0.76720099} + }, { + { 0.42015243, 0.07814525, 0.90408255}, + { 0.99500944, -0.0913478 , 0.04014718}, + { 0.3557814 , -0.84358 , 0.40223423} + }, { + { 0.99500944, -0.0913478 , 0.04014718}, + { 0.51883673, 0.83542038, 0.18133184}, + { 0.51545596, 0.3817169 , -0.76720099} + }, { + { 0.51545596, 0.3817169 , -0.76720099}, + { 0.51883673, 0.83542038, 0.18133184}, + { -0.3557814 , 0.84358 , -0.40223423} + }, { + { -0.3557814 , 0.84358 , -0.40223423}, + { 0.51883673, 0.83542038, 0.18133184}, + { -0.41468223, 0.65596241, 0.63067581} + }, { + { -0.51545596, -0.3817169 , 0.76720099}, + { -0.99500944, 0.0913478 , -0.04014718}, + { -0.41468223, 0.65596241, 0.63067581} + }, { + { -0.51545596, -0.3817169 , 0.76720099}, + { -0.51883673, -0.83542038, -0.18133184}, + { -0.99500944, 0.0913478 , -0.04014718} + }, { + { -0.51545596, -0.3817169 , 0.76720099}, + { 0.3557814 , -0.84358 , 0.40223423}, + { -0.51883673, -0.83542038, -0.18133184} + }, { + { -0.51883673, -0.83542038, -0.18133184}, + { 0.3557814 , -0.84358 , 0.40223423}, + { 0.41468223, -0.65596241, -0.63067581} + }, { + { 0.41468223, -0.65596241, -0.63067581}, + { 0.3557814 , -0.84358 , 0.40223423}, + { 0.99500944, -0.0913478 , 0.04014718} + }, { + { 0.51545596, 0.3817169 , -0.76720099}, + { 0.41468223, -0.65596241, -0.63067581}, + { 0.99500944, -0.0913478 , 0.04014718} + }, { + { -0.42015243, -0.07814525, -0.90408255}, + { -0.3557814 , 0.84358 , -0.40223423}, + { -0.99500944, 0.0913478 , -0.04014718} + }, { + { -0.42015243, -0.07814525, -0.90408255}, + { -0.99500944, 0.0913478 , -0.04014718}, + { -0.51883673, -0.83542038, -0.18133184} + }, { + { -0.42015243, -0.07814525, -0.90408255}, + { -0.51883673, -0.83542038, -0.18133184}, + { 0.41468223, -0.65596241, -0.63067581} + }, { + { -0.42015243, -0.07814525, -0.90408255}, + { 0.41468223, -0.65596241, -0.63067581}, + { 0.51545596, 0.3817169 , -0.76720099} + }, { + { -0.3557814 , 0.84358 , -0.40223423}, + { -0.38796691, 0.38271738, -0.65315839}, + { 0.51545596, 0.3817169 , -0.76720099} + }, { + { -0.42015243, -0.07814525, -0.90408255}, + { 0.51545596, 0.3817169 , -0.76720099}, + { -0.38796691, 0.38271738, -0.65315839} + }, { + { -0.99500944, 0.0913478 , -0.04014718}, + { -0.3557814 , 0.84358 , -0.40223423}, + { -0.58849102, 0.53029673, 0.0627648 } + }, { + { -0.3557814 , 0.84358 , -0.40223423}, + { -0.41468223, 0.65596241, 0.63067581}, + { -0.58849102, 0.53029673, 0.0627648 } + }, { + { -0.99500944, 0.0913478 , -0.04014718}, + { -0.58849102, 0.53029673, 0.0627648 }, + { -0.41468223, 0.65596241, 0.63067581} + } +}; +constexpr PJ_XYZ ico_centers[23] = { + { 0.6446662 , 0.27407261, 0.37518719}, + { 0.17476898, 0.52317601, 0.57203007}, + {-0.16999525, 0.11746359, 0.76731978}, + { 0.08682596, -0.38238388, 0.69117259}, + { 0.59031442, -0.28559418, 0.44882132}, + { 0.67643404, 0.37526316, -0.18190733}, + { 0.22617043, 0.68690576, -0.32936779}, + {-0.08387563, 0.77832093, 0.13659114}, + {-0.64171587, 0.12186443, 0.45257654}, + {-0.67643404, -0.37526316, 0.18190733}, + {-0.22617043, -0.68690576, 0.32936779}, + { 0.08387563, -0.77832093, -0.13659114}, + { 0.58849102, -0.53029673, -0.0627648 }, + { 0.64171587, -0.12186443, -0.45257654}, + {-0.59031442, 0.28559418, -0.44882132}, + {-0.6446662 , -0.27407261, -0.37518719}, + {-0.17476898, -0.52317601, -0.57203007}, + { 0.16999525, -0.11746359, -0.76731978}, + {-0.07609745, 0.53600476, -0.6075312 }, + {-0.09755446, 0.22876301, -0.77481398}, + {-0.64642729, 0.48840818, -0.12653887}, + {-0.45298488, 0.67661305, 0.09706879}, + {-0.66606089, 0.42586898, 0.21776448} +}; +constexpr PJ_XYZ ico_normals[23] = { + { 0.81125347, 0.34489532, 0.47213877}, + { 0.21993078, 0.65836918, 0.71984754}, + {-0.21392348, 0.14781718, 0.96560179}, + { 0.10926253, -0.48119516, 0.86977751}, + { 0.74285673, -0.35939417, 0.56480059}, + { 0.8512304 , 0.47223438, -0.22891374}, + { 0.28461481, 0.8644081 , -0.41447926}, + {-0.10554981, 0.97944573, 0.17188746}, + {-0.80754076, 0.15335525, 0.5695262 }, + {-0.8512304 , -0.47223438, 0.22891374}, + {-0.28461481, -0.8644081 , 0.41447926}, + { 0.10554981, -0.97944573, -0.17188746}, + { 0.74056215, -0.66732996, -0.07898376}, + { 0.80754076, -0.15335525, -0.5695262 }, + {-0.74285673, 0.35939417, -0.56480059}, + {-0.81125347, -0.34489532, -0.47213877}, + {-0.21993078, -0.65836918, -0.71984754}, + { 0.21392348, -0.14781718, -0.96560179}, + {-0.09351474, 0.65868628, -0.7465838 }, + {-0.11988286, 0.28112261, -0.95215449}, + {-0.78831255, 0.5956096 , -0.15431307}, + {-0.55241119, 0.82512383, 0.11837456}, + {-0.81225557, 0.51934358, 0.26556192} +}; +constexpr double ico_dym_trans[23][2][4] = { + { + {3676785.5510927686, -3835017.5258469363, -3516181.100781365, 13536571.967011793}, + {597946.1042109424, 4588467.130704259, -4379277.462052473, 23446030.407177} + }, { + {6186177.998246177, -1393567.906883936, -615475.9397151419, 9668980.022865457}, + {597946.093114201, 4588467.19100263, -4379277.400388917, 23446030.35137834} + }, { + {6193487.4205306955, -412638.4248002627, 1435299.1378493956, 7735184.010119925}, + {610606.3190418222, 6287486.747151732, -827230.8805747802, 20096597.543368153} + }, { + {6320833.944116932, -6999.892727576209, -797903.6645324827, 9668980.01852922}, + {390035.65327668283, 5584900.236424718, 3040789.8291663616, 16747164.616387902} + }, { + {1785817.7590237681, -3817376.0879736473, -4777879.8689040495, 15470367.924944565}, + {3873198.442246702, 4557911.138766957, -2193951.03617877, 20096597.49643075} + }, { + {1653953.7215915888, -4829262.34292155, -3812125.819798014, 15470368.002101175}, + {-2905701.4190057977, 2866384.5748423464, -4891868.701844473, 26795463.40708426} + }, { + {6107473.601907308, -1644266.3344992409, 764719.3344694556, 9668979.981535126}, + {-20484.64090943463, -2749071.518667839, -5747332.184563468, 30144896.19948345} + }, { + {6325351.40269263, 599247.8045318229, 469545.1276272928, 7735184.023318606}, + {356890.77120627166, 1136808.9882550093, -6258588.8944518985, 26795463.32486729} + }, { + {3707748.665652811, 320266.29512553854, 5171041.496392702, 3867592.035741229}, + {610606.2571372315, 6287486.77106971, -827230.7444765394, 20096597.416174263} + }, { + {3343388.1054673023, -4896993.030290109, 2330419.6578763095, 3867592.0439363136}, + {20484.769920770817, 2749071.5830884464, 5747332.153289897, 13397731.73801166} + }, { + {6107473.60190731, -1644266.3344992383, 764719.3344694556, 7735183.976051465}, + {20484.640909436934, 2749071.5186678423, 5747332.184563471, 13397731.622928448} + }, { + {6325351.402692626, 599247.8045318197, 469545.1276272917, 9668979.934267987}, + {-356890.771206269, -1136808.988255014, 6258588.894451901, 10048298.748312276} + }, { + {4266333.312707111, 4606685.514783113, 1080041.5952454251, 13536571.999992047}, + {-356890.7685546608, -1136809.0066234802, 6258588.89126666, 10048298.733154824} + }, { + {3707748.6656528125, 320266.2951255404, 5171041.496392703, 13536571.921845356}, + {-610606.2571372343, -6287486.771069713, 827230.7444765412, 3349432.839619261} + }, { + {2461379.3653720734, 5855954.878351068, 488922.6024620175, 1933795.9726568952}, + {3483162.766967333, -1026989.0986009572, -5234740.860790558, 30144896.267866686} + }, { + {1320556.259205771, -5891237.862543248, 2034474.981967402, 1933795.9952873993}, + {-3483162.743619373, 1026989.0359898619, 5234740.88860963, 10048298.745932998} + }, { + {6186177.998246178, -1393567.906883938, -615475.9397151434, 7735183.934721128}, + {-597946.0931142012, -4588467.191002626, 4379277.400388914, 6698865.774823346} + }, { + {6193487.420530697, -412638.4248002642, 1435299.1378493954, 9668979.94746666}, + {-610606.3190418243, -6287486.747151733, 827230.8805747859, 3349432.9668131615} + }, { + {3631143.294565724, 4247670.019959572, 3292753.7141836006, 4834490.01017019}, + {5202228.852835585, -2460476.189043276, -2822411.933114077, 32936090.315075427} + }, { + {6320833.984249294, -6999.986858507935, -797903.6226051609, 7735183.986468951}, + {-236523.47825744975, -6260972.143136178, -1818765.4625549014, 1116477.6505621031} + }, { + {3665612.680171031, 5148002.543997674, 1144110.7942403506, 3222993.3353615967}, + {1397369.4993098697, 199220.39584036605, -6369559.895786125, 27911940.952937342} + }, { + {5467774.722326167, 3524051.3707974004, 951903.3183405161, 5156789.374365881}, + {356890.8085771865, 1136808.9426368838, -6258588.900606924, 26795463.37416993} + }, { + {2424810.9279973777, 777520.1747496846, 5896048.635731078, 2578394.7320210026}, + {2832719.751595245, 5495499.807718434, -2082980.0653286842, 22329552.792623065} + } +}; + +constexpr pj_face dymaxion_faces[23] = { + { + {11602775.971724393, 20096597.491866, 1.0}, + {11602775.971724393, 26795463.322488002, 1.0}, + {17404163.95758659, 23446030.407177, 1.0} + }, { + {11602775.971724393, 20096597.491866, 1.0}, + {5801387.985862196, 23446030.407177, 1.0}, + {11602775.971724393, 26795463.322488002, 1.0} + }, { + {11602775.971724393, 20096597.491866, 1.0}, + {5801387.985862196, 16747164.576555002, 1.0}, + {5801387.985862196, 23446030.407177, 1.0} + }, { + {11602775.971724393, 20096597.491866, 1.0}, + {11602775.971724393, 13397731.661244001, 1.0}, + {5801387.985862196, 16747164.576555002, 1.0} + }, { + {11602775.971724393, 20096597.491866, 1.0}, + {17404163.95758659, 23446030.407177, 1.0}, + {17404163.95758659, 16747164.576555002, 1.0} + }, { + {17404163.95758659, 23446030.407177, 1.0}, + {11602775.971724393, 26795463.322488002, 1.0}, + {17404163.95758659, 30144896.237799004, 1.0} + }, { + {11602775.971724393, 33494329.153110005, 1.0}, + {11602775.971724393, 26795463.322488002, 1.0}, + {5801387.985862196, 30144896.237799004, 1.0} + }, { + {5801387.985862196, 30144896.237799004, 1.0}, + {11602775.971724393, 26795463.322488002, 1.0}, + {5801387.985862196, 23446030.407177, 1.0} + }, { + {5801387.985862196, 16747164.576555002, 1.0}, + {0.0, 20096597.491866, 1.0}, + {5801387.985862196, 23446030.407177, 1.0} + }, { + {5801387.985862196, 16747164.576555002, 1.0}, + {5801387.985862196, 10048298.745933, 1.0}, + {0.0, 13397731.661244001, 1.0} + }, { + {5801387.985862196, 16747164.576555002, 1.0}, + {11602775.971724393, 13397731.661244001, 1.0}, + {5801387.985862196, 10048298.745933, 1.0} + }, { + {5801387.985862196, 10048298.745933, 1.0}, + {11602775.971724393, 13397731.661244001, 1.0}, + {11602775.971724393, 6698865.830622001, 1.0} + }, { + {11602775.971724393, 6698865.830622001, 1.0}, + {11602775.971724393, 13397731.661244001, 1.0}, + {17404163.95758659, 10048298.745933, 1.0} + }, { + {11602775.971724393, 0.0, 1.0}, + {11602775.971724393, 6698865.830622001, 1.0}, + {17404163.95758659, 3349432.9153110003, 1.0} + }, { + {0.0, 33494329.153110005, 1.0}, + {5801387.985862196, 30144896.237799004, 1.0}, + {0.0, 26795463.322488002, 1.0} + }, { + {0.0, 6698865.830622001, 1.0}, + {0.0, 13397731.661244001, 1.0}, + {5801387.985862196, 10048298.745933, 1.0} + }, { + {5801387.985862196, 3349432.9153110003, 1.0}, + {5801387.985862196, 10048298.745933, 1.0}, + {11602775.971724393, 6698865.830622001, 1.0} + }, { + {5801387.985862196, 3349432.9153110003, 1.0}, + {11602775.971724393, 6698865.830622001, 1.0}, + {11602775.971724393, 0.0, 1.0} + }, { + {5801387.985862196, 30144896.237799004, 1.0}, + {2900693.992931098, 31819612.695454504, 1.0}, + {5801387.985862196, 36843762.068421006, 1.0} + }, { + {5801387.985862196, 3349432.9153110003, 1.0}, + {11602775.971724393, 0.0, 1.0}, + {5801387.985862196, 0.0, 1.0} + }, { + {0.0, 26795463.322488002, 1.0}, + {5801387.985862196, 30144896.237799004, 1.0}, + {3867591.9905747976, 26795463.322488002, 1.0} + }, { + {5801387.985862196, 30144896.237799004, 1.0}, + {5801387.985862196, 23446030.407177, 1.0}, + {3867591.9905747976, 26795463.322488002, 1.0} + }, { + {0.0, 20096597.491866, 1.0}, + {1933795.9952873988, 23446030.407177, 1.0}, + {5801387.985862196, 23446030.407177, 1.0} + } +}; + +constexpr double dym_ico_trans[23][3][3] = { + { + { 9.058433279771384e-08, 1.4731493732699052e-08, -0.9269301899999991}, + { -9.44826679987233e-08, 1.1304527499839262e-07, -1.0974189099999994}, + { -8.662754779110161e-08, -1.0789150406568015e-07, 4.077454709999999} + },{ + { 1.5240780519329358e-07, 1.473149373269901e-08, -1.6442540899999978}, + { -3.4333093302050216e-08, 1.1304527499839258e-07, -1.7953209499999985}, + { -1.51633738709386e-08, -1.0789150406568015e-07, 3.248271909999998} + },{ + { 1.525878853745444e-07, 1.504340175606161e-08, -1.6526118100000007}, + { -1.0166102516109274e-08, 1.5490373090569122e-07, -2.9169376700000003}, + { 3.536121881520939e-08, -2.0380342501548998e-08, 0.9033697899999995} + },{ + { 1.557252983599121e-07, 9.609243061078464e-09, -1.5798064100000002}, + { -1.7245441994882394e-10, 1.375942246501773e-07, -2.6850295500000003}, + { -1.96578129712955e-08, 7.491541593592458e-08, -0.37337721000000035} + },{ + { 4.399688326690425e-08, 9.54233233151121e-08, -2.0080176699999996}, + { -9.404803666461074e-08, 1.122924714451482e-07, -1.0873330499999996}, + { -1.1771180391040664e-07, -5.405199315156007e-08, 3.3561273899999997} + },{ + { 4.074817450170371e-08, -7.158726449003567e-08, 1.9642587099999982}, + { -1.1897770528054373e-07, 7.061862589298568e-08, 0.3236332400000001}, + { -9.391868744648748e-08, -1.2052012839388902e-07, 4.500442009999996} + },{ + { 1.5046877525297362e-07, -5.046779687011883e-10, -1.2134956799999999}, + { -4.0509505754953036e-08, -6.772840231043597e-08, 3.120257019999999}, + { 1.8840259480379495e-08, -1.4159603341569342e-07, 3.7568638499999985} + },{ + { 1.55836594139745e-07, 8.792657069014762e-09, -1.52490368}, + { 1.4763566099823772e-08, 2.800736643244269e-08, -0.08634832999999958}, + { 1.1568102351290336e-08, -1.5419177904390005e-07, 4.178749899999998} + },{ + { 9.134716490113195e-08, 1.504340175606163e-08, -1.2973306300000003}, + { 7.890345398644546e-09, 1.5490373090569127e-07, -3.021690130000001}, + { 1.2739806091251417e-07, -2.0380342501549028e-08, 0.3694283599999999} + },{ + { 8.237047688665845e-08, 5.04677968701152e-10, -1.0017709799999996}, + { -1.2064637664394705e-07, 6.772840231043599e-08, -0.8160591599999997}, + { 5.741414913322641e-08, 1.4159603341569342e-07, -1.937212839999999} + },{ + { 1.504687752529736e-07, 5.046779687011514e-10, -1.3968356299999996}, + { -4.0509505754953036e-08, 6.772840231043597e-08, -1.2809642399999992}, + { 1.8840259480379524e-08, 1.415960334156934e-07, -1.713430739999999} + },{ + { 1.55836594139745e-07, -8.792657069014724e-09, -1.3345540299999996}, + { 1.4763566099823759e-08, -2.8007366432442684e-08, -0.6396431699999997}, + { 1.1568102351290311e-08, 1.5419177904390013e-07, -1.7978079499999997} + },{ + { 1.0510891988020954e-07, -8.792657069014762e-09, -0.7459721899999996}, + { 1.1349411668458604e-07, -2.8007366432442694e-08, -1.7851916299999993}, + { 2.6608799545245027e-08, 1.541917790439001e-07, -1.9723217899999996} + },{ + { 9.134716490113195e-08, -1.5043401756061595e-08, -0.5444247299999998}, + { 7.890345398644617e-09, -1.5490373090569122e-07, 0.29016699000000007}, + { 1.2739806091251412e-07, 2.038034250154901e-08, -2.2453721499999992} + },{ + { 6.064058047097081e-08, 8.58140802540336e-08, -3.294437479999999}, + { 1.4427215125754238e-07, -2.530175320502907e-08, 0.7693199999999997}, + { 1.2045502760769865e-08, -1.2896740908748457e-07, 3.4155942999999986} + },{ + { 3.2534318590648264e-08, -8.581408025403363e-08, 0.15470457999999998}, + { -1.4514141392576755e-07, 2.530175320502908e-08, -0.2476383}, + { 5.01230094778404e-08, 1.289674090874846e-07, -1.7680179200000001} + },{ + { 1.524078051932937e-07, -1.4731493732699067e-08, -1.25498709}, + { -3.433309330205022e-08, -1.1304527499839266e-07, 0.49967191}, + { -1.5163373870938614e-08, 1.0789150406568026e-07, -1.17748929} + },{ + { 1.5258788537454444e-07, -1.50434017560616e-08, -1.25498709}, + { -1.016610251610931e-08, -1.5490373090569122e-07, 0.49967191}, + { 3.536121881520941e-08, 2.0380342501549018e-08, -1.17748929} + },{ + { 8.618449605826386e-08, 1.3005744286105568e-07, -4.776339219999996}, + { 1.1907386502737676e-07, -6.894646223375916e-08, 2.2311702599999985}, + { 5.5049746849940485e-08, -5.4481873383947436e-08, 0.9207512499999986} + },{ + { 1.5572529749804938e-07, -9.609244553868475e-09, -1.29138978}, + { -1.7245528181154292e-10, -1.3759422614296728e-07, 0.38371785999999997}, + { -1.9657812971295542e-08, -7.491541593592457e-08, -0.53911579} + },{ + { 1.0510892074207234e-07, 8.792655576224747e-09, -1.2306127199999985}, + { 1.1349411496086066e-07, 2.8007369418022736e-08, -0.6591226399999993}, + { 2.6608799545244997e-08, -1.5419177904390008e-07, 4.091492979999998} + },{ + { 1.0510891815648413e-07, 8.79265706901476e-09, -1.2306127500000001}, + { 1.1349412013203696e-07, 2.8007366432442717e-08, -0.6591225800000001}, + { 2.6608799545245066e-08, -1.5419177904390005e-07, 4.091492979999997} + },{ + { 4.4939794689710465e-08, 9.54233248079021e-08, -2.9126935899999995}, + { 3.249196924242356e-08, 1.1229246845956814e-07, -2.1653487399999993}, + { 1.4683839747935709e-07, -5.405199315156002e-08, 1.0461139699999995} + } +}; + + +inline double det(const PJ_XYZ *u, const PJ_XYZ *v, const PJ_XYZ *w) { + return ( + u->x * (v->y * w->z - v->z * w->y) - + v->x * (u->y * w->z - u->z * w->y) + + w->x * (u->y * v->z - u->z * v->y) + ); +} + +inline bool is_point_in_face(const PJ_XYZ *p, const pj_face * face) { + return ( + det(p, &face->p2, &face->p3) < 0 && + det(&face->p1, p, &face->p3) < 0 && + det(&face->p1, &face->p2, p) < 0 + ); +} + + +inline unsigned char get_ico_face_index(const PJ_XYZ *p) { + for (unsigned char i=0; i < 23; i++) { + if (is_point_in_face(p, &ico_faces[i])) { + return i; + } + } + + return 23; +} + +inline unsigned char get_dym_face_index(const PJ_XY *p) { + const PJ_XYZ pp{p->x, p->y, 1.0}; + for (unsigned char i=0; i < 23; i++) { + if (is_point_in_face(&pp, &dymaxion_faces[i])) { + return i; + } + } + + return 23; +} + +inline PJ_XY ico_to_dym(const PJ_XYZ * p, unsigned char face_id) { + return PJ_XY{ + ico_dym_trans[face_id][0][0] * p->x + + ico_dym_trans[face_id][0][1] * p->y + + ico_dym_trans[face_id][0][2] * p->z + + ico_dym_trans[face_id][0][3], + ico_dym_trans[face_id][1][0] * p->x + + ico_dym_trans[face_id][1][1] * p->y + + ico_dym_trans[face_id][1][2] * p->z + + ico_dym_trans[face_id][1][3], + }; +} + +inline PJ_XYZ dym_to_ico(const PJ_XY * p, unsigned char face_id) { + return PJ_XYZ{ + dym_ico_trans[face_id][0][0] * p->x + + dym_ico_trans[face_id][0][1] * p->y + + dym_ico_trans[face_id][0][2], + dym_ico_trans[face_id][1][0] * p->x + + dym_ico_trans[face_id][1][1] * p->y + + dym_ico_trans[face_id][1][2], + dym_ico_trans[face_id][2][0] * p->x + + dym_ico_trans[face_id][2][1] * p->y + + dym_ico_trans[face_id][2][2], + }; +} + +inline PJ_XYZ cartesian_to_ico(const PJ_XYZ *p, unsigned char face_id) { + const PJ_XYZ * center = &ico_centers[face_id]; + const PJ_XYZ * normal = &ico_normals[face_id]; + + double a = 1.0 - ( + center->x * normal->x + + center->y * normal->y + + center->z * normal->z + ) / ( + p->x * normal->x + + p->y * normal->y + + p->z * normal->z + ); + + return PJ_XYZ{ + p->x - a * p->x, + p->y - a * p->y, + p->z - a * p->z, + }; +} + + +// ============================================ +// +// The Forward and Inverse Functions +// +// ============================================ +static PJ_XY dymaxion_forward(PJ_LP lp, PJ *P) { + double lat; + + /* Convert the geodetic latitude to a geocentric latitude. + * This corresponds to the shift from the ellipsoid to the sphere + * described in [LK12]. */ + if (P->es != 0.0) { + double one_minus_f = 1.0 - (P->a - P->b) / P->a; + double one_minus_f_squared = one_minus_f * one_minus_f; + lat = atan(one_minus_f_squared * tan(lp.phi)); + } else { + lat = lp.phi; + } + + // Convert the lat/long to x,y,z on the unit sphere + double x, y, z; + double sinlat, coslat; + double sinlon, coslon; + + sinlat = sin(lat); + coslat = cos(lat); + sinlon = sin(lp.lam); + coslon = cos(lp.lam); + x = coslat * coslon; + y = coslat * sinlon; + z = sinlat; + + PJ_XYZ cartesianPoint{x, y, z}; + + // printf("CARTESIAN: %lf, %lf, %lf\n", x, y, z); + + unsigned char face_id = get_ico_face_index(&cartesianPoint); + // printf("FACE ID: %d\n", face_id); + + PJ_XYZ icoPoint = cartesian_to_ico(&cartesianPoint, face_id); + + // printf("ICO: %lf, %lf, %lf\n", icoPoint.x, icoPoint.y, icoPoint.z); + + + PJ_XY dymaxionPoint = ico_to_dym(&icoPoint, face_id); + + // printf("PROJ OUT: %lf, %lf\n", dymaxionPoint.x, dymaxionPoint.y); + + + return dymaxionPoint; +} + + +static PJ_LP dymaxion_inverse(PJ_XY xy, PJ *P) { + PJ_LP lp = {0.0, 0.0}; + + // printf("INVPROJ IN: %lf, %lf\n", xy.x, xy.y); + + + unsigned char face_id = get_dym_face_index(&xy); + // printf("FACE ID: %d\n", face_id); + + if (face_id == 23) { + lp.lam = HUGE_VAL; + lp.phi = HUGE_VAL; + return lp; + } + + + PJ_XYZ sphereCoords = dym_to_ico(&xy, face_id); + + // printf("ICO: %lf, %lf, %lf\n", sphereCoords.x, sphereCoords.y, sphereCoords.z); + // unsigned char other_face_id = get_ico_face_index(&sphereCoords); + // printf("OTHER FACE ID: %d\n", other_face_id); + + double norm = sqrtl((sphereCoords.x * sphereCoords.x) + (sphereCoords.y * sphereCoords.y) + (sphereCoords.z * sphereCoords.z)); + double q = sphereCoords.x / norm; + double r = sphereCoords.y / norm; + double s = sphereCoords.z / norm; + + // printf("CARTESIAN: %lf, %lf, %lf\n", q, r, s); + + // Get the spherical angles from the x y z + lp.phi = acos(-s) - M_HALFPI; + lp.lam = atan2(r, q); + + // printf("SPHERE: %lf, %lf\n", lp.phi, lp.lam); + + + /* Apply the shift from the sphere to the ellipsoid as described + * in [LK12]. */ + if (P->es != 0.0) { + int invert_sign; + volatile double tanphi, xa; + invert_sign = (lp.phi < 0.0 ? 1 : 0); + tanphi = tan(lp.phi); + double one_minus_f = 1.0 - (P->a - P->b) / P->a; + double a_squared = P->a * P->a; + xa = P->b / sqrt(tanphi * tanphi + one_minus_f * one_minus_f); + lp.phi = atan(sqrt(a_squared - xa * xa) / (one_minus_f * xa)); + if (invert_sign) { + lp.phi = -lp.phi; + } + } + + // printf("INVPROJ OUT (phi, lam): %lf, %lf\n", lp.phi, lp.lam); + + + return lp; +} + +PJ *PJ_PROJECTION(dymaxion) { + P->left = PJ_IO_UNITS_RADIANS; + P->right = PJ_IO_UNITS_PROJECTED; + P->from_greenwich = -P->lam0; + + P->inv = dymaxion_inverse; + P->fwd = dymaxion_forward; + + return P; +} From bd72f6bb706418f9f016ea394e56aa40702d53e5 Mon Sep 17 00:00:00 2001 From: Pierre Louvart Date: Thu, 12 Sep 2024 21:36:15 +0200 Subject: [PATCH 02/23] - Fix inadequate normals on split polygons. --- src/projections/dymaxion.cpp | 553 +++++++++++++++++++++++------------ 1 file changed, 370 insertions(+), 183 deletions(-) diff --git a/src/projections/dymaxion.cpp b/src/projections/dymaxion.cpp index c01f2e55fc..d22c2bbb1e 100644 --- a/src/projections/dymaxion.cpp +++ b/src/projections/dymaxion.cpp @@ -145,103 +145,197 @@ constexpr PJ_XYZ ico_centers[23] = { {-0.66606089, 0.42586898, 0.21776448} }; constexpr PJ_XYZ ico_normals[23] = { - { 0.81125347, 0.34489532, 0.47213877}, - { 0.21993078, 0.65836918, 0.71984754}, - {-0.21392348, 0.14781718, 0.96560179}, - { 0.10926253, -0.48119516, 0.86977751}, - { 0.74285673, -0.35939417, 0.56480059}, - { 0.8512304 , 0.47223438, -0.22891374}, - { 0.28461481, 0.8644081 , -0.41447926}, - {-0.10554981, 0.97944573, 0.17188746}, - {-0.80754076, 0.15335525, 0.5695262 }, - {-0.8512304 , -0.47223438, 0.22891374}, - {-0.28461481, -0.8644081 , 0.41447926}, - { 0.10554981, -0.97944573, -0.17188746}, - { 0.74056215, -0.66732996, -0.07898376}, - { 0.80754076, -0.15335525, -0.5695262 }, - {-0.74285673, 0.35939417, -0.56480059}, - {-0.81125347, -0.34489532, -0.47213877}, - {-0.21993078, -0.65836918, -0.71984754}, - { 0.21392348, -0.14781718, -0.96560179}, - {-0.09351474, 0.65868628, -0.7465838 }, - {-0.11988286, 0.28112261, -0.95215449}, - {-0.78831255, 0.5956096 , -0.15431307}, - {-0.55241119, 0.82512383, 0.11837456}, - {-0.81225557, 0.51934358, 0.26556192} + { + 0.8112534716456183, 0.3448953244235397, 0.4721387719026189 + }, { + 0.21993078167242514, 0.6583691769191125, 0.7198475381327677 + }, { + -0.21392348218574597, 0.1478171768398566, 0.9656017947376752 + }, { + 0.10926252593733311, -0.48119515565604315, 0.8697775132750616 + }, { + 0.7428567271237952, -0.3593941714860216, 0.5648005953155497 + }, { + 0.8512303999921011, 0.4722343774266651, -0.22891373682183738 + }, { + 0.28461480749719364, 0.8644080979012073, -0.4144792535654255 + }, { + -0.1055498134715015, 0.9794457311974099, 0.17188745304792394 + }, { + -0.80754076069938, 0.15335524153301364, 0.5695261975567215 + }, { + -0.8512303999921011, -0.4722343774266651, 0.22891373682183735 + }, { + -0.28461480749719364, -0.8644080979012073, 0.4144792535654255 + }, { + 0.10554981347150154, -0.97944573119741, -0.17188745304792397 + }, { + 0.7405621455042509, -0.6673299596621295, -0.07898375518726185 + }, { + 0.80754076069938, -0.15335524153301364, -0.5695261975567215 + }, { + -0.7428567271237952, 0.3593941714860216, -0.5648005953155497 + }, { + -0.8112534716456183, -0.3448953244235397, -0.4721387719026189 + }, { + -0.21993078167242514, -0.6583691769191125, -0.7198475381327677 + }, { + 0.21392348218574597, -0.1478171768398566, -0.9656017947376752 + }, { + -0.1092625236946045, 0.48119515875463253, -0.8697775118425345 + }, { + -0.10926252412771359, 0.4811951525529661, -0.8697775152191327 + }, { + -0.7405621389792739, 0.6673299643797594, 0.07898377650727696 + }, { + -0.7405621607654073, 0.6673299431834946, 0.07898375132383098 + }, { + -0.7405621367680706, 0.6673299714231342, 0.07898373773067752 + } }; constexpr double ico_dym_trans[23][2][4] = { + { { - {3676785.5510927686, -3835017.5258469363, -3516181.100781365, 13536571.967011793}, - {597946.1042109424, 4588467.130704259, -4379277.462052473, 23446030.407177} - }, { - {6186177.998246177, -1393567.906883936, -615475.9397151419, 9668980.022865457}, - {597946.093114201, 4588467.19100263, -4379277.400388917, 23446030.35137834} - }, { - {6193487.4205306955, -412638.4248002627, 1435299.1378493956, 7735184.010119925}, - {610606.3190418222, 6287486.747151732, -827230.8805747802, 20096597.543368153} - }, { - {6320833.944116932, -6999.892727576209, -797903.6645324827, 9668980.01852922}, - {390035.65327668283, 5584900.236424718, 3040789.8291663616, 16747164.616387902} - }, { - {1785817.7590237681, -3817376.0879736473, -4777879.8689040495, 15470367.924944565}, - {3873198.442246702, 4557911.138766957, -2193951.03617877, 20096597.49643075} - }, { - {1653953.7215915888, -4829262.34292155, -3812125.819798014, 15470368.002101175}, - {-2905701.4190057977, 2866384.5748423464, -4891868.701844473, 26795463.40708426} - }, { - {6107473.601907308, -1644266.3344992409, 764719.3344694556, 9668979.981535126}, - {-20484.64090943463, -2749071.518667839, -5747332.184563468, 30144896.19948345} - }, { - {6325351.40269263, 599247.8045318229, 469545.1276272928, 7735184.023318606}, - {356890.77120627166, 1136808.9882550093, -6258588.8944518985, 26795463.32486729} - }, { - {3707748.665652811, 320266.29512553854, 5171041.496392702, 3867592.035741229}, - {610606.2571372315, 6287486.77106971, -827230.7444765394, 20096597.416174263} - }, { - {3343388.1054673023, -4896993.030290109, 2330419.6578763095, 3867592.0439363136}, - {20484.769920770817, 2749071.5830884464, 5747332.153289897, 13397731.73801166} - }, { - {6107473.60190731, -1644266.3344992383, 764719.3344694556, 7735183.976051465}, - {20484.640909436934, 2749071.5186678423, 5747332.184563471, 13397731.622928448} - }, { - {6325351.402692626, 599247.8045318197, 469545.1276272917, 9668979.934267987}, - {-356890.771206269, -1136808.988255014, 6258588.894451901, 10048298.748312276} - }, { - {4266333.312707111, 4606685.514783113, 1080041.5952454251, 13536571.999992047}, - {-356890.7685546608, -1136809.0066234802, 6258588.89126666, 10048298.733154824} - }, { - {3707748.6656528125, 320266.2951255404, 5171041.496392703, 13536571.921845356}, - {-610606.2571372343, -6287486.771069713, 827230.7444765412, 3349432.839619261} - }, { - {2461379.3653720734, 5855954.878351068, 488922.6024620175, 1933795.9726568952}, - {3483162.766967333, -1026989.0986009572, -5234740.860790558, 30144896.267866686} - }, { - {1320556.259205771, -5891237.862543248, 2034474.981967402, 1933795.9952873993}, - {-3483162.743619373, 1026989.0359898619, 5234740.88860963, 10048298.745932998} - }, { - {6186177.998246178, -1393567.906883938, -615475.9397151434, 7735183.934721128}, - {-597946.0931142012, -4588467.191002626, 4379277.400388914, 6698865.774823346} - }, { - {6193487.420530697, -412638.4248002642, 1435299.1378493954, 9668979.94746666}, - {-610606.3190418243, -6287486.747151733, 827230.8805747859, 3349432.9668131615} - }, { - {3631143.294565724, 4247670.019959572, 3292753.7141836006, 4834490.01017019}, - {5202228.852835585, -2460476.189043276, -2822411.933114077, 32936090.315075427} - }, { - {6320833.984249294, -6999.986858507935, -797903.6226051609, 7735183.986468951}, - {-236523.47825744975, -6260972.143136178, -1818765.4625549014, 1116477.6505621031} - }, { - {3665612.680171031, 5148002.543997674, 1144110.7942403506, 3222993.3353615967}, - {1397369.4993098697, 199220.39584036605, -6369559.895786125, 27911940.952937342} - }, { - {5467774.722326167, 3524051.3707974004, 951903.3183405161, 5156789.374365881}, - {356890.8085771865, 1136808.9426368838, -6258588.900606924, 26795463.37416993} - }, { - {2424810.9279973777, 777520.1747496846, 5896048.635731078, 2578394.7320210026}, - {2832719.751595245, 5495499.807718434, -2082980.0653286842, 22329552.792623065} + 3676785.549175448, -3835017.5266620647, -3516181.101897219, 13536571.968889877 + }, { + 597946.080039791, 4588467.120428165, -4379277.476119764, 23446030.430853583 } + }, { + { + 6186178.005526091, -1393567.8850913076, -615475.9158875226, 9668979.99656166 + }, { + 597946.0790283178, 4588467.148836121, -4379277.446492919, 23446030.4022735 + } + }, { + { + 6193487.416382644, -412638.42193403625, 1435299.1565727487, 7735183.994711302 + }, { + 610606.2949588482, 6287486.763792622, -827230.771869741, 20096597.453907937 + } + }, { + { + 6320833.951539666, -6999.925417495968, -797903.6054442794, 9668979.964544488 + }, { + 390035.65785509185, 5584900.2162612835, 3040789.86561249, 16747164.583089648 + } + }, { + { + 1785817.7160921493, -3817376.067203325, -4777879.901545344, 15470367.97086971 + }, { + 3873198.4648612146, 4557911.12782605, -2193951.0189847522, 20096597.472239383 + } + }, { + { + 1653953.7567438218, -4829262.323420258, -3812125.829251187, 15470367.969285296 + }, { + -2905701.3326818133, 2866384.6227320307, -4891868.725058803, 26795463.326497696 + } + }, { + { + 6107473.604777472, -1644266.325782215, 764719.3302896866, 9668979.973521523 + }, { + -20484.65208776388, -2749071.5526177026, -5747332.168284684, 30144896.23069373 + } + }, { + { + 6325351.398413758, 599247.844237452, 469545.1345954169, 7735183.991104206 + }, { + 356890.77665911405, 1136808.9376555325, -6258588.903331836, 26795463.365920186 + } + }, { + { + 3707748.6155441254, 320266.3046413801, 5171041.531732354, 3867591.9864321505 + }, { + 610606.2818745336, 6287486.766371998, -827230.7619227654, 20096597.44051682 + } + }, { + { + 3343388.0482846545, -4896993.062013145, 2330419.6732539237, 3867591.9905542377 + }, { + 20484.69631605078, 2749071.5422549895, 5747332.173083752, 13397731.669298988 + } + }, { + { + 6107473.604777474, -1644266.3257822143, 764719.330289686, 7735183.984065069 + }, { + 20484.65208776346, 2749071.552617706, 5747332.168284684, 13397731.654138729 + } + }, { + { + 6325351.398413757, 599247.8442374519, 469545.1345954159, 9668979.966482382 + }, { + -356890.77665911167, -1136808.9376555379, 6258588.903331836, 10048298.789365184 + } + }, { + { + 4266333.348411551, 4606685.482609389, 1080041.5914374113, 13536571.961679665 + }, { + -356890.81480763154, -1136808.9649443403, 6258588.896199714, 10048298.78278621 + } + }, { + { + 3707748.6155441264, 320266.30464138015, 5171041.531732352, 13536571.97115444 + }, { + -610606.2818745337, -6287486.766372, 827230.7619227694, 3349432.8639618154 + } + }, { + { + 2461379.4064226267, 5855954.858490806, 488922.63367311924, 1933796.0165698116 + }, { + 3483162.7410947136, -1026989.0860837825, -5234740.880461738, 30144896.24019003 + } + }, { + { + 1320556.279179943, -5891237.854051452, 2034474.9935921053, 1933796.0148528814 + }, { + -3483162.72987335, 1026989.0418338334, 5234740.896609632, 10048298.759397767 + } + }, { + { + 6186178.005526091, -1393567.885091309, -615475.9158875229, 7735183.961024929 + }, { + -597946.0790283154, -4588467.148836119, 4379277.446492919, 6698865.825718503 + } + }, { + { + 6193487.416382645, -412638.4219340361, 1435299.156572748, 9668979.962875288 + }, { + -610606.2949588535, -6287486.763792623, 827230.7718697439, 3349432.877352944 + } + }, { + { + 3498197.81693495, 4833165.559061878, 2234449.5231911456, 3867591.983769496 + }, { + 5278984.96116607, -2798512.200701845, -2211399.7153384583, 33494329.158408284 + } + }, { + { + 6320833.983680945, -6999.984355479206, -797903.6271294819, 7735183.9823354 + }, { + -390035.68446349393, -5584900.177255948, -3040789.814780467, 0.044359486997177525 + } + }, { + { + 4266333.41772867, 4606685.445409489, 1080041.6365273518, 3867592.0700864717 + }, { + 356890.72771489987, 1136809.053212709, -6258588.866576485, 26795463.265809294 + } + }, { + { + 4266333.204506115, 4606685.540218764, 1080041.5936954806, 3867591.897018196 + }, { + 356890.8007120557, 1136808.9497242568, -6258588.899768077, 26795463.365730304 + } + }, { + { + 1824090.1118675405, 1318837.3514699321, 5960117.7705610385, 1933795.9110601672 + }, { + 3873198.583330483, 4557911.083457602, -2193951.0468033054, 23446030.547617782 + } + } }; + constexpr pj_face dymaxion_faces[23] = { { {11602775.971724393, 20096597.491866, 1.0}, @@ -339,102 +433,195 @@ constexpr pj_face dymaxion_faces[23] = { }; constexpr double dym_ico_trans[23][3][3] = { + { + { + 9.058433279771384e-08, 1.4731493732699052e-08, -0.9269301899999991 + }, { + -9.44826679987233e-08, 1.1304527499839262e-07, -1.0974189099999994 + }, { + -8.662754779110161e-08, -1.0789150406568015e-07, 4.077454709999999 + } + }, { + { + 1.5240780519329358e-07, 1.473149373269901e-08, -1.6442540899999978 + }, { + -3.4333093302050216e-08, 1.1304527499839258e-07, -1.7953209499999985 + }, { + -1.51633738709386e-08, -1.0789150406568015e-07, 3.248271909999998 + } + }, { + { + 1.525878853745444e-07, 1.504340175606161e-08, -1.6526118100000007 + }, { + -1.0166102516109274e-08, 1.5490373090569122e-07, -2.9169376700000003 + }, { + 3.536121881520939e-08, -2.0380342501548998e-08, 0.9033697899999995 + } + }, { + { + 1.557252983599121e-07, 9.609243061078464e-09, -1.5798064100000002 + }, { + -1.7245441994882394e-10, 1.375942246501773e-07, -2.6850295500000003 + }, { + -1.96578129712955e-08, 7.491541593592458e-08, -0.37337721000000035 + } + }, { + { + 4.399688326690425e-08, 9.54233233151121e-08, -2.0080176699999996 + }, { + -9.404803666461074e-08, 1.122924714451482e-07, -1.0873330499999996 + }, { + -1.1771180391040664e-07, -5.405199315156007e-08, 3.3561273899999997 + } + }, { + { + 4.074817450170371e-08, -7.158726449003567e-08, 1.9642587099999982 + }, { + -1.1897770528054373e-07, 7.061862589298568e-08, 0.3236332400000001 + }, { + -9.391868744648748e-08, -1.2052012839388902e-07, 4.500442009999996 + } + }, { + { + 1.5046877525297362e-07, -5.046779687011883e-10, -1.2134956799999999 + }, { + -4.0509505754953036e-08, -6.772840231043597e-08, 3.120257019999999 + }, { + 1.8840259480379495e-08, -1.4159603341569342e-07, 3.7568638499999985 + } + }, { + { + 1.55836594139745e-07, 8.792657069014762e-09, -1.52490368 + }, { + 1.4763566099823772e-08, 2.800736643244269e-08, -0.08634832999999958 + }, { + 1.1568102351290336e-08, -1.5419177904390005e-07, 4.178749899999998 + } + }, { + { + 9.134716490113195e-08, 1.504340175606163e-08, -1.2973306300000003 + }, { + 7.890345398644546e-09, 1.5490373090569127e-07, -3.021690130000001 + }, { + 1.2739806091251417e-07, -2.0380342501549028e-08, 0.3694283599999999 + } + }, { { - { 9.058433279771384e-08, 1.4731493732699052e-08, -0.9269301899999991}, - { -9.44826679987233e-08, 1.1304527499839262e-07, -1.0974189099999994}, - { -8.662754779110161e-08, -1.0789150406568015e-07, 4.077454709999999} - },{ - { 1.5240780519329358e-07, 1.473149373269901e-08, -1.6442540899999978}, - { -3.4333093302050216e-08, 1.1304527499839258e-07, -1.7953209499999985}, - { -1.51633738709386e-08, -1.0789150406568015e-07, 3.248271909999998} - },{ - { 1.525878853745444e-07, 1.504340175606161e-08, -1.6526118100000007}, - { -1.0166102516109274e-08, 1.5490373090569122e-07, -2.9169376700000003}, - { 3.536121881520939e-08, -2.0380342501548998e-08, 0.9033697899999995} - },{ - { 1.557252983599121e-07, 9.609243061078464e-09, -1.5798064100000002}, - { -1.7245441994882394e-10, 1.375942246501773e-07, -2.6850295500000003}, - { -1.96578129712955e-08, 7.491541593592458e-08, -0.37337721000000035} - },{ - { 4.399688326690425e-08, 9.54233233151121e-08, -2.0080176699999996}, - { -9.404803666461074e-08, 1.122924714451482e-07, -1.0873330499999996}, - { -1.1771180391040664e-07, -5.405199315156007e-08, 3.3561273899999997} - },{ - { 4.074817450170371e-08, -7.158726449003567e-08, 1.9642587099999982}, - { -1.1897770528054373e-07, 7.061862589298568e-08, 0.3236332400000001}, - { -9.391868744648748e-08, -1.2052012839388902e-07, 4.500442009999996} - },{ - { 1.5046877525297362e-07, -5.046779687011883e-10, -1.2134956799999999}, - { -4.0509505754953036e-08, -6.772840231043597e-08, 3.120257019999999}, - { 1.8840259480379495e-08, -1.4159603341569342e-07, 3.7568638499999985} - },{ - { 1.55836594139745e-07, 8.792657069014762e-09, -1.52490368}, - { 1.4763566099823772e-08, 2.800736643244269e-08, -0.08634832999999958}, - { 1.1568102351290336e-08, -1.5419177904390005e-07, 4.178749899999998} - },{ - { 9.134716490113195e-08, 1.504340175606163e-08, -1.2973306300000003}, - { 7.890345398644546e-09, 1.5490373090569127e-07, -3.021690130000001}, - { 1.2739806091251417e-07, -2.0380342501549028e-08, 0.3694283599999999} - },{ - { 8.237047688665845e-08, 5.04677968701152e-10, -1.0017709799999996}, - { -1.2064637664394705e-07, 6.772840231043599e-08, -0.8160591599999997}, - { 5.741414913322641e-08, 1.4159603341569342e-07, -1.937212839999999} - },{ - { 1.504687752529736e-07, 5.046779687011514e-10, -1.3968356299999996}, - { -4.0509505754953036e-08, 6.772840231043597e-08, -1.2809642399999992}, - { 1.8840259480379524e-08, 1.415960334156934e-07, -1.713430739999999} - },{ - { 1.55836594139745e-07, -8.792657069014724e-09, -1.3345540299999996}, - { 1.4763566099823759e-08, -2.8007366432442684e-08, -0.6396431699999997}, - { 1.1568102351290311e-08, 1.5419177904390013e-07, -1.7978079499999997} - },{ - { 1.0510891988020954e-07, -8.792657069014762e-09, -0.7459721899999996}, - { 1.1349411668458604e-07, -2.8007366432442694e-08, -1.7851916299999993}, - { 2.6608799545245027e-08, 1.541917790439001e-07, -1.9723217899999996} - },{ - { 9.134716490113195e-08, -1.5043401756061595e-08, -0.5444247299999998}, - { 7.890345398644617e-09, -1.5490373090569122e-07, 0.29016699000000007}, - { 1.2739806091251412e-07, 2.038034250154901e-08, -2.2453721499999992} - },{ - { 6.064058047097081e-08, 8.58140802540336e-08, -3.294437479999999}, - { 1.4427215125754238e-07, -2.530175320502907e-08, 0.7693199999999997}, - { 1.2045502760769865e-08, -1.2896740908748457e-07, 3.4155942999999986} - },{ - { 3.2534318590648264e-08, -8.581408025403363e-08, 0.15470457999999998}, - { -1.4514141392576755e-07, 2.530175320502908e-08, -0.2476383}, - { 5.01230094778404e-08, 1.289674090874846e-07, -1.7680179200000001} - },{ - { 1.524078051932937e-07, -1.4731493732699067e-08, -1.25498709}, - { -3.433309330205022e-08, -1.1304527499839266e-07, 0.49967191}, - { -1.5163373870938614e-08, 1.0789150406568026e-07, -1.17748929} - },{ - { 1.5258788537454444e-07, -1.50434017560616e-08, -1.25498709}, - { -1.016610251610931e-08, -1.5490373090569122e-07, 0.49967191}, - { 3.536121881520941e-08, 2.0380342501549018e-08, -1.17748929} - },{ - { 8.618449605826386e-08, 1.3005744286105568e-07, -4.776339219999996}, - { 1.1907386502737676e-07, -6.894646223375916e-08, 2.2311702599999985}, - { 5.5049746849940485e-08, -5.4481873383947436e-08, 0.9207512499999986} - },{ - { 1.5572529749804938e-07, -9.609244553868475e-09, -1.29138978}, - { -1.7245528181154292e-10, -1.3759422614296728e-07, 0.38371785999999997}, - { -1.9657812971295542e-08, -7.491541593592457e-08, -0.53911579} - },{ - { 1.0510892074207234e-07, 8.792655576224747e-09, -1.2306127199999985}, - { 1.1349411496086066e-07, 2.8007369418022736e-08, -0.6591226399999993}, - { 2.6608799545244997e-08, -1.5419177904390008e-07, 4.091492979999998} - },{ - { 1.0510891815648413e-07, 8.79265706901476e-09, -1.2306127500000001}, - { 1.1349412013203696e-07, 2.8007366432442717e-08, -0.6591225800000001}, - { 2.6608799545245066e-08, -1.5419177904390005e-07, 4.091492979999997} - },{ - { 4.4939794689710465e-08, 9.54233248079021e-08, -2.9126935899999995}, - { 3.249196924242356e-08, 1.1229246845956814e-07, -2.1653487399999993}, - { 1.4683839747935709e-07, -5.405199315156002e-08, 1.0461139699999995} + 8.237047688665845e-08, 5.04677968701152e-10, -1.0017709799999996 + }, { + -1.2064637664394705e-07, 6.772840231043599e-08, -0.8160591599999997 + }, { + 5.741414913322641e-08, 1.4159603341569342e-07, -1.937212839999999 } + }, { + { + 1.504687752529736e-07, 5.046779687011514e-10, -1.3968356299999996 + }, { + -4.0509505754953036e-08, 6.772840231043597e-08, -1.2809642399999992 + }, { + 1.8840259480379524e-08, 1.415960334156934e-07, -1.713430739999999 + } + }, { + { + 1.55836594139745e-07, -8.792657069014724e-09, -1.3345540299999996 + }, { + 1.4763566099823759e-08, -2.8007366432442684e-08, -0.6396431699999997 + }, { + 1.1568102351290311e-08, 1.5419177904390013e-07, -1.7978079499999997 + } + }, { + { + 1.0510891988020954e-07, -8.792657069014762e-09, -0.7459721899999996 + }, { + 1.1349411668458604e-07, -2.8007366432442694e-08, -1.7851916299999993 + }, { + 2.6608799545245027e-08, 1.541917790439001e-07, -1.9723217899999996 + } + }, { + { + 9.134716490113195e-08, -1.5043401756061595e-08, -0.5444247299999998 + }, { + 7.890345398644617e-09, -1.5490373090569122e-07, 0.29016699000000007 + }, { + 1.2739806091251412e-07, 2.038034250154901e-08, -2.2453721499999992 + } + }, { + { + 6.064058047097081e-08, 8.58140802540336e-08, -3.294437479999999 + }, { + 1.4427215125754238e-07, -2.530175320502907e-08, 0.7693199999999997 + }, { + 1.2045502760769865e-08, -1.2896740908748457e-07, 3.4155942999999986 + } + }, { + { + 3.2534318590648264e-08, -8.581408025403363e-08, 0.15470457999999998 + }, { + -1.4514141392576755e-07, 2.530175320502908e-08, -0.2476383 + }, { + 5.01230094778404e-08, 1.289674090874846e-07, -1.7680179200000001 + } + }, { + { + 1.524078051932937e-07, -1.4731493732699067e-08, -1.25498709 + }, { + -3.433309330205022e-08, -1.1304527499839266e-07, 0.49967191 + }, { + -1.5163373870938614e-08, 1.0789150406568026e-07, -1.17748929 + } + }, { + { + 1.5258788537454444e-07, -1.50434017560616e-08, -1.25498709 + }, { + -1.016610251610931e-08, -1.5490373090569122e-07, 0.49967191 + }, { + 3.536121881520941e-08, 2.0380342501549018e-08, -1.17748929 + } + }, { + { + 8.618449605826386e-08, 1.3005744286105568e-07, -4.776339219999996 + }, { + 1.1907386502737676e-07, -6.894646223375916e-08, 2.2311702599999985 + }, { + 5.5049746849940485e-08, -5.4481873383947436e-08, 0.9207512499999986 + } + }, { + { + 1.5572529749804938e-07, -9.609244553868475e-09, -1.29138978 + }, { + -1.7245528181154292e-10, -1.3759422614296728e-07, 0.38371785999999997 + }, { + -1.9657812971295542e-08, -7.491541593592457e-08, -0.53911579 + } + }, { + { + 1.0510892074207234e-07, 8.792655576224747e-09, -1.2306127199999985 + }, { + 1.1349411496086066e-07, 2.8007369418022736e-08, -0.6591226399999993 + }, { + 2.6608799545244997e-08, -1.5419177904390008e-07, 4.091492979999998 + } + }, { + { + 1.0510891815648413e-07, 8.79265706901476e-09, -1.2306127500000001 + }, { + 1.1349412013203696e-07, 2.8007366432442717e-08, -0.6591225800000001 + }, { + 2.6608799545245066e-08, -1.5419177904390005e-07, 4.091492979999997 + } + }, { + { + 4.4939794689710465e-08, 9.54233248079021e-08, -2.9126935899999995 + }, { + 3.249196924242356e-08, 1.1229246845956814e-07, -2.1653487399999993 + }, { + 1.4683839747935709e-07, -5.405199315156002e-08, 1.0461139699999995 + } + } }; + inline double det(const PJ_XYZ *u, const PJ_XYZ *v, const PJ_XYZ *w) { return ( u->x * (v->y * w->z - v->z * w->y) - @@ -570,6 +757,7 @@ static PJ_XY dymaxion_forward(PJ_LP lp, PJ *P) { // printf("PROJ OUT: %lf, %lf\n", dymaxionPoint.x, dymaxionPoint.y); + return dymaxionPoint; } @@ -629,7 +817,6 @@ static PJ_LP dymaxion_inverse(PJ_XY xy, PJ *P) { // printf("INVPROJ OUT (phi, lam): %lf, %lf\n", lp.phi, lp.lam); - return lp; } From ef2f17d2dc827297f57f10ceb4b9eec919c188db Mon Sep 17 00:00:00 2001 From: Pierre Louvart Date: Sun, 22 Sep 2024 11:42:20 +0200 Subject: [PATCH 03/23] - Fix numerical issue due to improper center position --- src/projections/dymaxion.cpp | 718 ++++++----------------------------- 1 file changed, 114 insertions(+), 604 deletions(-) diff --git a/src/projections/dymaxion.cpp b/src/projections/dymaxion.cpp index d22c2bbb1e..ec0db6ab05 100644 --- a/src/projections/dymaxion.cpp +++ b/src/projections/dymaxion.cpp @@ -23,603 +23,18 @@ namespace { // anonymous namespace }; } // anonymous namespace - -constexpr pj_face ico_faces[23] = { - { - { 0.42015243, 0.07814525, 0.90408255}, - { 0.51883673, 0.83542038, 0.18133184}, - { 0.99500944, -0.0913478 , 0.04014718} - }, { - { 0.42015243, 0.07814525, 0.90408255}, - { -0.41468223, 0.65596241, 0.63067581}, - { 0.51883673, 0.83542038, 0.18133184} - }, { - { 0.42015243, 0.07814525, 0.90408255}, - { -0.51545596, -0.3817169 , 0.76720099}, - { -0.41468223, 0.65596241, 0.63067581} - }, { - { 0.42015243, 0.07814525, 0.90408255}, - { 0.3557814 , -0.84358 , 0.40223423}, - { -0.51545596, -0.3817169 , 0.76720099} - }, { - { 0.42015243, 0.07814525, 0.90408255}, - { 0.99500944, -0.0913478 , 0.04014718}, - { 0.3557814 , -0.84358 , 0.40223423} - }, { - { 0.99500944, -0.0913478 , 0.04014718}, - { 0.51883673, 0.83542038, 0.18133184}, - { 0.51545596, 0.3817169 , -0.76720099} - }, { - { 0.51545596, 0.3817169 , -0.76720099}, - { 0.51883673, 0.83542038, 0.18133184}, - { -0.3557814 , 0.84358 , -0.40223423} - }, { - { -0.3557814 , 0.84358 , -0.40223423}, - { 0.51883673, 0.83542038, 0.18133184}, - { -0.41468223, 0.65596241, 0.63067581} - }, { - { -0.51545596, -0.3817169 , 0.76720099}, - { -0.99500944, 0.0913478 , -0.04014718}, - { -0.41468223, 0.65596241, 0.63067581} - }, { - { -0.51545596, -0.3817169 , 0.76720099}, - { -0.51883673, -0.83542038, -0.18133184}, - { -0.99500944, 0.0913478 , -0.04014718} - }, { - { -0.51545596, -0.3817169 , 0.76720099}, - { 0.3557814 , -0.84358 , 0.40223423}, - { -0.51883673, -0.83542038, -0.18133184} - }, { - { -0.51883673, -0.83542038, -0.18133184}, - { 0.3557814 , -0.84358 , 0.40223423}, - { 0.41468223, -0.65596241, -0.63067581} - }, { - { 0.41468223, -0.65596241, -0.63067581}, - { 0.3557814 , -0.84358 , 0.40223423}, - { 0.99500944, -0.0913478 , 0.04014718} - }, { - { 0.51545596, 0.3817169 , -0.76720099}, - { 0.41468223, -0.65596241, -0.63067581}, - { 0.99500944, -0.0913478 , 0.04014718} - }, { - { -0.42015243, -0.07814525, -0.90408255}, - { -0.3557814 , 0.84358 , -0.40223423}, - { -0.99500944, 0.0913478 , -0.04014718} - }, { - { -0.42015243, -0.07814525, -0.90408255}, - { -0.99500944, 0.0913478 , -0.04014718}, - { -0.51883673, -0.83542038, -0.18133184} - }, { - { -0.42015243, -0.07814525, -0.90408255}, - { -0.51883673, -0.83542038, -0.18133184}, - { 0.41468223, -0.65596241, -0.63067581} - }, { - { -0.42015243, -0.07814525, -0.90408255}, - { 0.41468223, -0.65596241, -0.63067581}, - { 0.51545596, 0.3817169 , -0.76720099} - }, { - { -0.3557814 , 0.84358 , -0.40223423}, - { -0.38796691, 0.38271738, -0.65315839}, - { 0.51545596, 0.3817169 , -0.76720099} - }, { - { -0.42015243, -0.07814525, -0.90408255}, - { 0.51545596, 0.3817169 , -0.76720099}, - { -0.38796691, 0.38271738, -0.65315839} - }, { - { -0.99500944, 0.0913478 , -0.04014718}, - { -0.3557814 , 0.84358 , -0.40223423}, - { -0.58849102, 0.53029673, 0.0627648 } - }, { - { -0.3557814 , 0.84358 , -0.40223423}, - { -0.41468223, 0.65596241, 0.63067581}, - { -0.58849102, 0.53029673, 0.0627648 } - }, { - { -0.99500944, 0.0913478 , -0.04014718}, - { -0.58849102, 0.53029673, 0.0627648 }, - { -0.41468223, 0.65596241, 0.63067581} - } -}; -constexpr PJ_XYZ ico_centers[23] = { - { 0.6446662 , 0.27407261, 0.37518719}, - { 0.17476898, 0.52317601, 0.57203007}, - {-0.16999525, 0.11746359, 0.76731978}, - { 0.08682596, -0.38238388, 0.69117259}, - { 0.59031442, -0.28559418, 0.44882132}, - { 0.67643404, 0.37526316, -0.18190733}, - { 0.22617043, 0.68690576, -0.32936779}, - {-0.08387563, 0.77832093, 0.13659114}, - {-0.64171587, 0.12186443, 0.45257654}, - {-0.67643404, -0.37526316, 0.18190733}, - {-0.22617043, -0.68690576, 0.32936779}, - { 0.08387563, -0.77832093, -0.13659114}, - { 0.58849102, -0.53029673, -0.0627648 }, - { 0.64171587, -0.12186443, -0.45257654}, - {-0.59031442, 0.28559418, -0.44882132}, - {-0.6446662 , -0.27407261, -0.37518719}, - {-0.17476898, -0.52317601, -0.57203007}, - { 0.16999525, -0.11746359, -0.76731978}, - {-0.07609745, 0.53600476, -0.6075312 }, - {-0.09755446, 0.22876301, -0.77481398}, - {-0.64642729, 0.48840818, -0.12653887}, - {-0.45298488, 0.67661305, 0.09706879}, - {-0.66606089, 0.42586898, 0.21776448} -}; -constexpr PJ_XYZ ico_normals[23] = { - { - 0.8112534716456183, 0.3448953244235397, 0.4721387719026189 - }, { - 0.21993078167242514, 0.6583691769191125, 0.7198475381327677 - }, { - -0.21392348218574597, 0.1478171768398566, 0.9656017947376752 - }, { - 0.10926252593733311, -0.48119515565604315, 0.8697775132750616 - }, { - 0.7428567271237952, -0.3593941714860216, 0.5648005953155497 - }, { - 0.8512303999921011, 0.4722343774266651, -0.22891373682183738 - }, { - 0.28461480749719364, 0.8644080979012073, -0.4144792535654255 - }, { - -0.1055498134715015, 0.9794457311974099, 0.17188745304792394 - }, { - -0.80754076069938, 0.15335524153301364, 0.5695261975567215 - }, { - -0.8512303999921011, -0.4722343774266651, 0.22891373682183735 - }, { - -0.28461480749719364, -0.8644080979012073, 0.4144792535654255 - }, { - 0.10554981347150154, -0.97944573119741, -0.17188745304792397 - }, { - 0.7405621455042509, -0.6673299596621295, -0.07898375518726185 - }, { - 0.80754076069938, -0.15335524153301364, -0.5695261975567215 - }, { - -0.7428567271237952, 0.3593941714860216, -0.5648005953155497 - }, { - -0.8112534716456183, -0.3448953244235397, -0.4721387719026189 - }, { - -0.21993078167242514, -0.6583691769191125, -0.7198475381327677 - }, { - 0.21392348218574597, -0.1478171768398566, -0.9656017947376752 - }, { - -0.1092625236946045, 0.48119515875463253, -0.8697775118425345 - }, { - -0.10926252412771359, 0.4811951525529661, -0.8697775152191327 - }, { - -0.7405621389792739, 0.6673299643797594, 0.07898377650727696 - }, { - -0.7405621607654073, 0.6673299431834946, 0.07898375132383098 - }, { - -0.7405621367680706, 0.6673299714231342, 0.07898373773067752 - } -}; -constexpr double ico_dym_trans[23][2][4] = { - { - { - 3676785.549175448, -3835017.5266620647, -3516181.101897219, 13536571.968889877 - }, { - 597946.080039791, 4588467.120428165, -4379277.476119764, 23446030.430853583 - } - }, { - { - 6186178.005526091, -1393567.8850913076, -615475.9158875226, 9668979.99656166 - }, { - 597946.0790283178, 4588467.148836121, -4379277.446492919, 23446030.4022735 - } - }, { - { - 6193487.416382644, -412638.42193403625, 1435299.1565727487, 7735183.994711302 - }, { - 610606.2949588482, 6287486.763792622, -827230.771869741, 20096597.453907937 - } - }, { - { - 6320833.951539666, -6999.925417495968, -797903.6054442794, 9668979.964544488 - }, { - 390035.65785509185, 5584900.2162612835, 3040789.86561249, 16747164.583089648 - } - }, { - { - 1785817.7160921493, -3817376.067203325, -4777879.901545344, 15470367.97086971 - }, { - 3873198.4648612146, 4557911.12782605, -2193951.0189847522, 20096597.472239383 - } - }, { - { - 1653953.7567438218, -4829262.323420258, -3812125.829251187, 15470367.969285296 - }, { - -2905701.3326818133, 2866384.6227320307, -4891868.725058803, 26795463.326497696 - } - }, { - { - 6107473.604777472, -1644266.325782215, 764719.3302896866, 9668979.973521523 - }, { - -20484.65208776388, -2749071.5526177026, -5747332.168284684, 30144896.23069373 - } - }, { - { - 6325351.398413758, 599247.844237452, 469545.1345954169, 7735183.991104206 - }, { - 356890.77665911405, 1136808.9376555325, -6258588.903331836, 26795463.365920186 - } - }, { - { - 3707748.6155441254, 320266.3046413801, 5171041.531732354, 3867591.9864321505 - }, { - 610606.2818745336, 6287486.766371998, -827230.7619227654, 20096597.44051682 - } - }, { - { - 3343388.0482846545, -4896993.062013145, 2330419.6732539237, 3867591.9905542377 - }, { - 20484.69631605078, 2749071.5422549895, 5747332.173083752, 13397731.669298988 - } - }, { - { - 6107473.604777474, -1644266.3257822143, 764719.330289686, 7735183.984065069 - }, { - 20484.65208776346, 2749071.552617706, 5747332.168284684, 13397731.654138729 - } - }, { - { - 6325351.398413757, 599247.8442374519, 469545.1345954159, 9668979.966482382 - }, { - -356890.77665911167, -1136808.9376555379, 6258588.903331836, 10048298.789365184 - } - }, { - { - 4266333.348411551, 4606685.482609389, 1080041.5914374113, 13536571.961679665 - }, { - -356890.81480763154, -1136808.9649443403, 6258588.896199714, 10048298.78278621 - } - }, { - { - 3707748.6155441264, 320266.30464138015, 5171041.531732352, 13536571.97115444 - }, { - -610606.2818745337, -6287486.766372, 827230.7619227694, 3349432.8639618154 - } - }, { - { - 2461379.4064226267, 5855954.858490806, 488922.63367311924, 1933796.0165698116 - }, { - 3483162.7410947136, -1026989.0860837825, -5234740.880461738, 30144896.24019003 - } - }, { - { - 1320556.279179943, -5891237.854051452, 2034474.9935921053, 1933796.0148528814 - }, { - -3483162.72987335, 1026989.0418338334, 5234740.896609632, 10048298.759397767 - } - }, { - { - 6186178.005526091, -1393567.885091309, -615475.9158875229, 7735183.961024929 - }, { - -597946.0790283154, -4588467.148836119, 4379277.446492919, 6698865.825718503 - } - }, { - { - 6193487.416382645, -412638.4219340361, 1435299.156572748, 9668979.962875288 - }, { - -610606.2949588535, -6287486.763792623, 827230.7718697439, 3349432.877352944 - } - }, { - { - 3498197.81693495, 4833165.559061878, 2234449.5231911456, 3867591.983769496 - }, { - 5278984.96116607, -2798512.200701845, -2211399.7153384583, 33494329.158408284 - } - }, { - { - 6320833.983680945, -6999.984355479206, -797903.6271294819, 7735183.9823354 - }, { - -390035.68446349393, -5584900.177255948, -3040789.814780467, 0.044359486997177525 - } - }, { - { - 4266333.41772867, 4606685.445409489, 1080041.6365273518, 3867592.0700864717 - }, { - 356890.72771489987, 1136809.053212709, -6258588.866576485, 26795463.265809294 - } - }, { - { - 4266333.204506115, 4606685.540218764, 1080041.5936954806, 3867591.897018196 - }, { - 356890.8007120557, 1136808.9497242568, -6258588.899768077, 26795463.365730304 - } - }, { - { - 1824090.1118675405, 1318837.3514699321, 5960117.7705610385, 1933795.9110601672 - }, { - 3873198.583330483, 4557911.083457602, -2193951.0468033054, 23446030.547617782 - } - } -}; - - -constexpr pj_face dymaxion_faces[23] = { - { - {11602775.971724393, 20096597.491866, 1.0}, - {11602775.971724393, 26795463.322488002, 1.0}, - {17404163.95758659, 23446030.407177, 1.0} - }, { - {11602775.971724393, 20096597.491866, 1.0}, - {5801387.985862196, 23446030.407177, 1.0}, - {11602775.971724393, 26795463.322488002, 1.0} - }, { - {11602775.971724393, 20096597.491866, 1.0}, - {5801387.985862196, 16747164.576555002, 1.0}, - {5801387.985862196, 23446030.407177, 1.0} - }, { - {11602775.971724393, 20096597.491866, 1.0}, - {11602775.971724393, 13397731.661244001, 1.0}, - {5801387.985862196, 16747164.576555002, 1.0} - }, { - {11602775.971724393, 20096597.491866, 1.0}, - {17404163.95758659, 23446030.407177, 1.0}, - {17404163.95758659, 16747164.576555002, 1.0} - }, { - {17404163.95758659, 23446030.407177, 1.0}, - {11602775.971724393, 26795463.322488002, 1.0}, - {17404163.95758659, 30144896.237799004, 1.0} - }, { - {11602775.971724393, 33494329.153110005, 1.0}, - {11602775.971724393, 26795463.322488002, 1.0}, - {5801387.985862196, 30144896.237799004, 1.0} - }, { - {5801387.985862196, 30144896.237799004, 1.0}, - {11602775.971724393, 26795463.322488002, 1.0}, - {5801387.985862196, 23446030.407177, 1.0} - }, { - {5801387.985862196, 16747164.576555002, 1.0}, - {0.0, 20096597.491866, 1.0}, - {5801387.985862196, 23446030.407177, 1.0} - }, { - {5801387.985862196, 16747164.576555002, 1.0}, - {5801387.985862196, 10048298.745933, 1.0}, - {0.0, 13397731.661244001, 1.0} - }, { - {5801387.985862196, 16747164.576555002, 1.0}, - {11602775.971724393, 13397731.661244001, 1.0}, - {5801387.985862196, 10048298.745933, 1.0} - }, { - {5801387.985862196, 10048298.745933, 1.0}, - {11602775.971724393, 13397731.661244001, 1.0}, - {11602775.971724393, 6698865.830622001, 1.0} - }, { - {11602775.971724393, 6698865.830622001, 1.0}, - {11602775.971724393, 13397731.661244001, 1.0}, - {17404163.95758659, 10048298.745933, 1.0} - }, { - {11602775.971724393, 0.0, 1.0}, - {11602775.971724393, 6698865.830622001, 1.0}, - {17404163.95758659, 3349432.9153110003, 1.0} - }, { - {0.0, 33494329.153110005, 1.0}, - {5801387.985862196, 30144896.237799004, 1.0}, - {0.0, 26795463.322488002, 1.0} - }, { - {0.0, 6698865.830622001, 1.0}, - {0.0, 13397731.661244001, 1.0}, - {5801387.985862196, 10048298.745933, 1.0} - }, { - {5801387.985862196, 3349432.9153110003, 1.0}, - {5801387.985862196, 10048298.745933, 1.0}, - {11602775.971724393, 6698865.830622001, 1.0} - }, { - {5801387.985862196, 3349432.9153110003, 1.0}, - {11602775.971724393, 6698865.830622001, 1.0}, - {11602775.971724393, 0.0, 1.0} - }, { - {5801387.985862196, 30144896.237799004, 1.0}, - {2900693.992931098, 31819612.695454504, 1.0}, - {5801387.985862196, 36843762.068421006, 1.0} - }, { - {5801387.985862196, 3349432.9153110003, 1.0}, - {11602775.971724393, 0.0, 1.0}, - {5801387.985862196, 0.0, 1.0} - }, { - {0.0, 26795463.322488002, 1.0}, - {5801387.985862196, 30144896.237799004, 1.0}, - {3867591.9905747976, 26795463.322488002, 1.0} - }, { - {5801387.985862196, 30144896.237799004, 1.0}, - {5801387.985862196, 23446030.407177, 1.0}, - {3867591.9905747976, 26795463.322488002, 1.0} - }, { - {0.0, 20096597.491866, 1.0}, - {1933795.9952873988, 23446030.407177, 1.0}, - {5801387.985862196, 23446030.407177, 1.0} - } -}; - -constexpr double dym_ico_trans[23][3][3] = { - { - { - 9.058433279771384e-08, 1.4731493732699052e-08, -0.9269301899999991 - }, { - -9.44826679987233e-08, 1.1304527499839262e-07, -1.0974189099999994 - }, { - -8.662754779110161e-08, -1.0789150406568015e-07, 4.077454709999999 - } - }, { - { - 1.5240780519329358e-07, 1.473149373269901e-08, -1.6442540899999978 - }, { - -3.4333093302050216e-08, 1.1304527499839258e-07, -1.7953209499999985 - }, { - -1.51633738709386e-08, -1.0789150406568015e-07, 3.248271909999998 - } - }, { - { - 1.525878853745444e-07, 1.504340175606161e-08, -1.6526118100000007 - }, { - -1.0166102516109274e-08, 1.5490373090569122e-07, -2.9169376700000003 - }, { - 3.536121881520939e-08, -2.0380342501548998e-08, 0.9033697899999995 - } - }, { - { - 1.557252983599121e-07, 9.609243061078464e-09, -1.5798064100000002 - }, { - -1.7245441994882394e-10, 1.375942246501773e-07, -2.6850295500000003 - }, { - -1.96578129712955e-08, 7.491541593592458e-08, -0.37337721000000035 - } - }, { - { - 4.399688326690425e-08, 9.54233233151121e-08, -2.0080176699999996 - }, { - -9.404803666461074e-08, 1.122924714451482e-07, -1.0873330499999996 - }, { - -1.1771180391040664e-07, -5.405199315156007e-08, 3.3561273899999997 - } - }, { - { - 4.074817450170371e-08, -7.158726449003567e-08, 1.9642587099999982 - }, { - -1.1897770528054373e-07, 7.061862589298568e-08, 0.3236332400000001 - }, { - -9.391868744648748e-08, -1.2052012839388902e-07, 4.500442009999996 - } - }, { - { - 1.5046877525297362e-07, -5.046779687011883e-10, -1.2134956799999999 - }, { - -4.0509505754953036e-08, -6.772840231043597e-08, 3.120257019999999 - }, { - 1.8840259480379495e-08, -1.4159603341569342e-07, 3.7568638499999985 - } - }, { - { - 1.55836594139745e-07, 8.792657069014762e-09, -1.52490368 - }, { - 1.4763566099823772e-08, 2.800736643244269e-08, -0.08634832999999958 - }, { - 1.1568102351290336e-08, -1.5419177904390005e-07, 4.178749899999998 - } - }, { - { - 9.134716490113195e-08, 1.504340175606163e-08, -1.2973306300000003 - }, { - 7.890345398644546e-09, 1.5490373090569127e-07, -3.021690130000001 - }, { - 1.2739806091251417e-07, -2.0380342501549028e-08, 0.3694283599999999 - } - }, { - { - 8.237047688665845e-08, 5.04677968701152e-10, -1.0017709799999996 - }, { - -1.2064637664394705e-07, 6.772840231043599e-08, -0.8160591599999997 - }, { - 5.741414913322641e-08, 1.4159603341569342e-07, -1.937212839999999 - } - }, { - { - 1.504687752529736e-07, 5.046779687011514e-10, -1.3968356299999996 - }, { - -4.0509505754953036e-08, 6.772840231043597e-08, -1.2809642399999992 - }, { - 1.8840259480379524e-08, 1.415960334156934e-07, -1.713430739999999 - } - }, { - { - 1.55836594139745e-07, -8.792657069014724e-09, -1.3345540299999996 - }, { - 1.4763566099823759e-08, -2.8007366432442684e-08, -0.6396431699999997 - }, { - 1.1568102351290311e-08, 1.5419177904390013e-07, -1.7978079499999997 - } - }, { - { - 1.0510891988020954e-07, -8.792657069014762e-09, -0.7459721899999996 - }, { - 1.1349411668458604e-07, -2.8007366432442694e-08, -1.7851916299999993 - }, { - 2.6608799545245027e-08, 1.541917790439001e-07, -1.9723217899999996 - } - }, { - { - 9.134716490113195e-08, -1.5043401756061595e-08, -0.5444247299999998 - }, { - 7.890345398644617e-09, -1.5490373090569122e-07, 0.29016699000000007 - }, { - 1.2739806091251412e-07, 2.038034250154901e-08, -2.2453721499999992 - } - }, { - { - 6.064058047097081e-08, 8.58140802540336e-08, -3.294437479999999 - }, { - 1.4427215125754238e-07, -2.530175320502907e-08, 0.7693199999999997 - }, { - 1.2045502760769865e-08, -1.2896740908748457e-07, 3.4155942999999986 - } - }, { - { - 3.2534318590648264e-08, -8.581408025403363e-08, 0.15470457999999998 - }, { - -1.4514141392576755e-07, 2.530175320502908e-08, -0.2476383 - }, { - 5.01230094778404e-08, 1.289674090874846e-07, -1.7680179200000001 - } - }, { - { - 1.524078051932937e-07, -1.4731493732699067e-08, -1.25498709 - }, { - -3.433309330205022e-08, -1.1304527499839266e-07, 0.49967191 - }, { - -1.5163373870938614e-08, 1.0789150406568026e-07, -1.17748929 - } - }, { - { - 1.5258788537454444e-07, -1.50434017560616e-08, -1.25498709 - }, { - -1.016610251610931e-08, -1.5490373090569122e-07, 0.49967191 - }, { - 3.536121881520941e-08, 2.0380342501549018e-08, -1.17748929 - } - }, { - { - 8.618449605826386e-08, 1.3005744286105568e-07, -4.776339219999996 - }, { - 1.1907386502737676e-07, -6.894646223375916e-08, 2.2311702599999985 - }, { - 5.5049746849940485e-08, -5.4481873383947436e-08, 0.9207512499999986 - } - }, { - { - 1.5572529749804938e-07, -9.609244553868475e-09, -1.29138978 - }, { - -1.7245528181154292e-10, -1.3759422614296728e-07, 0.38371785999999997 - }, { - -1.9657812971295542e-08, -7.491541593592457e-08, -0.53911579 - } - }, { - { - 1.0510892074207234e-07, 8.792655576224747e-09, -1.2306127199999985 - }, { - 1.1349411496086066e-07, 2.8007369418022736e-08, -0.6591226399999993 - }, { - 2.6608799545244997e-08, -1.5419177904390008e-07, 4.091492979999998 - } - }, { - { - 1.0510891815648413e-07, 8.79265706901476e-09, -1.2306127500000001 - }, { - 1.1349412013203696e-07, 2.8007366432442717e-08, -0.6591225800000001 - }, { - 2.6608799545245066e-08, -1.5419177904390005e-07, 4.091492979999997 - } - }, { - { - 4.4939794689710465e-08, 9.54233248079021e-08, -2.9126935899999995 - }, { - 3.249196924242356e-08, 1.1229246845956814e-07, -2.1653487399999993 - }, { - 1.4683839747935709e-07, -5.405199315156002e-08, 1.0461139699999995 - } - } -}; - +constexpr pj_face ico_faces[23] = {{{0.42015243, 0.07814525, 0.90408255}, {0.51883673, 0.83542038, 0.18133184}, {0.99500944, -0.0913478, 0.04014718}}, {{0.42015243, 0.07814525, 0.90408255}, {-0.41468223, 0.65596241, 0.63067581}, {0.51883673, 0.83542038, 0.18133184}}, {{0.42015243, 0.07814525, 0.90408255}, {-0.51545596, -0.3817169, 0.76720099}, {-0.41468223, 0.65596241, 0.63067581}}, {{0.42015243, 0.07814525, 0.90408255}, {0.3557814, -0.84358, 0.40223423}, {-0.51545596, -0.3817169, 0.76720099}}, {{0.42015243, 0.07814525, 0.90408255}, {0.99500944, -0.0913478, 0.04014718}, {0.3557814, -0.84358, 0.40223423}}, {{0.99500944, -0.0913478, 0.04014718}, {0.51883673, 0.83542038, 0.18133184}, {0.51545596, 0.3817169, -0.76720099}}, {{0.51545596, 0.3817169, -0.76720099}, {0.51883673, 0.83542038, 0.18133184}, {-0.3557814, 0.84358, -0.40223423}}, {{-0.3557814, 0.84358, -0.40223423}, {0.51883673, 0.83542038, 0.18133184}, {-0.41468223, 0.65596241, 0.63067581}}, {{-0.51545596, -0.3817169, 0.76720099}, {-0.99500944, 0.0913478, -0.04014718}, {-0.41468223, 0.65596241, 0.63067581}}, {{-0.51545596, -0.3817169, 0.76720099}, {-0.51883673, -0.83542038, -0.18133184}, {-0.99500944, 0.0913478, -0.04014718}}, {{-0.51545596, -0.3817169, 0.76720099}, {0.3557814, -0.84358, 0.40223423}, {-0.51883673, -0.83542038, -0.18133184}}, {{-0.51883673, -0.83542038, -0.18133184}, {0.3557814, -0.84358, 0.40223423}, {0.41468223, -0.65596241, -0.63067581}}, {{0.41468223, -0.65596241, -0.63067581}, {0.3557814, -0.84358, 0.40223423}, {0.99500944, -0.0913478, 0.04014718}}, {{0.51545596, 0.3817169, -0.76720099}, {0.41468223, -0.65596241, -0.63067581}, {0.99500944, -0.0913478, 0.04014718}}, {{-0.42015243, -0.07814525, -0.90408255}, {-0.3557814, 0.84358, -0.40223423}, {-0.99500944, 0.0913478, -0.04014718}}, {{-0.42015243, -0.07814525, -0.90408255}, {-0.99500944, 0.0913478, -0.04014718}, {-0.51883673, -0.83542038, -0.18133184}}, {{-0.42015243, -0.07814525, -0.90408255}, {-0.51883673, -0.83542038, -0.18133184}, {0.41468223, -0.65596241, -0.63067581}}, {{-0.42015243, -0.07814525, -0.90408255}, {0.41468223, -0.65596241, -0.63067581}, {0.51545596, 0.3817169, -0.76720099}}, {{-0.3557814, 0.84358, -0.40223423}, {-0.38796691, 0.38271738, -0.65315839}, {0.51545596, 0.3817169, -0.76720099}}, {{-0.42015243, -0.07814525, -0.90408255}, {0.51545596, 0.3817169, -0.76720099}, {-0.38796691, 0.38271738, -0.65315839}}, {{-0.99500944, 0.0913478, -0.04014718}, {-0.3557814, 0.84358, -0.40223423}, {-0.58849102, 0.53029673, 0.0627648}}, {{-0.3557814, 0.84358, -0.40223423}, {-0.41468223, 0.65596241, 0.63067581}, {-0.58849102, 0.53029673, 0.0627648}}, {{-0.99500944, 0.0913478, -0.04014718}, {-0.58849102, 0.53029673, 0.0627648}, {-0.41468223, 0.65596241, 0.63067581}}}; +constexpr PJ_XYZ ico_20_centers[20] = {{0.6446662, 0.27407261, 0.37518719}, {0.17476898, 0.52317601, 0.57203007}, {-0.16999525, 0.11746359, 0.76731978}, {0.08682596, -0.38238388, 0.69117259}, {0.59031442, -0.28559418, 0.44882132}, {0.67643404, 0.37526316, -0.18190733}, {0.22617043, 0.68690576, -0.32936779}, {-0.08387563, 0.77832093, 0.13659114}, {-0.64171587, 0.12186443, 0.45257654}, {-0.67643404, -0.37526316, 0.18190733}, {-0.22617043, -0.68690576, 0.32936779}, {0.08387563, -0.77832093, -0.13659114}, {0.58849102, -0.53029673, -0.0627648}, {0.64171587, -0.12186443, -0.45257654}, {-0.59031442, 0.28559418, -0.44882132}, {-0.6446662, -0.27407261, -0.37518719}, {-0.17476898, -0.52317601, -0.57203007}, {0.16999525, -0.11746359, -0.76731978}, {-0.58849102, 0.53029673, 0.0627648}, {-0.08682596, 0.38238388, -0.69117259}}; +constexpr PJ_XYZ ico_2_centers[2] = {{-0.07609745, 0.53600476, -0.6075312}, {-0.09755446, 0.22876301, -0.77481398}}; +constexpr PJ_XYZ ico_3_centers[3] = {{-0.64642729, 0.48840818, -0.12653887}, {-0.45298488, 0.67661305, 0.09706879}, {-0.66606089, 0.42586898, 0.21776448}}; +constexpr PJ_XYZ ico_centers[23] = {{0.6446662, 0.27407261, 0.37518718999999995}, {0.1747689766666667, 0.5231760133333333, 0.5720300666666667}, {-0.16999525333333332, 0.11746358666666666, 0.7673197833333334}, {0.08682595666666666, -0.38238388333333334, 0.69117259}, {0.5903144233333334, -0.28559418333333336, 0.44882131999999997}, {0.6764340433333333, 0.37526316, -0.18190732333333334}, {0.22617043, 0.68690576, -0.3293677933333333}, {-0.08387563333333335, 0.77832093, 0.13659113999999997}, {-0.6417158766666667, 0.12186443666666665, 0.45257653999999997}, {-0.6764340433333333, -0.37526316, 0.18190732333333334}, {-0.22617043, -0.68690576, 0.3293677933333333}, {0.08387563333333335, -0.77832093, -0.13659113999999997}, {0.5884910233333334, -0.5302967366666668, -0.06276479999999997}, {0.6417158766666667, -0.12186443666666665, -0.45257653999999997}, {-0.5903144233333334, 0.28559418333333336, -0.44882131999999997}, {-0.6446662, -0.27407261, -0.37518718999999995}, {-0.1747689766666667, -0.5231760133333333, -0.5720300666666667}, {0.16999525333333332, -0.11746358666666668, -0.7673197833333334}, {-0.07609744999999997, 0.5360047600000001, -0.6075312033333334}, {-0.09755446, 0.22876301, -0.7748139766666666}, {-0.6464272866666667, 0.48840817666666664, -0.12653887}, {-0.45298488333333337, 0.6766130466666667, 0.0970687933333333}, {-0.6660608966666667, 0.42586898, 0.21776447666666665}}; +constexpr PJ_XYZ ico_normals[23] = {{0.8112534716456183, 0.3448953244235397, 0.4721387719026189}, {0.21993078167242514, 0.6583691769191125, 0.7198475381327677}, {-0.21392348218574597, 0.1478171768398566, 0.9656017947376752}, {0.10926252593733311, -0.48119515565604315, 0.8697775132750616}, {0.7428567271237952, -0.3593941714860216, 0.5648005953155497}, {0.8512303999921011, 0.4722343774266651, -0.22891373682183738}, {0.28461480749719364, 0.8644080979012073, -0.4144792535654255}, {-0.1055498134715015, 0.9794457311974099, 0.17188745304792394}, {-0.80754076069938, 0.15335524153301364, 0.5695261975567215}, {-0.8512303999921011, -0.4722343774266651, 0.22891373682183735}, {-0.28461480749719364, -0.8644080979012073, 0.4144792535654255}, {0.10554981347150154, -0.97944573119741, -0.17188745304792397}, {0.7405621455042509, -0.6673299596621295, -0.07898375518726185}, {0.80754076069938, -0.15335524153301364, -0.5695261975567215}, {-0.7428567271237952, 0.3593941714860216, -0.5648005953155497}, {-0.8112534716456183, -0.3448953244235397, -0.4721387719026189}, {-0.21993078167242514, -0.6583691769191125, -0.7198475381327677}, {0.21392348218574597, -0.1478171768398566, -0.9656017947376752}, {-0.1092625236946045, 0.48119515875463253, -0.8697775118425345}, {-0.10926252412771359, 0.4811951525529661, -0.8697775152191327}, {-0.7405621389792739, 0.6673299643797594, 0.07898377650727696}, {-0.7405621607654073, 0.6673299431834946, 0.07898375132383098}, {-0.7405621367680706, 0.6673299714231342, 0.07898373773067752}}; +constexpr double ico_dym_trans[23][2][4] = {{{3676785.549175448, -3835017.5266620647, -3516181.101897219, 13536571.968889877}, {597946.080039791, 4588467.120428165, -4379277.476119764, 23446030.430853583}}, {{6186178.005526091, -1393567.8850913076, -615475.9158875226, 9668979.99656166}, {597946.0790283178, 4588467.148836121, -4379277.446492919, 23446030.4022735}}, {{6193487.416382644, -412638.42193403625, 1435299.1565727487, 7735183.994711302}, {610606.2949588482, 6287486.763792622, -827230.771869741, 20096597.453907937}}, {{6320833.951539666, -6999.925417495968, -797903.6054442794, 9668979.964544488}, {390035.65785509185, 5584900.2162612835, 3040789.86561249, 16747164.583089648}}, {{1785817.7160921493, -3817376.067203325, -4777879.901545344, 15470367.97086971}, {3873198.4648612146, 4557911.12782605, -2193951.0189847522, 20096597.472239383}}, {{1653953.7567438218, -4829262.323420258, -3812125.829251187, 15470367.969285296}, {-2905701.3326818133, 2866384.6227320307, -4891868.725058803, 26795463.326497696}}, {{6107473.604777472, -1644266.325782215, 764719.3302896866, 9668979.973521523}, {-20484.65208776388, -2749071.5526177026, -5747332.168284684, 30144896.23069373}}, {{6325351.398413758, 599247.844237452, 469545.1345954169, 7735183.991104206}, {356890.77665911405, 1136808.9376555325, -6258588.903331836, 26795463.365920186}}, {{3707748.6155441254, 320266.3046413801, 5171041.531732354, 3867591.9864321505}, {610606.2818745336, 6287486.766371998, -827230.7619227654, 20096597.44051682}}, {{3343388.0482846545, -4896993.062013145, 2330419.6732539237, 3867591.9905542377}, {20484.69631605078, 2749071.5422549895, 5747332.173083752, 13397731.669298988}}, {{6107473.604777474, -1644266.3257822143, 764719.330289686, 7735183.984065069}, {20484.65208776346, 2749071.552617706, 5747332.168284684, 13397731.654138729}}, {{6325351.398413757, 599247.8442374519, 469545.1345954159, 9668979.966482382}, {-356890.77665911167, -1136808.9376555379, 6258588.903331836, 10048298.789365184}}, {{4266333.348411551, 4606685.482609389, 1080041.5914374113, 13536571.961679665}, {-356890.81480763154, -1136808.9649443403, 6258588.896199714, 10048298.78278621}}, {{3707748.6155441264, 320266.30464138015, 5171041.531732352, 13536571.97115444}, {-610606.2818745337, -6287486.766372, 827230.7619227694, 3349432.8639618154}}, {{2461379.4064226267, 5855954.858490806, 488922.63367311924, 1933796.0165698116}, {3483162.7410947136, -1026989.0860837825, -5234740.880461738, 30144896.24019003}}, {{1320556.279179943, -5891237.854051452, 2034474.9935921053, 1933796.0148528814}, {-3483162.72987335, 1026989.0418338334, 5234740.896609632, 10048298.759397767}}, {{6186178.005526091, -1393567.885091309, -615475.9158875229, 7735183.961024929}, {-597946.0790283154, -4588467.148836119, 4379277.446492919, 6698865.825718503}}, {{6193487.416382645, -412638.4219340361, 1435299.156572748, 9668979.962875288}, {-610606.2949588535, -6287486.763792623, 827230.7718697439, 3349432.877352944}}, {{3498197.81693495, 4833165.559061878, 2234449.5231911456, 3867591.983769496}, {5278984.96116607, -2798512.200701845, -2211399.7153384583, 33494329.158408284}}, {{6320833.983680945, -6999.984355479206, -797903.6271294819, 7735183.9823354}, {-390035.68446349393, -5584900.177255948, -3040789.814780467, 0.044359486997177525}}, {{4266333.41772867, 4606685.445409489, 1080041.6365273518, 3867592.0700864717}, {356890.72771489987, 1136809.053212709, -6258588.866576485, 26795463.265809294}}, {{4266333.204506115, 4606685.540218764, 1080041.5936954806, 3867591.897018196}, {356890.8007120557, 1136808.9497242568, -6258588.899768077, 26795463.365730304}}, {{1824090.1118675405, 1318837.3514699321, 5960117.7705610385, 1933795.9110601672}, {3873198.583330483, 4557911.083457602, -2193951.0468033054, 23446030.547617782}}}; +constexpr pj_face dymaxion_faces[23] = {{{11602775.971724393, 20096597.491866, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {17404163.95758659, 23446030.407177, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {5801387.985862196, 23446030.407177, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {5801387.985862196, 16747164.576555002, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {5801387.985862196, 16747164.576555002, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {17404163.95758659, 23446030.407177, 1.0}, {17404163.95758659, 16747164.576555002, 1.0}}, {{17404163.95758659, 23446030.407177, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {17404163.95758659, 30144896.237799004, 1.0}}, {{11602775.971724393, 33494329.153110005, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {5801387.985862196, 30144896.237799004, 1.0}}, {{5801387.985862196, 30144896.237799004, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}, {{5801387.985862196, 16747164.576555002, 1.0}, {0.0, 20096597.491866, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}, {{5801387.985862196, 16747164.576555002, 1.0}, {5801387.985862196, 10048298.745933, 1.0}, {0.0, 13397731.661244001, 1.0}}, {{5801387.985862196, 16747164.576555002, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {5801387.985862196, 10048298.745933, 1.0}}, {{5801387.985862196, 10048298.745933, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}}, {{11602775.971724393, 6698865.830622001, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {17404163.95758659, 10048298.745933, 1.0}}, {{11602775.971724393, 0.0, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}, {17404163.95758659, 3349432.9153110003, 1.0}}, {{0.0, 33494329.153110005, 1.0}, {5801387.985862196, 30144896.237799004, 1.0}, {0.0, 26795463.322488002, 1.0}}, {{0.0, 6698865.830622001, 1.0}, {0.0, 13397731.661244001, 1.0}, {5801387.985862196, 10048298.745933, 1.0}}, {{5801387.985862196, 3349432.9153110003, 1.0}, {5801387.985862196, 10048298.745933, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}}, {{5801387.985862196, 3349432.9153110003, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}, {11602775.971724393, 0.0, 1.0}}, {{5801387.985862196, 30144896.237799004, 1.0}, {2900693.992931098, 31819612.695454504, 1.0}, {5801387.985862196, 36843762.068421006, 1.0}}, {{5801387.985862196, 3349432.9153110003, 1.0}, {11602775.971724393, 0.0, 1.0}, {5801387.985862196, 0.0, 1.0}}, {{0.0, 26795463.322488002, 1.0}, {5801387.985862196, 30144896.237799004, 1.0}, {3867591.9905747976, 26795463.322488002, 1.0}}, {{5801387.985862196, 30144896.237799004, 1.0}, {5801387.985862196, 23446030.407177, 1.0}, {3867591.9905747976, 26795463.322488002, 1.0}}, {{0.0, 20096597.491866, 1.0}, {1933795.9952873988, 23446030.407177, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}}; +constexpr PJ_XY dymaxion_22_centers[22] = {{13536571.967011793, 23446030.407177}, {9668979.976436995, 23446030.407177}, {7735183.981149595, 20096597.491866004}, {9668979.976436993, 16747164.576555}, {15470367.962299192, 20096597.491866004}, {15470367.962299192, 26795463.322488}, {9668979.976436993, 30144896.237799004}, {7735183.981149595, 26795463.322488}, {3867591.9905747976, 20096597.491866004}, {3867591.9905747976, 13397731.661244}, {7735183.981149595, 13397731.661244}, {9668979.976436995, 10048298.745933002}, {13536571.967011793, 10048298.745933}, {13536571.967011793, 3349432.915311}, {1933795.9952873988, 30144896.237799004}, {1933795.9952873988, 10048298.745933}, {7735183.981149595, 6698865.830622}, {9668979.976436995, 3349432.915311}, {3867591.9905747976, 26795463.322488}, {3867591.9905747976, 33494329.15311}, {7735183.981149595, 0.0}, {1933795.9952873988, 23446030.407177}}; +constexpr PJ_XY dymaxion_2_centers[2] = {{3867591.9905747976, 26795463.322488}, {3867591.9905747976, 33494329.15311}}; +constexpr PJ_XY dymaxion_centers[23] = {{13536571.967011793, 23446030.407177}, {9668979.976436995, 23446030.407177}, {7735183.981149595, 20096597.491866004}, {9668979.976436993, 16747164.576555}, {15470367.962299192, 20096597.491866004}, {15470367.962299192, 26795463.322488}, {9668979.976436993, 30144896.237799004}, {7735183.981149595, 26795463.322488}, {3867591.9905747976, 20096597.491866004}, {3867591.9905747976, 13397731.661244}, {7735183.981149595, 13397731.661244}, {9668979.976436995, 10048298.745933002}, {13536571.967011793, 10048298.745933}, {13536571.967011793, 3349432.915311}, {1933795.9952873988, 30144896.237799004}, {1933795.9952873988, 10048298.745933}, {7735183.981149595, 6698865.830622}, {9668979.976436995, 3349432.915311}, {4834489.9882184975, 32936090.333891507}, {7735183.981149595, 1116477.638437}, {3222993.3254789985, 27911940.960925}, {5156789.320766397, 26795463.322488}, {2578394.6603831984, 22329552.768740002}}; +constexpr double dym_ico_trans[23][3][3] = {{{9.058433279771384e-08, 1.4731493732699052e-08, -0.9269301899999991}, {-9.44826679987233e-08, 1.1304527499839262e-07, -1.0974189099999994}, {-8.662754779110161e-08, -1.0789150406568015e-07, 4.077454709999999}}, {{1.5240780519329358e-07, 1.473149373269901e-08, -1.6442540899999978}, {-3.4333093302050216e-08, 1.1304527499839258e-07, -1.7953209499999985}, {-1.51633738709386e-08, -1.0789150406568015e-07, 3.248271909999998}}, {{1.525878853745444e-07, 1.504340175606161e-08, -1.6526118100000007}, {-1.0166102516109274e-08, 1.5490373090569122e-07, -2.9169376700000003}, {3.536121881520939e-08, -2.0380342501548998e-08, 0.9033697899999995}}, {{1.557252983599121e-07, 9.609243061078464e-09, -1.5798064100000002}, {-1.7245441994882394e-10, 1.375942246501773e-07, -2.6850295500000003}, {-1.96578129712955e-08, 7.491541593592458e-08, -0.37337721000000035}}, {{4.399688326690425e-08, 9.54233233151121e-08, -2.0080176699999996}, {-9.404803666461074e-08, 1.122924714451482e-07, -1.0873330499999996}, {-1.1771180391040664e-07, -5.405199315156007e-08, 3.3561273899999997}}, {{4.074817450170371e-08, -7.158726449003567e-08, 1.9642587099999982}, {-1.1897770528054373e-07, 7.061862589298568e-08, 0.3236332400000001}, {-9.391868744648748e-08, -1.2052012839388902e-07, 4.500442009999996}}, {{1.5046877525297362e-07, -5.046779687011883e-10, -1.2134956799999999}, {-4.0509505754953036e-08, -6.772840231043597e-08, 3.120257019999999}, {1.8840259480379495e-08, -1.4159603341569342e-07, 3.7568638499999985}}, {{1.55836594139745e-07, 8.792657069014762e-09, -1.52490368}, {1.4763566099823772e-08, 2.800736643244269e-08, -0.08634832999999958}, {1.1568102351290336e-08, -1.5419177904390005e-07, 4.178749899999998}}, {{9.134716490113195e-08, 1.504340175606163e-08, -1.2973306300000003}, {7.890345398644546e-09, 1.5490373090569127e-07, -3.021690130000001}, {1.2739806091251417e-07, -2.0380342501549028e-08, 0.3694283599999999}}, {{8.237047688665845e-08, 5.04677968701152e-10, -1.0017709799999996}, {-1.2064637664394705e-07, 6.772840231043599e-08, -0.8160591599999997}, {5.741414913322641e-08, 1.4159603341569342e-07, -1.937212839999999}}, {{1.504687752529736e-07, 5.046779687011514e-10, -1.3968356299999996}, {-4.0509505754953036e-08, 6.772840231043597e-08, -1.2809642399999992}, {1.8840259480379524e-08, 1.415960334156934e-07, -1.713430739999999}}, {{1.55836594139745e-07, -8.792657069014724e-09, -1.3345540299999996}, {1.4763566099823759e-08, -2.8007366432442684e-08, -0.6396431699999997}, {1.1568102351290311e-08, 1.5419177904390013e-07, -1.7978079499999997}}, {{1.0510891988020954e-07, -8.792657069014762e-09, -0.7459721899999996}, {1.1349411668458604e-07, -2.8007366432442694e-08, -1.7851916299999993}, {2.6608799545245027e-08, 1.541917790439001e-07, -1.9723217899999996}}, {{9.134716490113195e-08, -1.5043401756061595e-08, -0.5444247299999998}, {7.890345398644617e-09, -1.5490373090569122e-07, 0.29016699000000007}, {1.2739806091251412e-07, 2.038034250154901e-08, -2.2453721499999992}}, {{6.064058047097081e-08, 8.58140802540336e-08, -3.294437479999999}, {1.4427215125754238e-07, -2.530175320502907e-08, 0.7693199999999997}, {1.2045502760769865e-08, -1.2896740908748457e-07, 3.4155942999999986}}, {{3.2534318590648264e-08, -8.581408025403363e-08, 0.15470457999999998}, {-1.4514141392576755e-07, 2.530175320502908e-08, -0.2476383}, {5.01230094778404e-08, 1.289674090874846e-07, -1.7680179200000001}}, {{1.524078051932937e-07, -1.4731493732699067e-08, -1.25498709}, {-3.433309330205022e-08, -1.1304527499839266e-07, 0.49967191}, {-1.5163373870938614e-08, 1.0789150406568026e-07, -1.17748929}}, {{1.5258788537454444e-07, -1.50434017560616e-08, -1.25498709}, {-1.016610251610931e-08, -1.5490373090569122e-07, 0.49967191}, {3.536121881520941e-08, 2.0380342501549018e-08, -1.17748929}}, {{8.618449605826386e-08, 1.3005744286105568e-07, -4.776339219999996}, {1.1907386502737676e-07, -6.894646223375916e-08, 2.2311702599999985}, {5.5049746849940485e-08, -5.4481873383947436e-08, 0.9207512499999986}}, {{1.5572529749804938e-07, -9.609244553868475e-09, -1.29138978}, {-1.7245528181154292e-10, -1.3759422614296728e-07, 0.38371785999999997}, {-1.9657812971295542e-08, -7.491541593592457e-08, -0.53911579}}, {{1.0510892074207234e-07, 8.792655576224747e-09, -1.2306127199999985}, {1.1349411496086066e-07, 2.8007369418022736e-08, -0.6591226399999993}, {2.6608799545244997e-08, -1.5419177904390008e-07, 4.091492979999998}}, {{1.0510891815648413e-07, 8.79265706901476e-09, -1.2306127500000001}, {1.1349412013203696e-07, 2.8007366432442717e-08, -0.6591225800000001}, {2.6608799545245066e-08, -1.5419177904390005e-07, 4.091492979999997}}, {{4.4939794689710465e-08, 9.54233248079021e-08, -2.9126935899999995}, {3.249196924242356e-08, 1.1229246845956814e-07, -2.1653487399999993}, {1.4683839747935709e-07, -5.405199315156002e-08, 1.0461139699999995}}}; inline double det(const PJ_XYZ *u, const PJ_XYZ *v, const PJ_XYZ *w) { @@ -632,20 +47,70 @@ inline double det(const PJ_XYZ *u, const PJ_XYZ *v, const PJ_XYZ *w) { inline bool is_point_in_face(const PJ_XYZ *p, const pj_face * face) { return ( - det(p, &face->p2, &face->p3) < 0 && - det(&face->p1, p, &face->p3) < 0 && - det(&face->p1, &face->p2, p) < 0 + det(p, &face->p2, &face->p3) <= 0 && + det(&face->p1, p, &face->p3) <= 0 && + det(&face->p1, &face->p2, p) <= 0 ); } +// inline double compute_xyz_dist_sq(const PJ_XYZ * p, const PJ_XYZ * q) { +// double dx = (p->x - q->x); +// double dy = (p->y - q->y); +// double dz = (p->z - q->z); +// return dx * dx + dy * dy + dz * dz; +// } + +// inline double compute_xy_dist_sq(const PJ_XY * p, const PJ_XY * q) { +// double dx = (p->x - q->x); +// double dy = (p->y - q->y); +// return dx * dx + dy * dy; +// } + inline unsigned char get_ico_face_index(const PJ_XYZ *p) { for (unsigned char i=0; i < 23; i++) { if (is_point_in_face(p, &ico_faces[i])) { return i; } } - + // return 0; + + // USING CENTERS + // unsigned char id = 0; + // double min_dist = compute_xyz_dist_sq(p, &ico_20_centers[0]); + // for (unsigned char i=0; i < 20; i++) { + // double dist = compute_xyz_dist_sq(p, &ico_20_centers[i]); + // if (dist < min_dist) { + // min_dist = dist; + // id = i; + // } + // } + // if (id < 18) { + // return id; + // } else if (id == 19) { // Antartica split case + // if ( + // compute_xyz_dist_sq(p, &ico_2_centers[0]) < compute_xyz_dist_sq(p, &ico_2_centers[1]) + // ) { + // return 18; + // } else { + // return 19; + // } + // } else if (id == 18) { // Japan split case + // double d1 = compute_xyz_dist_sq(p, &ico_3_centers[0]); + // double d2 = compute_xyz_dist_sq(p, &ico_3_centers[1]); + // double d3 = compute_xyz_dist_sq(p, &ico_3_centers[2]); + // if (d1 < d2 && d1 < d3) { + // return 20; + // } else if (d2 < d1 && d2 < d3) { + // return 21; + // } else { + // return 22; + // } + // } + // USING CENTERS OVER + + + // Shall not be reached return 23; } @@ -656,7 +121,34 @@ inline unsigned char get_dym_face_index(const PJ_XY *p) { return i; } } - + // unsigned char id = 0; + // double min_dist = compute_xy_dist_sq(p, &dymaxion_22_centers[0]); + // for (unsigned char i=0; i < 20; i++) { + // double dist = compute_xy_dist_sq(p, &dymaxion_22_centers[i]); + // if (dist < min_dist) { + // min_dist = dist; + // id = i; + // } + // } + // if (id < 18) { + // return id; + // } else if (id == 18) { // Japan ocean split case + // if ( + // compute_xy_dist_sq(p, &dymaxion_2_centers[0]) < compute_xy_dist_sq(p, &dymaxion_2_centers[1]) + // ) { + // return 20; + // } else { + // return 21; + // } + // } else if (id == 19) { // 19 from Face 15 -> ocean (18) + // return 18; + // } else if (id == 20) { // 20 from Face 15 NEW -> antartica (19) + // return 19; + // } else if (id == 21) { // 21 from Face 8 NEW -> japan (22) + // return 22; + // } + + // // Shall not be reached return 23; } @@ -715,12 +207,17 @@ inline PJ_XYZ cartesian_to_ico(const PJ_XYZ *p, unsigned char face_id) { // // ============================================ static PJ_XY dymaxion_forward(PJ_LP lp, PJ *P) { + // struct pj_s2 *Q = static_cast(P->opaque); double lat; + // printf("PROJ IN (phi, lam): %lf, %lf\n", lp.phi, lp.lam); + + /* Convert the geodetic latitude to a geocentric latitude. * This corresponds to the shift from the ellipsoid to the sphere * described in [LK12]. */ if (P->es != 0.0) { + // double a_squared = P->a * P->a; double one_minus_f = 1.0 - (P->a - P->b) / P->a; double one_minus_f_squared = one_minus_f * one_minus_f; lat = atan(one_minus_f_squared * tan(lp.phi)); @@ -757,22 +254,33 @@ static PJ_XY dymaxion_forward(PJ_LP lp, PJ *P) { // printf("PROJ OUT: %lf, %lf\n", dymaxionPoint.x, dymaxionPoint.y); - return dymaxionPoint; } +// echo 72.35787652 69.22776711 | bin/proj +proj=dymaxion +// echo 8877734.55 21320168.80 | bin/invproj -f "%.3f" +proj=dymaxion + +// echo 224.71153553 109.61616828 | bin/proj +proj=dymaxion +// echo | bin/invproj -f "%.3f" +proj=dymaxion + +// echo | bin/proj +proj=dymaxion +// echo | bin/invproj -f "%.3f" +proj=dymaxion + static PJ_LP dymaxion_inverse(PJ_XY xy, PJ *P) { + // printf("REVERSE NOT IMPPLEMENTED !!"); PJ_LP lp = {0.0, 0.0}; // printf("INVPROJ IN: %lf, %lf\n", xy.x, xy.y); unsigned char face_id = get_dym_face_index(&xy); - // printf("FACE ID: %d\n", face_id); + // printf("(inv) FACE ID: %d\n", face_id); if (face_id == 23) { + // printf("INVPROJ BAD: %lf, %lf\n", xy.x, xy.y); + lp.lam = HUGE_VAL; lp.phi = HUGE_VAL; return lp; @@ -792,6 +300,7 @@ static PJ_LP dymaxion_inverse(PJ_XY xy, PJ *P) { // printf("CARTESIAN: %lf, %lf, %lf\n", q, r, s); + // printf("p: %lf\n", s); // Get the spherical angles from the x y z lp.phi = acos(-s) - M_HALFPI; lp.lam = atan2(r, q); @@ -817,6 +326,7 @@ static PJ_LP dymaxion_inverse(PJ_XY xy, PJ *P) { // printf("INVPROJ OUT (phi, lam): %lf, %lf\n", lp.phi, lp.lam); + return lp; } From dc922de0e862cfa815168250044930d446efd5bd Mon Sep 17 00:00:00 2001 From: Pierre Louvart Date: Wed, 30 Oct 2024 23:30:48 +0100 Subject: [PATCH 04/23] - Remove dead code and comments --- src/projections/dymaxion.cpp | 130 ++--------------------------------- 1 file changed, 6 insertions(+), 124 deletions(-) diff --git a/src/projections/dymaxion.cpp b/src/projections/dymaxion.cpp index ec0db6ab05..ecaf09f2d3 100644 --- a/src/projections/dymaxion.cpp +++ b/src/projections/dymaxion.cpp @@ -54,63 +54,13 @@ inline bool is_point_in_face(const PJ_XYZ *p, const pj_face * face) { } -// inline double compute_xyz_dist_sq(const PJ_XYZ * p, const PJ_XYZ * q) { -// double dx = (p->x - q->x); -// double dy = (p->y - q->y); -// double dz = (p->z - q->z); -// return dx * dx + dy * dy + dz * dz; -// } - -// inline double compute_xy_dist_sq(const PJ_XY * p, const PJ_XY * q) { -// double dx = (p->x - q->x); -// double dy = (p->y - q->y); -// return dx * dx + dy * dy; -// } - inline unsigned char get_ico_face_index(const PJ_XYZ *p) { for (unsigned char i=0; i < 23; i++) { if (is_point_in_face(p, &ico_faces[i])) { return i; } } - // return 0; - - // USING CENTERS - // unsigned char id = 0; - // double min_dist = compute_xyz_dist_sq(p, &ico_20_centers[0]); - // for (unsigned char i=0; i < 20; i++) { - // double dist = compute_xyz_dist_sq(p, &ico_20_centers[i]); - // if (dist < min_dist) { - // min_dist = dist; - // id = i; - // } - // } - // if (id < 18) { - // return id; - // } else if (id == 19) { // Antartica split case - // if ( - // compute_xyz_dist_sq(p, &ico_2_centers[0]) < compute_xyz_dist_sq(p, &ico_2_centers[1]) - // ) { - // return 18; - // } else { - // return 19; - // } - // } else if (id == 18) { // Japan split case - // double d1 = compute_xyz_dist_sq(p, &ico_3_centers[0]); - // double d2 = compute_xyz_dist_sq(p, &ico_3_centers[1]); - // double d3 = compute_xyz_dist_sq(p, &ico_3_centers[2]); - // if (d1 < d2 && d1 < d3) { - // return 20; - // } else if (d2 < d1 && d2 < d3) { - // return 21; - // } else { - // return 22; - // } - // } - // USING CENTERS OVER - - - // Shall not be reached + return 23; } @@ -121,34 +71,7 @@ inline unsigned char get_dym_face_index(const PJ_XY *p) { return i; } } - // unsigned char id = 0; - // double min_dist = compute_xy_dist_sq(p, &dymaxion_22_centers[0]); - // for (unsigned char i=0; i < 20; i++) { - // double dist = compute_xy_dist_sq(p, &dymaxion_22_centers[i]); - // if (dist < min_dist) { - // min_dist = dist; - // id = i; - // } - // } - // if (id < 18) { - // return id; - // } else if (id == 18) { // Japan ocean split case - // if ( - // compute_xy_dist_sq(p, &dymaxion_2_centers[0]) < compute_xy_dist_sq(p, &dymaxion_2_centers[1]) - // ) { - // return 20; - // } else { - // return 21; - // } - // } else if (id == 19) { // 19 from Face 15 -> ocean (18) - // return 18; - // } else if (id == 20) { // 20 from Face 15 NEW -> antartica (19) - // return 19; - // } else if (id == 21) { // 21 from Face 8 NEW -> japan (22) - // return 22; - // } - - // // Shall not be reached + return 23; } @@ -207,17 +130,12 @@ inline PJ_XYZ cartesian_to_ico(const PJ_XYZ *p, unsigned char face_id) { // // ============================================ static PJ_XY dymaxion_forward(PJ_LP lp, PJ *P) { - // struct pj_s2 *Q = static_cast(P->opaque); double lat; - // printf("PROJ IN (phi, lam): %lf, %lf\n", lp.phi, lp.lam); - - /* Convert the geodetic latitude to a geocentric latitude. * This corresponds to the shift from the ellipsoid to the sphere * described in [LK12]. */ if (P->es != 0.0) { - // double a_squared = P->a * P->a; double one_minus_f = 1.0 - (P->a - P->b) / P->a; double one_minus_f_squared = one_minus_f * one_minus_f; lat = atan(one_minus_f_squared * tan(lp.phi)); @@ -240,74 +158,41 @@ static PJ_XY dymaxion_forward(PJ_LP lp, PJ *P) { PJ_XYZ cartesianPoint{x, y, z}; - // printf("CARTESIAN: %lf, %lf, %lf\n", x, y, z); - unsigned char face_id = get_ico_face_index(&cartesianPoint); - // printf("FACE ID: %d\n", face_id); PJ_XYZ icoPoint = cartesian_to_ico(&cartesianPoint, face_id); - // printf("ICO: %lf, %lf, %lf\n", icoPoint.x, icoPoint.y, icoPoint.z); - - PJ_XY dymaxionPoint = ico_to_dym(&icoPoint, face_id); - // printf("PROJ OUT: %lf, %lf\n", dymaxionPoint.x, dymaxionPoint.y); - return dymaxionPoint; } -// echo 72.35787652 69.22776711 | bin/proj +proj=dymaxion -// echo 8877734.55 21320168.80 | bin/invproj -f "%.3f" +proj=dymaxion - -// echo 224.71153553 109.61616828 | bin/proj +proj=dymaxion -// echo | bin/invproj -f "%.3f" +proj=dymaxion - -// echo | bin/proj +proj=dymaxion -// echo | bin/invproj -f "%.3f" +proj=dymaxion - static PJ_LP dymaxion_inverse(PJ_XY xy, PJ *P) { - // printf("REVERSE NOT IMPPLEMENTED !!"); PJ_LP lp = {0.0, 0.0}; - // printf("INVPROJ IN: %lf, %lf\n", xy.x, xy.y); - - unsigned char face_id = get_dym_face_index(&xy); - // printf("(inv) FACE ID: %d\n", face_id); if (face_id == 23) { - // printf("INVPROJ BAD: %lf, %lf\n", xy.x, xy.y); - - lp.lam = HUGE_VAL; - lp.phi = HUGE_VAL; - return lp; + // Point lies outside icosahedron net faces + lp.lam = HUGE_VAL; + lp.phi = HUGE_VAL; + return lp; } PJ_XYZ sphereCoords = dym_to_ico(&xy, face_id); - // printf("ICO: %lf, %lf, %lf\n", sphereCoords.x, sphereCoords.y, sphereCoords.z); - // unsigned char other_face_id = get_ico_face_index(&sphereCoords); - // printf("OTHER FACE ID: %d\n", other_face_id); - double norm = sqrtl((sphereCoords.x * sphereCoords.x) + (sphereCoords.y * sphereCoords.y) + (sphereCoords.z * sphereCoords.z)); double q = sphereCoords.x / norm; double r = sphereCoords.y / norm; double s = sphereCoords.z / norm; - // printf("CARTESIAN: %lf, %lf, %lf\n", q, r, s); - - // printf("p: %lf\n", s); // Get the spherical angles from the x y z lp.phi = acos(-s) - M_HALFPI; lp.lam = atan2(r, q); - // printf("SPHERE: %lf, %lf\n", lp.phi, lp.lam); - - /* Apply the shift from the sphere to the ellipsoid as described * in [LK12]. */ if (P->es != 0.0) { @@ -324,9 +209,6 @@ static PJ_LP dymaxion_inverse(PJ_XY xy, PJ *P) { } } - // printf("INVPROJ OUT (phi, lam): %lf, %lf\n", lp.phi, lp.lam); - - return lp; } From 44ef3a9fa2dc3b4feafc875f6fc1d9572ae72707 Mon Sep 17 00:00:00 2001 From: Pierre Louvart Date: Wed, 30 Oct 2024 23:31:33 +0100 Subject: [PATCH 05/23] - Add dymaxion projection entry to he documentation --- docs/plot/plotdefs.json | 12 ++++ .../operations/projections/dymaxion.rst | 52 ++++++++++++++++++ .../projections/images/dymaxion.png | Bin 0 -> 355027 bytes docs/source/operations/projections/index.rst | 1 + docs/source/references.bib | 12 ++++ 5 files changed, 77 insertions(+) create mode 100644 docs/source/operations/projections/dymaxion.rst create mode 100644 docs/source/operations/projections/images/dymaxion.png diff --git a/docs/plot/plotdefs.json b/docs/plot/plotdefs.json index 6471d04c74..7cb5cce4c7 100644 --- a/docs/plot/plotdefs.json +++ b/docs/plot/plotdefs.json @@ -269,6 +269,18 @@ "res": "low", "type": "poly" }, + { + "filename": "dymaxion.png", + "latmax": 90, + "latmin": -90, + "lonmax": 180, + "lonmin": -180, + "name": "dymaxion", + "projstring": "+proj=dymaxion", + "res": "low", + "type": "line", + "delta_cut": 1e6 + }, { "filename": "eck1.png", "latmax": 90, diff --git a/docs/source/operations/projections/dymaxion.rst b/docs/source/operations/projections/dymaxion.rst new file mode 100644 index 0000000000..bfec3e0d30 --- /dev/null +++ b/docs/source/operations/projections/dymaxion.rst @@ -0,0 +1,52 @@ +.. _dymaxion: + +******************************************************************************** +Dymaxion Fuller +******************************************************************************** + +The Dymaxion Fuller map projection is a icosahedron polyhedral projection that intends +to lay out most of continental landmasses unto a flat surface with as few land cuts +as possible while minimizing scale and angular distorsion. +In comparison to the Snyder's Icosahedral Equal Area, this projection relies on a specific way +to orient and cut the icosahedron so that most interruptions lie in the ocean. The projection +was first invented by Buckminster Fuller in 1943 using a cubostahedron as basis. +The idea to use an icosahedron came later in 1954, and it wasn't until 1978 that the projection +was formally mathematically defined :cite:`Gray1995`. + ++---------------------+----------------------------------------------------------+ +| **Classification** | Polyhedral, equal area | ++---------------------+----------------------------------------------------------+ +| **Available forms** | Forward and inverse, spherical | ++---------------------+----------------------------------------------------------+ +| **Defined area** | Global | ++---------------------+----------------------------------------------------------+ +| **Alias** | dymaxion | ++---------------------+----------------------------------------------------------+ +| **Domain** | 2D | ++---------------------+----------------------------------------------------------+ +| **Input type** | Geodetic coordinates | ++---------------------+----------------------------------------------------------+ +| **Output type** | Projected coordinates | ++---------------------+----------------------------------------------------------+ + + +.. figure:: ./images/dymaxion.png + :width: 500 px + :align: center + :alt: Dymaxion Fuller + + proj-string: ``+proj=dymaxion`` + + +Parameters +################################################################################ + +.. note:: All parameters are optional for the projection. + +.. include:: ../options/lon_0.rst + +.. include:: ../options/R.rst + +.. include:: ../options/x_0.rst + +.. include:: ../options/y_0.rst diff --git a/docs/source/operations/projections/images/dymaxion.png b/docs/source/operations/projections/images/dymaxion.png new file mode 100644 index 0000000000000000000000000000000000000000..b5ecb07ecac356d27513a336b01eb8ac7e85bc3a GIT binary patch literal 355027 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%0Aig-y|sQ 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

Hav&uylf26N(!8QMB7LL3@nh|} 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 I)7|#}FF>om7XSbN literal 0 HcmV?d00001 diff --git a/docs/source/operations/projections/index.rst b/docs/source/operations/projections/index.rst index 8b89244e2d..0b249bdd27 100644 --- a/docs/source/operations/projections/index.rst +++ b/docs/source/operations/projections/index.rst @@ -38,6 +38,7 @@ Projections map the spherical 3D space to a flat 2D space. comill crast denoy + dymaxion eck1 eck2 eck3 diff --git a/docs/source/references.bib b/docs/source/references.bib index d8d5f303de..f9670052c2 100644 --- a/docs/source/references.bib +++ b/docs/source/references.bib @@ -73,6 +73,18 @@ @TechReport{Deakin2004 Url = {http://www.mygeodesy.id.au/documents/Molodensky%20V2.pdf} } +@Article{Gray1995, + Title = {Exact Transformation Equations for Fuller's World Map}, + Author = {Robert W. Gray}, + Journal = {Cartographica}, + Year = {1995}, + Number = {3}, + Pages = {17--25}, + Volume = {32}, + + Doi = {10.3138/1677-3273-Q862-1885} +} + @Article{EberHewitt1979, Title = {Conversion algorithms for the {CalCOFI} station grid}, Author = {L. E. Eber and Roger P. Hewitt}, From 2c3beb861dc70464aa9a3ad61eaed960c73d2e3f Mon Sep 17 00:00:00 2001 From: Pierre Louvart Date: Wed, 30 Oct 2024 23:31:48 +0100 Subject: [PATCH 06/23] - Add test to the dymaxion projection --- test/gie/builtins.gie | 106 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/test/gie/builtins.gie b/test/gie/builtins.gie index d74379d2d6..8471434f66 100644 --- a/test/gie/builtins.gie +++ b/test/gie/builtins.gie @@ -1162,6 +1162,112 @@ accept -2 -1 expect -223377.422876954 -111701.072127637 +=============================================================================== +# Dymaxion +# Sph., Ellps. +# (Each of the 23 faces tested separately around their center, inverse included) +=============================================================================== + +------------------------------------------------------------------------------- +operation +proj=dymaxion +ellps=GRS80 +------------------------------------------------------------------------------- +tolerance 0.1 mm +accept 23 28 +expect 13556926.823490718 23467359.674033195 +accept 72 46 +expect 9643052.686797861 23470487.369125906 +accept 145 75 +expect 7737390.782312192 20104788.054769896 +accept -77 61 +expect 9668545.797051517 16783947.67041814 +accept -26 35 +expect 15441270.037205558 20068684.009483118 +accept 29 -13 +expect 15454500.775444025 26772291.248060163 +accept 72 -25 +expect 9646854.070149897 30174627.37899145 +accept 96 10 +expect 7748510.227719365 26793197.86531571 +accept 169 35 +expect 3879364.926075886 20112884.602338977 +accept -151 13 +expect 3855457.9788894877 13372404.237126907 +accept -108 25 +expect 7757309.887436695 13427462.802436445 +accept -84 -10 +expect 9655653.729867224 10046033.288760712 +accept -42 -5 +expect 13531956.757129436 10009950.782333512 +accept -11 -35 +expect 13524799.031510707 3365720.025783973 +accept 154 -35 +expect 1943420.8175922546 30184052.521318957 +accept -157 -28 +expect 1942090.2539895012 10076591.20216224 +accept -108 -46 +expect 7761111.270788729 6723322.792570909 +accept -35 -75 +expect 9666773.175274398 3357623.4782149 +accept 98 -48 +expect 4871988.820643149 32910398.56714167 +accept 113 -72 +expect 7725850.483813245 1088496.8256700835 +accept 143 -9 +expect 3215425.0474725077 27916795.439275663 +accept 124 7 +expect 5140625.112062726 26778848.513305675 +accept 147 15 +expect 2546085.5873131985 22379298.380909223 + +direction inverse +accept 13500000 23400000 +expect 23.028334260781396 29.00141845366607 +accept 9700000 23400000 +expect 70.91748976033631 46.69938767448572 +accept 7700000 20100000 +expect 145.97790022956485 74.66181692499651 +accept 9700000 16700000 +expect -76.80102747900565 59.99374652248361 +accept 15500000 20100000 +expect -25.944389921688217 34.24636404674132 +accept 15500000 26800000 +expect 28.780505935021033 -13.567140588707066 +accept 9700000 30100000 +expect 71.4679674085186 -24.079311453738754 +accept 7700000 26800000 +expect 96.5497950965985 9.88121445991218 +accept 3900000 20100000 +expect 169.13009208849755 35.254403049754224 +accept 3900000 13400000 +expect -150.64046965868116 13.481494624013168 +accept 7700000 13400000 +expect -108.66196431422468 24.604190039126202 +accept 9700000 10000000 +expect -83.45176986114532 -10.484774451578211 +accept 13500000 10000000 +expect -42.33857403889376 -5.173528026525927 +accept 13500000 3300000 +expect -10.156579309260813 -35.39429168339308 +accept 1900000 30100000 +expect 154.6981118584859 -34.09548216619245 +accept 1900000 10000000 +expect -157.1486568493204 -28.983938091775162 +accept 7700000 6700000 +expect -109.0368655953666 -46.16466623109972 +accept 9700000 3300000 +expect -32.11127170743792 -74.98612150074251 +accept 4800000 32900000 +expect 98.90848938837188 -48.50784207235999 +accept 7700000 1100000 +expect 114.00231130949376 -71.99425265168686 +accept 3200000 27900000 +expect 143.20066829467564 -8.847739058325072 +accept 5200000 26800000 +expect 123.33794956763194 6.861286881197438 +accept 2600000 22300000 +expect 147.63769509437498 15.818879769693432 + + =============================================================================== # Eckert I # PCyl., Sph. From f7ab8097ba452f118a7d964c2f6ca538c7955251 Mon Sep 17 00:00:00 2001 From: Pierre Louvart Date: Fri, 1 Nov 2024 11:41:21 +0100 Subject: [PATCH 07/23] - Improve wording on dymaxion doc page. Add a note on dymaxion extent and orientation. --- docs/source/operations/projections/dymaxion.rst | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/source/operations/projections/dymaxion.rst b/docs/source/operations/projections/dymaxion.rst index bfec3e0d30..32646eb82f 100644 --- a/docs/source/operations/projections/dymaxion.rst +++ b/docs/source/operations/projections/dymaxion.rst @@ -5,10 +5,10 @@ Dymaxion Fuller ******************************************************************************** The Dymaxion Fuller map projection is a icosahedron polyhedral projection that intends -to lay out most of continental landmasses unto a flat surface with as few land cuts -as possible while minimizing scale and angular distorsion. +to lay down continental landmasses into a contiguous map with minimal scale and angular +distorsion while having as few land interruptions as possible. In comparison to the Snyder's Icosahedral Equal Area, this projection relies on a specific way -to orient and cut the icosahedron so that most interruptions lie in the ocean. The projection +to orient and cut the icosahedron so that most interruptions lie within the ocean. The projection was first invented by Buckminster Fuller in 1943 using a cubostahedron as basis. The idea to use an icosahedron came later in 1954, and it wasn't until 1978 that the projection was formally mathematically defined :cite:`Gray1995`. @@ -37,6 +37,11 @@ was formally mathematically defined :cite:`Gray1995`. proj-string: ``+proj=dymaxion`` +.. note:: + The output dymaxion map applied to the whole globe has an extent of roughly + :math:`[0, 0, 17404000, 36844000]` in meters. Although the dymaxion map has no + true up or down, the choice was made to lay it out vertically, from Antartica to Australia. + Parameters ################################################################################ From 61a5cdfedf20ac60d3a8e8f2a3a4cfb90e7beb46 Mon Sep 17 00:00:00 2001 From: Pierre Louvart Date: Fri, 1 Nov 2024 13:51:43 +0100 Subject: [PATCH 08/23] - Drop the name dymaxion in favor of airocean. Adjust the doc accordingly. --- docs/plot/plotdefs.json | 6 ++-- .../{dymaxion.rst => airocean.rst} | 20 +++++++------- .../images/{dymaxion.png => airocean.png} | Bin docs/source/operations/projections/index.rst | 2 +- src/lib_proj.cmake | 2 +- src/pj_list.h | 2 +- .../{dymaxion.cpp => airocean.cpp} | 26 +++++++++--------- test/gie/builtins.gie | 4 +-- 8 files changed, 31 insertions(+), 31 deletions(-) rename docs/source/operations/projections/{dymaxion.rst => airocean.rst} (81%) rename docs/source/operations/projections/images/{dymaxion.png => airocean.png} (100%) rename src/projections/{dymaxion.cpp => airocean.cpp} (97%) diff --git a/docs/plot/plotdefs.json b/docs/plot/plotdefs.json index 7cb5cce4c7..d585cca455 100644 --- a/docs/plot/plotdefs.json +++ b/docs/plot/plotdefs.json @@ -270,13 +270,13 @@ "type": "poly" }, { - "filename": "dymaxion.png", + "filename": "airocean.png", "latmax": 90, "latmin": -90, "lonmax": 180, "lonmin": -180, - "name": "dymaxion", - "projstring": "+proj=dymaxion", + "name": "airocean", + "projstring": "+proj=airocean", "res": "low", "type": "line", "delta_cut": 1e6 diff --git a/docs/source/operations/projections/dymaxion.rst b/docs/source/operations/projections/airocean.rst similarity index 81% rename from docs/source/operations/projections/dymaxion.rst rename to docs/source/operations/projections/airocean.rst index 32646eb82f..20c3e9682d 100644 --- a/docs/source/operations/projections/dymaxion.rst +++ b/docs/source/operations/projections/airocean.rst @@ -1,12 +1,12 @@ -.. _dymaxion: +.. _airocean: ******************************************************************************** -Dymaxion Fuller +Airocean ******************************************************************************** -The Dymaxion Fuller map projection is a icosahedron polyhedral projection that intends +The Airocean map projection is based on the Dymaxion Fuller projection, which is a icosahedron polyhedral projection that intends to lay down continental landmasses into a contiguous map with minimal scale and angular -distorsion while having as few land interruptions as possible. +distorsion while preserving land surfaces from (most) interruptions. In comparison to the Snyder's Icosahedral Equal Area, this projection relies on a specific way to orient and cut the icosahedron so that most interruptions lie within the ocean. The projection was first invented by Buckminster Fuller in 1943 using a cubostahedron as basis. @@ -20,7 +20,7 @@ was formally mathematically defined :cite:`Gray1995`. +---------------------+----------------------------------------------------------+ | **Defined area** | Global | +---------------------+----------------------------------------------------------+ -| **Alias** | dymaxion | +| **Alias** | airocean | +---------------------+----------------------------------------------------------+ | **Domain** | 2D | +---------------------+----------------------------------------------------------+ @@ -30,16 +30,16 @@ was formally mathematically defined :cite:`Gray1995`. +---------------------+----------------------------------------------------------+ -.. figure:: ./images/dymaxion.png +.. figure:: ./images/airocean.png :width: 500 px :align: center - :alt: Dymaxion Fuller + :alt: Airocean - proj-string: ``+proj=dymaxion`` + proj-string: ``+proj=airocean`` .. note:: - The output dymaxion map applied to the whole globe has an extent of roughly - :math:`[0, 0, 17404000, 36844000]` in meters. Although the dymaxion map has no + The airocean map of the whole globe has an extent of approximatelly + :math:`[0, 0, 17404000, 36844000]` in meters. Although the airocean map has no true up or down, the choice was made to lay it out vertically, from Antartica to Australia. diff --git a/docs/source/operations/projections/images/dymaxion.png b/docs/source/operations/projections/images/airocean.png similarity index 100% rename from docs/source/operations/projections/images/dymaxion.png rename to docs/source/operations/projections/images/airocean.png diff --git a/docs/source/operations/projections/index.rst b/docs/source/operations/projections/index.rst index 0b249bdd27..8debb853cf 100644 --- a/docs/source/operations/projections/index.rst +++ b/docs/source/operations/projections/index.rst @@ -17,6 +17,7 @@ Projections map the spherical 3D space to a flat 2D space. adams_ws2 aea aeqd + airocean airy aitoff alsk @@ -38,7 +39,6 @@ Projections map the spherical 3D space to a flat 2D space. comill crast denoy - dymaxion eck1 eck2 eck3 diff --git a/src/lib_proj.cmake b/src/lib_proj.cmake index 2894f129a2..db61c21b43 100644 --- a/src/lib_proj.cmake +++ b/src/lib_proj.cmake @@ -28,7 +28,7 @@ print_variable(ENABLE_IPO) ############################################## set(SRC_LIBPROJ_PROJECTIONS - projections/dymaxion.cpp + projections/airocean.cpp projections/aeqd.cpp projections/adams.cpp projections/gnom.cpp diff --git a/src/pj_list.h b/src/pj_list.h index 80d2b900d5..dbf3ec7ce6 100644 --- a/src/pj_list.h +++ b/src/pj_list.h @@ -37,7 +37,7 @@ PROJ_HEAD(crast, "Craster Parabolic (Putnins P4)") PROJ_HEAD(defmodel, "Deformation model") PROJ_HEAD(deformation, "Kinematic grid shift") PROJ_HEAD(denoy, "Denoyer Semi-Elliptical") -PROJ_HEAD(dymaxion, "Dymaxion Fuller") +PROJ_HEAD(airocean, "Airocean Fuller") PROJ_HEAD(eck1, "Eckert I") PROJ_HEAD(eck2, "Eckert II") PROJ_HEAD(eck3, "Eckert III") diff --git a/src/projections/dymaxion.cpp b/src/projections/airocean.cpp similarity index 97% rename from src/projections/dymaxion.cpp rename to src/projections/airocean.cpp index ecaf09f2d3..4fe1fff2c5 100644 --- a/src/projections/dymaxion.cpp +++ b/src/projections/airocean.cpp @@ -12,7 +12,7 @@ #include "proj.h" #include "proj_internal.h" -PROJ_HEAD(dymaxion, "Dymaxion") "\n\tMisc, Sph&Ell"; +PROJ_HEAD(airocean, "Airocean") "\n\tMisc, Sph&Ell"; namespace { // anonymous namespace @@ -30,10 +30,10 @@ constexpr PJ_XYZ ico_3_centers[3] = {{-0.64642729, 0.48840818, -0.12653887}, {-0 constexpr PJ_XYZ ico_centers[23] = {{0.6446662, 0.27407261, 0.37518718999999995}, {0.1747689766666667, 0.5231760133333333, 0.5720300666666667}, {-0.16999525333333332, 0.11746358666666666, 0.7673197833333334}, {0.08682595666666666, -0.38238388333333334, 0.69117259}, {0.5903144233333334, -0.28559418333333336, 0.44882131999999997}, {0.6764340433333333, 0.37526316, -0.18190732333333334}, {0.22617043, 0.68690576, -0.3293677933333333}, {-0.08387563333333335, 0.77832093, 0.13659113999999997}, {-0.6417158766666667, 0.12186443666666665, 0.45257653999999997}, {-0.6764340433333333, -0.37526316, 0.18190732333333334}, {-0.22617043, -0.68690576, 0.3293677933333333}, {0.08387563333333335, -0.77832093, -0.13659113999999997}, {0.5884910233333334, -0.5302967366666668, -0.06276479999999997}, {0.6417158766666667, -0.12186443666666665, -0.45257653999999997}, {-0.5903144233333334, 0.28559418333333336, -0.44882131999999997}, {-0.6446662, -0.27407261, -0.37518718999999995}, {-0.1747689766666667, -0.5231760133333333, -0.5720300666666667}, {0.16999525333333332, -0.11746358666666668, -0.7673197833333334}, {-0.07609744999999997, 0.5360047600000001, -0.6075312033333334}, {-0.09755446, 0.22876301, -0.7748139766666666}, {-0.6464272866666667, 0.48840817666666664, -0.12653887}, {-0.45298488333333337, 0.6766130466666667, 0.0970687933333333}, {-0.6660608966666667, 0.42586898, 0.21776447666666665}}; constexpr PJ_XYZ ico_normals[23] = {{0.8112534716456183, 0.3448953244235397, 0.4721387719026189}, {0.21993078167242514, 0.6583691769191125, 0.7198475381327677}, {-0.21392348218574597, 0.1478171768398566, 0.9656017947376752}, {0.10926252593733311, -0.48119515565604315, 0.8697775132750616}, {0.7428567271237952, -0.3593941714860216, 0.5648005953155497}, {0.8512303999921011, 0.4722343774266651, -0.22891373682183738}, {0.28461480749719364, 0.8644080979012073, -0.4144792535654255}, {-0.1055498134715015, 0.9794457311974099, 0.17188745304792394}, {-0.80754076069938, 0.15335524153301364, 0.5695261975567215}, {-0.8512303999921011, -0.4722343774266651, 0.22891373682183735}, {-0.28461480749719364, -0.8644080979012073, 0.4144792535654255}, {0.10554981347150154, -0.97944573119741, -0.17188745304792397}, {0.7405621455042509, -0.6673299596621295, -0.07898375518726185}, {0.80754076069938, -0.15335524153301364, -0.5695261975567215}, {-0.7428567271237952, 0.3593941714860216, -0.5648005953155497}, {-0.8112534716456183, -0.3448953244235397, -0.4721387719026189}, {-0.21993078167242514, -0.6583691769191125, -0.7198475381327677}, {0.21392348218574597, -0.1478171768398566, -0.9656017947376752}, {-0.1092625236946045, 0.48119515875463253, -0.8697775118425345}, {-0.10926252412771359, 0.4811951525529661, -0.8697775152191327}, {-0.7405621389792739, 0.6673299643797594, 0.07898377650727696}, {-0.7405621607654073, 0.6673299431834946, 0.07898375132383098}, {-0.7405621367680706, 0.6673299714231342, 0.07898373773067752}}; constexpr double ico_dym_trans[23][2][4] = {{{3676785.549175448, -3835017.5266620647, -3516181.101897219, 13536571.968889877}, {597946.080039791, 4588467.120428165, -4379277.476119764, 23446030.430853583}}, {{6186178.005526091, -1393567.8850913076, -615475.9158875226, 9668979.99656166}, {597946.0790283178, 4588467.148836121, -4379277.446492919, 23446030.4022735}}, {{6193487.416382644, -412638.42193403625, 1435299.1565727487, 7735183.994711302}, {610606.2949588482, 6287486.763792622, -827230.771869741, 20096597.453907937}}, {{6320833.951539666, -6999.925417495968, -797903.6054442794, 9668979.964544488}, {390035.65785509185, 5584900.2162612835, 3040789.86561249, 16747164.583089648}}, {{1785817.7160921493, -3817376.067203325, -4777879.901545344, 15470367.97086971}, {3873198.4648612146, 4557911.12782605, -2193951.0189847522, 20096597.472239383}}, {{1653953.7567438218, -4829262.323420258, -3812125.829251187, 15470367.969285296}, {-2905701.3326818133, 2866384.6227320307, -4891868.725058803, 26795463.326497696}}, {{6107473.604777472, -1644266.325782215, 764719.3302896866, 9668979.973521523}, {-20484.65208776388, -2749071.5526177026, -5747332.168284684, 30144896.23069373}}, {{6325351.398413758, 599247.844237452, 469545.1345954169, 7735183.991104206}, {356890.77665911405, 1136808.9376555325, -6258588.903331836, 26795463.365920186}}, {{3707748.6155441254, 320266.3046413801, 5171041.531732354, 3867591.9864321505}, {610606.2818745336, 6287486.766371998, -827230.7619227654, 20096597.44051682}}, {{3343388.0482846545, -4896993.062013145, 2330419.6732539237, 3867591.9905542377}, {20484.69631605078, 2749071.5422549895, 5747332.173083752, 13397731.669298988}}, {{6107473.604777474, -1644266.3257822143, 764719.330289686, 7735183.984065069}, {20484.65208776346, 2749071.552617706, 5747332.168284684, 13397731.654138729}}, {{6325351.398413757, 599247.8442374519, 469545.1345954159, 9668979.966482382}, {-356890.77665911167, -1136808.9376555379, 6258588.903331836, 10048298.789365184}}, {{4266333.348411551, 4606685.482609389, 1080041.5914374113, 13536571.961679665}, {-356890.81480763154, -1136808.9649443403, 6258588.896199714, 10048298.78278621}}, {{3707748.6155441264, 320266.30464138015, 5171041.531732352, 13536571.97115444}, {-610606.2818745337, -6287486.766372, 827230.7619227694, 3349432.8639618154}}, {{2461379.4064226267, 5855954.858490806, 488922.63367311924, 1933796.0165698116}, {3483162.7410947136, -1026989.0860837825, -5234740.880461738, 30144896.24019003}}, {{1320556.279179943, -5891237.854051452, 2034474.9935921053, 1933796.0148528814}, {-3483162.72987335, 1026989.0418338334, 5234740.896609632, 10048298.759397767}}, {{6186178.005526091, -1393567.885091309, -615475.9158875229, 7735183.961024929}, {-597946.0790283154, -4588467.148836119, 4379277.446492919, 6698865.825718503}}, {{6193487.416382645, -412638.4219340361, 1435299.156572748, 9668979.962875288}, {-610606.2949588535, -6287486.763792623, 827230.7718697439, 3349432.877352944}}, {{3498197.81693495, 4833165.559061878, 2234449.5231911456, 3867591.983769496}, {5278984.96116607, -2798512.200701845, -2211399.7153384583, 33494329.158408284}}, {{6320833.983680945, -6999.984355479206, -797903.6271294819, 7735183.9823354}, {-390035.68446349393, -5584900.177255948, -3040789.814780467, 0.044359486997177525}}, {{4266333.41772867, 4606685.445409489, 1080041.6365273518, 3867592.0700864717}, {356890.72771489987, 1136809.053212709, -6258588.866576485, 26795463.265809294}}, {{4266333.204506115, 4606685.540218764, 1080041.5936954806, 3867591.897018196}, {356890.8007120557, 1136808.9497242568, -6258588.899768077, 26795463.365730304}}, {{1824090.1118675405, 1318837.3514699321, 5960117.7705610385, 1933795.9110601672}, {3873198.583330483, 4557911.083457602, -2193951.0468033054, 23446030.547617782}}}; -constexpr pj_face dymaxion_faces[23] = {{{11602775.971724393, 20096597.491866, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {17404163.95758659, 23446030.407177, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {5801387.985862196, 23446030.407177, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {5801387.985862196, 16747164.576555002, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {5801387.985862196, 16747164.576555002, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {17404163.95758659, 23446030.407177, 1.0}, {17404163.95758659, 16747164.576555002, 1.0}}, {{17404163.95758659, 23446030.407177, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {17404163.95758659, 30144896.237799004, 1.0}}, {{11602775.971724393, 33494329.153110005, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {5801387.985862196, 30144896.237799004, 1.0}}, {{5801387.985862196, 30144896.237799004, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}, {{5801387.985862196, 16747164.576555002, 1.0}, {0.0, 20096597.491866, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}, {{5801387.985862196, 16747164.576555002, 1.0}, {5801387.985862196, 10048298.745933, 1.0}, {0.0, 13397731.661244001, 1.0}}, {{5801387.985862196, 16747164.576555002, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {5801387.985862196, 10048298.745933, 1.0}}, {{5801387.985862196, 10048298.745933, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}}, {{11602775.971724393, 6698865.830622001, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {17404163.95758659, 10048298.745933, 1.0}}, {{11602775.971724393, 0.0, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}, {17404163.95758659, 3349432.9153110003, 1.0}}, {{0.0, 33494329.153110005, 1.0}, {5801387.985862196, 30144896.237799004, 1.0}, {0.0, 26795463.322488002, 1.0}}, {{0.0, 6698865.830622001, 1.0}, {0.0, 13397731.661244001, 1.0}, {5801387.985862196, 10048298.745933, 1.0}}, {{5801387.985862196, 3349432.9153110003, 1.0}, {5801387.985862196, 10048298.745933, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}}, {{5801387.985862196, 3349432.9153110003, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}, {11602775.971724393, 0.0, 1.0}}, {{5801387.985862196, 30144896.237799004, 1.0}, {2900693.992931098, 31819612.695454504, 1.0}, {5801387.985862196, 36843762.068421006, 1.0}}, {{5801387.985862196, 3349432.9153110003, 1.0}, {11602775.971724393, 0.0, 1.0}, {5801387.985862196, 0.0, 1.0}}, {{0.0, 26795463.322488002, 1.0}, {5801387.985862196, 30144896.237799004, 1.0}, {3867591.9905747976, 26795463.322488002, 1.0}}, {{5801387.985862196, 30144896.237799004, 1.0}, {5801387.985862196, 23446030.407177, 1.0}, {3867591.9905747976, 26795463.322488002, 1.0}}, {{0.0, 20096597.491866, 1.0}, {1933795.9952873988, 23446030.407177, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}}; -constexpr PJ_XY dymaxion_22_centers[22] = {{13536571.967011793, 23446030.407177}, {9668979.976436995, 23446030.407177}, {7735183.981149595, 20096597.491866004}, {9668979.976436993, 16747164.576555}, {15470367.962299192, 20096597.491866004}, {15470367.962299192, 26795463.322488}, {9668979.976436993, 30144896.237799004}, {7735183.981149595, 26795463.322488}, {3867591.9905747976, 20096597.491866004}, {3867591.9905747976, 13397731.661244}, {7735183.981149595, 13397731.661244}, {9668979.976436995, 10048298.745933002}, {13536571.967011793, 10048298.745933}, {13536571.967011793, 3349432.915311}, {1933795.9952873988, 30144896.237799004}, {1933795.9952873988, 10048298.745933}, {7735183.981149595, 6698865.830622}, {9668979.976436995, 3349432.915311}, {3867591.9905747976, 26795463.322488}, {3867591.9905747976, 33494329.15311}, {7735183.981149595, 0.0}, {1933795.9952873988, 23446030.407177}}; -constexpr PJ_XY dymaxion_2_centers[2] = {{3867591.9905747976, 26795463.322488}, {3867591.9905747976, 33494329.15311}}; -constexpr PJ_XY dymaxion_centers[23] = {{13536571.967011793, 23446030.407177}, {9668979.976436995, 23446030.407177}, {7735183.981149595, 20096597.491866004}, {9668979.976436993, 16747164.576555}, {15470367.962299192, 20096597.491866004}, {15470367.962299192, 26795463.322488}, {9668979.976436993, 30144896.237799004}, {7735183.981149595, 26795463.322488}, {3867591.9905747976, 20096597.491866004}, {3867591.9905747976, 13397731.661244}, {7735183.981149595, 13397731.661244}, {9668979.976436995, 10048298.745933002}, {13536571.967011793, 10048298.745933}, {13536571.967011793, 3349432.915311}, {1933795.9952873988, 30144896.237799004}, {1933795.9952873988, 10048298.745933}, {7735183.981149595, 6698865.830622}, {9668979.976436995, 3349432.915311}, {4834489.9882184975, 32936090.333891507}, {7735183.981149595, 1116477.638437}, {3222993.3254789985, 27911940.960925}, {5156789.320766397, 26795463.322488}, {2578394.6603831984, 22329552.768740002}}; +constexpr pj_face airocean_faces[23] = {{{11602775.971724393, 20096597.491866, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {17404163.95758659, 23446030.407177, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {5801387.985862196, 23446030.407177, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {5801387.985862196, 16747164.576555002, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {5801387.985862196, 16747164.576555002, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {17404163.95758659, 23446030.407177, 1.0}, {17404163.95758659, 16747164.576555002, 1.0}}, {{17404163.95758659, 23446030.407177, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {17404163.95758659, 30144896.237799004, 1.0}}, {{11602775.971724393, 33494329.153110005, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {5801387.985862196, 30144896.237799004, 1.0}}, {{5801387.985862196, 30144896.237799004, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}, {{5801387.985862196, 16747164.576555002, 1.0}, {0.0, 20096597.491866, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}, {{5801387.985862196, 16747164.576555002, 1.0}, {5801387.985862196, 10048298.745933, 1.0}, {0.0, 13397731.661244001, 1.0}}, {{5801387.985862196, 16747164.576555002, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {5801387.985862196, 10048298.745933, 1.0}}, {{5801387.985862196, 10048298.745933, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}}, {{11602775.971724393, 6698865.830622001, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {17404163.95758659, 10048298.745933, 1.0}}, {{11602775.971724393, 0.0, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}, {17404163.95758659, 3349432.9153110003, 1.0}}, {{0.0, 33494329.153110005, 1.0}, {5801387.985862196, 30144896.237799004, 1.0}, {0.0, 26795463.322488002, 1.0}}, {{0.0, 6698865.830622001, 1.0}, {0.0, 13397731.661244001, 1.0}, {5801387.985862196, 10048298.745933, 1.0}}, {{5801387.985862196, 3349432.9153110003, 1.0}, {5801387.985862196, 10048298.745933, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}}, {{5801387.985862196, 3349432.9153110003, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}, {11602775.971724393, 0.0, 1.0}}, {{5801387.985862196, 30144896.237799004, 1.0}, {2900693.992931098, 31819612.695454504, 1.0}, {5801387.985862196, 36843762.068421006, 1.0}}, {{5801387.985862196, 3349432.9153110003, 1.0}, {11602775.971724393, 0.0, 1.0}, {5801387.985862196, 0.0, 1.0}}, {{0.0, 26795463.322488002, 1.0}, {5801387.985862196, 30144896.237799004, 1.0}, {3867591.9905747976, 26795463.322488002, 1.0}}, {{5801387.985862196, 30144896.237799004, 1.0}, {5801387.985862196, 23446030.407177, 1.0}, {3867591.9905747976, 26795463.322488002, 1.0}}, {{0.0, 20096597.491866, 1.0}, {1933795.9952873988, 23446030.407177, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}}; +constexpr PJ_XY airocean_22_centers[22] = {{13536571.967011793, 23446030.407177}, {9668979.976436995, 23446030.407177}, {7735183.981149595, 20096597.491866004}, {9668979.976436993, 16747164.576555}, {15470367.962299192, 20096597.491866004}, {15470367.962299192, 26795463.322488}, {9668979.976436993, 30144896.237799004}, {7735183.981149595, 26795463.322488}, {3867591.9905747976, 20096597.491866004}, {3867591.9905747976, 13397731.661244}, {7735183.981149595, 13397731.661244}, {9668979.976436995, 10048298.745933002}, {13536571.967011793, 10048298.745933}, {13536571.967011793, 3349432.915311}, {1933795.9952873988, 30144896.237799004}, {1933795.9952873988, 10048298.745933}, {7735183.981149595, 6698865.830622}, {9668979.976436995, 3349432.915311}, {3867591.9905747976, 26795463.322488}, {3867591.9905747976, 33494329.15311}, {7735183.981149595, 0.0}, {1933795.9952873988, 23446030.407177}}; +constexpr PJ_XY airocean_2_centers[2] = {{3867591.9905747976, 26795463.322488}, {3867591.9905747976, 33494329.15311}}; +constexpr PJ_XY airocean_centers[23] = {{13536571.967011793, 23446030.407177}, {9668979.976436995, 23446030.407177}, {7735183.981149595, 20096597.491866004}, {9668979.976436993, 16747164.576555}, {15470367.962299192, 20096597.491866004}, {15470367.962299192, 26795463.322488}, {9668979.976436993, 30144896.237799004}, {7735183.981149595, 26795463.322488}, {3867591.9905747976, 20096597.491866004}, {3867591.9905747976, 13397731.661244}, {7735183.981149595, 13397731.661244}, {9668979.976436995, 10048298.745933002}, {13536571.967011793, 10048298.745933}, {13536571.967011793, 3349432.915311}, {1933795.9952873988, 30144896.237799004}, {1933795.9952873988, 10048298.745933}, {7735183.981149595, 6698865.830622}, {9668979.976436995, 3349432.915311}, {4834489.9882184975, 32936090.333891507}, {7735183.981149595, 1116477.638437}, {3222993.3254789985, 27911940.960925}, {5156789.320766397, 26795463.322488}, {2578394.6603831984, 22329552.768740002}}; constexpr double dym_ico_trans[23][3][3] = {{{9.058433279771384e-08, 1.4731493732699052e-08, -0.9269301899999991}, {-9.44826679987233e-08, 1.1304527499839262e-07, -1.0974189099999994}, {-8.662754779110161e-08, -1.0789150406568015e-07, 4.077454709999999}}, {{1.5240780519329358e-07, 1.473149373269901e-08, -1.6442540899999978}, {-3.4333093302050216e-08, 1.1304527499839258e-07, -1.7953209499999985}, {-1.51633738709386e-08, -1.0789150406568015e-07, 3.248271909999998}}, {{1.525878853745444e-07, 1.504340175606161e-08, -1.6526118100000007}, {-1.0166102516109274e-08, 1.5490373090569122e-07, -2.9169376700000003}, {3.536121881520939e-08, -2.0380342501548998e-08, 0.9033697899999995}}, {{1.557252983599121e-07, 9.609243061078464e-09, -1.5798064100000002}, {-1.7245441994882394e-10, 1.375942246501773e-07, -2.6850295500000003}, {-1.96578129712955e-08, 7.491541593592458e-08, -0.37337721000000035}}, {{4.399688326690425e-08, 9.54233233151121e-08, -2.0080176699999996}, {-9.404803666461074e-08, 1.122924714451482e-07, -1.0873330499999996}, {-1.1771180391040664e-07, -5.405199315156007e-08, 3.3561273899999997}}, {{4.074817450170371e-08, -7.158726449003567e-08, 1.9642587099999982}, {-1.1897770528054373e-07, 7.061862589298568e-08, 0.3236332400000001}, {-9.391868744648748e-08, -1.2052012839388902e-07, 4.500442009999996}}, {{1.5046877525297362e-07, -5.046779687011883e-10, -1.2134956799999999}, {-4.0509505754953036e-08, -6.772840231043597e-08, 3.120257019999999}, {1.8840259480379495e-08, -1.4159603341569342e-07, 3.7568638499999985}}, {{1.55836594139745e-07, 8.792657069014762e-09, -1.52490368}, {1.4763566099823772e-08, 2.800736643244269e-08, -0.08634832999999958}, {1.1568102351290336e-08, -1.5419177904390005e-07, 4.178749899999998}}, {{9.134716490113195e-08, 1.504340175606163e-08, -1.2973306300000003}, {7.890345398644546e-09, 1.5490373090569127e-07, -3.021690130000001}, {1.2739806091251417e-07, -2.0380342501549028e-08, 0.3694283599999999}}, {{8.237047688665845e-08, 5.04677968701152e-10, -1.0017709799999996}, {-1.2064637664394705e-07, 6.772840231043599e-08, -0.8160591599999997}, {5.741414913322641e-08, 1.4159603341569342e-07, -1.937212839999999}}, {{1.504687752529736e-07, 5.046779687011514e-10, -1.3968356299999996}, {-4.0509505754953036e-08, 6.772840231043597e-08, -1.2809642399999992}, {1.8840259480379524e-08, 1.415960334156934e-07, -1.713430739999999}}, {{1.55836594139745e-07, -8.792657069014724e-09, -1.3345540299999996}, {1.4763566099823759e-08, -2.8007366432442684e-08, -0.6396431699999997}, {1.1568102351290311e-08, 1.5419177904390013e-07, -1.7978079499999997}}, {{1.0510891988020954e-07, -8.792657069014762e-09, -0.7459721899999996}, {1.1349411668458604e-07, -2.8007366432442694e-08, -1.7851916299999993}, {2.6608799545245027e-08, 1.541917790439001e-07, -1.9723217899999996}}, {{9.134716490113195e-08, -1.5043401756061595e-08, -0.5444247299999998}, {7.890345398644617e-09, -1.5490373090569122e-07, 0.29016699000000007}, {1.2739806091251412e-07, 2.038034250154901e-08, -2.2453721499999992}}, {{6.064058047097081e-08, 8.58140802540336e-08, -3.294437479999999}, {1.4427215125754238e-07, -2.530175320502907e-08, 0.7693199999999997}, {1.2045502760769865e-08, -1.2896740908748457e-07, 3.4155942999999986}}, {{3.2534318590648264e-08, -8.581408025403363e-08, 0.15470457999999998}, {-1.4514141392576755e-07, 2.530175320502908e-08, -0.2476383}, {5.01230094778404e-08, 1.289674090874846e-07, -1.7680179200000001}}, {{1.524078051932937e-07, -1.4731493732699067e-08, -1.25498709}, {-3.433309330205022e-08, -1.1304527499839266e-07, 0.49967191}, {-1.5163373870938614e-08, 1.0789150406568026e-07, -1.17748929}}, {{1.5258788537454444e-07, -1.50434017560616e-08, -1.25498709}, {-1.016610251610931e-08, -1.5490373090569122e-07, 0.49967191}, {3.536121881520941e-08, 2.0380342501549018e-08, -1.17748929}}, {{8.618449605826386e-08, 1.3005744286105568e-07, -4.776339219999996}, {1.1907386502737676e-07, -6.894646223375916e-08, 2.2311702599999985}, {5.5049746849940485e-08, -5.4481873383947436e-08, 0.9207512499999986}}, {{1.5572529749804938e-07, -9.609244553868475e-09, -1.29138978}, {-1.7245528181154292e-10, -1.3759422614296728e-07, 0.38371785999999997}, {-1.9657812971295542e-08, -7.491541593592457e-08, -0.53911579}}, {{1.0510892074207234e-07, 8.792655576224747e-09, -1.2306127199999985}, {1.1349411496086066e-07, 2.8007369418022736e-08, -0.6591226399999993}, {2.6608799545244997e-08, -1.5419177904390008e-07, 4.091492979999998}}, {{1.0510891815648413e-07, 8.79265706901476e-09, -1.2306127500000001}, {1.1349412013203696e-07, 2.8007366432442717e-08, -0.6591225800000001}, {2.6608799545245066e-08, -1.5419177904390005e-07, 4.091492979999997}}, {{4.4939794689710465e-08, 9.54233248079021e-08, -2.9126935899999995}, {3.249196924242356e-08, 1.1229246845956814e-07, -2.1653487399999993}, {1.4683839747935709e-07, -5.405199315156002e-08, 1.0461139699999995}}}; @@ -67,7 +67,7 @@ inline unsigned char get_ico_face_index(const PJ_XYZ *p) { inline unsigned char get_dym_face_index(const PJ_XY *p) { const PJ_XYZ pp{p->x, p->y, 1.0}; for (unsigned char i=0; i < 23; i++) { - if (is_point_in_face(&pp, &dymaxion_faces[i])) { + if (is_point_in_face(&pp, &airocean_faces[i])) { return i; } } @@ -129,7 +129,7 @@ inline PJ_XYZ cartesian_to_ico(const PJ_XYZ *p, unsigned char face_id) { // The Forward and Inverse Functions // // ============================================ -static PJ_XY dymaxion_forward(PJ_LP lp, PJ *P) { +static PJ_XY airocean_forward(PJ_LP lp, PJ *P) { double lat; /* Convert the geodetic latitude to a geocentric latitude. @@ -162,14 +162,14 @@ static PJ_XY dymaxion_forward(PJ_LP lp, PJ *P) { PJ_XYZ icoPoint = cartesian_to_ico(&cartesianPoint, face_id); - PJ_XY dymaxionPoint = ico_to_dym(&icoPoint, face_id); + PJ_XY airoceanPoint = ico_to_dym(&icoPoint, face_id); - return dymaxionPoint; + return airoceanPoint; } -static PJ_LP dymaxion_inverse(PJ_XY xy, PJ *P) { +static PJ_LP airocean_inverse(PJ_XY xy, PJ *P) { PJ_LP lp = {0.0, 0.0}; unsigned char face_id = get_dym_face_index(&xy); @@ -212,13 +212,13 @@ static PJ_LP dymaxion_inverse(PJ_XY xy, PJ *P) { return lp; } -PJ *PJ_PROJECTION(dymaxion) { +PJ *PJ_PROJECTION(airocean) { P->left = PJ_IO_UNITS_RADIANS; P->right = PJ_IO_UNITS_PROJECTED; P->from_greenwich = -P->lam0; - P->inv = dymaxion_inverse; - P->fwd = dymaxion_forward; + P->inv = airocean_inverse; + P->fwd = airocean_forward; return P; } diff --git a/test/gie/builtins.gie b/test/gie/builtins.gie index 8471434f66..d69239aee0 100644 --- a/test/gie/builtins.gie +++ b/test/gie/builtins.gie @@ -1163,13 +1163,13 @@ expect -223377.422876954 -111701.072127637 =============================================================================== -# Dymaxion +# Airocean # Sph., Ellps. # (Each of the 23 faces tested separately around their center, inverse included) =============================================================================== ------------------------------------------------------------------------------- -operation +proj=dymaxion +ellps=GRS80 +operation +proj=airocean +ellps=GRS80 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 23 28 From b757564bbfaa816d8e4870fc916da97010133133 Mon Sep 17 00:00:00 2001 From: Pierre Louvart Date: Fri, 1 Nov 2024 15:37:34 +0100 Subject: [PATCH 09/23] - Document constants. Rename variables to remove references to dymaxion (dym). Remove unused constants. Change sqrtl to sqrt. --- src/projections/airocean.cpp | 77 ++++++++++++++++++++++++------------ 1 file changed, 51 insertions(+), 26 deletions(-) diff --git a/src/projections/airocean.cpp b/src/projections/airocean.cpp index 4fe1fff2c5..defddf793d 100644 --- a/src/projections/airocean.cpp +++ b/src/projections/airocean.cpp @@ -23,18 +23,43 @@ namespace { // anonymous namespace }; } // anonymous namespace + +/* + The vertices of the faces of the icosahedron are inspired by those used by Robert W. Gray. + + Original Reference: + Robert W. Gray (1995) Exact Transformation Equations for + Fuller's World Map, Vol. 32. Autumn, 1995, pp. 17-25. + + To accomodate for land parts that would be interrupted by using a mere icosahedron, + some faces are split in two (Australia) and 3 (Japan) subfaces. +*/ +// Define the 23 faces and subfaces constexpr pj_face ico_faces[23] = {{{0.42015243, 0.07814525, 0.90408255}, {0.51883673, 0.83542038, 0.18133184}, {0.99500944, -0.0913478, 0.04014718}}, {{0.42015243, 0.07814525, 0.90408255}, {-0.41468223, 0.65596241, 0.63067581}, {0.51883673, 0.83542038, 0.18133184}}, {{0.42015243, 0.07814525, 0.90408255}, {-0.51545596, -0.3817169, 0.76720099}, {-0.41468223, 0.65596241, 0.63067581}}, {{0.42015243, 0.07814525, 0.90408255}, {0.3557814, -0.84358, 0.40223423}, {-0.51545596, -0.3817169, 0.76720099}}, {{0.42015243, 0.07814525, 0.90408255}, {0.99500944, -0.0913478, 0.04014718}, {0.3557814, -0.84358, 0.40223423}}, {{0.99500944, -0.0913478, 0.04014718}, {0.51883673, 0.83542038, 0.18133184}, {0.51545596, 0.3817169, -0.76720099}}, {{0.51545596, 0.3817169, -0.76720099}, {0.51883673, 0.83542038, 0.18133184}, {-0.3557814, 0.84358, -0.40223423}}, {{-0.3557814, 0.84358, -0.40223423}, {0.51883673, 0.83542038, 0.18133184}, {-0.41468223, 0.65596241, 0.63067581}}, {{-0.51545596, -0.3817169, 0.76720099}, {-0.99500944, 0.0913478, -0.04014718}, {-0.41468223, 0.65596241, 0.63067581}}, {{-0.51545596, -0.3817169, 0.76720099}, {-0.51883673, -0.83542038, -0.18133184}, {-0.99500944, 0.0913478, -0.04014718}}, {{-0.51545596, -0.3817169, 0.76720099}, {0.3557814, -0.84358, 0.40223423}, {-0.51883673, -0.83542038, -0.18133184}}, {{-0.51883673, -0.83542038, -0.18133184}, {0.3557814, -0.84358, 0.40223423}, {0.41468223, -0.65596241, -0.63067581}}, {{0.41468223, -0.65596241, -0.63067581}, {0.3557814, -0.84358, 0.40223423}, {0.99500944, -0.0913478, 0.04014718}}, {{0.51545596, 0.3817169, -0.76720099}, {0.41468223, -0.65596241, -0.63067581}, {0.99500944, -0.0913478, 0.04014718}}, {{-0.42015243, -0.07814525, -0.90408255}, {-0.3557814, 0.84358, -0.40223423}, {-0.99500944, 0.0913478, -0.04014718}}, {{-0.42015243, -0.07814525, -0.90408255}, {-0.99500944, 0.0913478, -0.04014718}, {-0.51883673, -0.83542038, -0.18133184}}, {{-0.42015243, -0.07814525, -0.90408255}, {-0.51883673, -0.83542038, -0.18133184}, {0.41468223, -0.65596241, -0.63067581}}, {{-0.42015243, -0.07814525, -0.90408255}, {0.41468223, -0.65596241, -0.63067581}, {0.51545596, 0.3817169, -0.76720099}}, {{-0.3557814, 0.84358, -0.40223423}, {-0.38796691, 0.38271738, -0.65315839}, {0.51545596, 0.3817169, -0.76720099}}, {{-0.42015243, -0.07814525, -0.90408255}, {0.51545596, 0.3817169, -0.76720099}, {-0.38796691, 0.38271738, -0.65315839}}, {{-0.99500944, 0.0913478, -0.04014718}, {-0.3557814, 0.84358, -0.40223423}, {-0.58849102, 0.53029673, 0.0627648}}, {{-0.3557814, 0.84358, -0.40223423}, {-0.41468223, 0.65596241, 0.63067581}, {-0.58849102, 0.53029673, 0.0627648}}, {{-0.99500944, 0.0913478, -0.04014718}, {-0.58849102, 0.53029673, 0.0627648}, {-0.41468223, 0.65596241, 0.63067581}}}; -constexpr PJ_XYZ ico_20_centers[20] = {{0.6446662, 0.27407261, 0.37518719}, {0.17476898, 0.52317601, 0.57203007}, {-0.16999525, 0.11746359, 0.76731978}, {0.08682596, -0.38238388, 0.69117259}, {0.59031442, -0.28559418, 0.44882132}, {0.67643404, 0.37526316, -0.18190733}, {0.22617043, 0.68690576, -0.32936779}, {-0.08387563, 0.77832093, 0.13659114}, {-0.64171587, 0.12186443, 0.45257654}, {-0.67643404, -0.37526316, 0.18190733}, {-0.22617043, -0.68690576, 0.32936779}, {0.08387563, -0.77832093, -0.13659114}, {0.58849102, -0.53029673, -0.0627648}, {0.64171587, -0.12186443, -0.45257654}, {-0.59031442, 0.28559418, -0.44882132}, {-0.6446662, -0.27407261, -0.37518719}, {-0.17476898, -0.52317601, -0.57203007}, {0.16999525, -0.11746359, -0.76731978}, {-0.58849102, 0.53029673, 0.0627648}, {-0.08682596, 0.38238388, -0.69117259}}; -constexpr PJ_XYZ ico_2_centers[2] = {{-0.07609745, 0.53600476, -0.6075312}, {-0.09755446, 0.22876301, -0.77481398}}; -constexpr PJ_XYZ ico_3_centers[3] = {{-0.64642729, 0.48840818, -0.12653887}, {-0.45298488, 0.67661305, 0.09706879}, {-0.66606089, 0.42586898, 0.21776448}}; +// Define the centers for each face or subface constexpr PJ_XYZ ico_centers[23] = {{0.6446662, 0.27407261, 0.37518718999999995}, {0.1747689766666667, 0.5231760133333333, 0.5720300666666667}, {-0.16999525333333332, 0.11746358666666666, 0.7673197833333334}, {0.08682595666666666, -0.38238388333333334, 0.69117259}, {0.5903144233333334, -0.28559418333333336, 0.44882131999999997}, {0.6764340433333333, 0.37526316, -0.18190732333333334}, {0.22617043, 0.68690576, -0.3293677933333333}, {-0.08387563333333335, 0.77832093, 0.13659113999999997}, {-0.6417158766666667, 0.12186443666666665, 0.45257653999999997}, {-0.6764340433333333, -0.37526316, 0.18190732333333334}, {-0.22617043, -0.68690576, 0.3293677933333333}, {0.08387563333333335, -0.77832093, -0.13659113999999997}, {0.5884910233333334, -0.5302967366666668, -0.06276479999999997}, {0.6417158766666667, -0.12186443666666665, -0.45257653999999997}, {-0.5903144233333334, 0.28559418333333336, -0.44882131999999997}, {-0.6446662, -0.27407261, -0.37518718999999995}, {-0.1747689766666667, -0.5231760133333333, -0.5720300666666667}, {0.16999525333333332, -0.11746358666666668, -0.7673197833333334}, {-0.07609744999999997, 0.5360047600000001, -0.6075312033333334}, {-0.09755446, 0.22876301, -0.7748139766666666}, {-0.6464272866666667, 0.48840817666666664, -0.12653887}, {-0.45298488333333337, 0.6766130466666667, 0.0970687933333333}, {-0.6660608966666667, 0.42586898, 0.21776447666666665}}; +// Define the normals for each face and subface constexpr PJ_XYZ ico_normals[23] = {{0.8112534716456183, 0.3448953244235397, 0.4721387719026189}, {0.21993078167242514, 0.6583691769191125, 0.7198475381327677}, {-0.21392348218574597, 0.1478171768398566, 0.9656017947376752}, {0.10926252593733311, -0.48119515565604315, 0.8697775132750616}, {0.7428567271237952, -0.3593941714860216, 0.5648005953155497}, {0.8512303999921011, 0.4722343774266651, -0.22891373682183738}, {0.28461480749719364, 0.8644080979012073, -0.4144792535654255}, {-0.1055498134715015, 0.9794457311974099, 0.17188745304792394}, {-0.80754076069938, 0.15335524153301364, 0.5695261975567215}, {-0.8512303999921011, -0.4722343774266651, 0.22891373682183735}, {-0.28461480749719364, -0.8644080979012073, 0.4144792535654255}, {0.10554981347150154, -0.97944573119741, -0.17188745304792397}, {0.7405621455042509, -0.6673299596621295, -0.07898375518726185}, {0.80754076069938, -0.15335524153301364, -0.5695261975567215}, {-0.7428567271237952, 0.3593941714860216, -0.5648005953155497}, {-0.8112534716456183, -0.3448953244235397, -0.4721387719026189}, {-0.21993078167242514, -0.6583691769191125, -0.7198475381327677}, {0.21392348218574597, -0.1478171768398566, -0.9656017947376752}, {-0.1092625236946045, 0.48119515875463253, -0.8697775118425345}, {-0.10926252412771359, 0.4811951525529661, -0.8697775152191327}, {-0.7405621389792739, 0.6673299643797594, 0.07898377650727696}, {-0.7405621607654073, 0.6673299431834946, 0.07898375132383098}, {-0.7405621367680706, 0.6673299714231342, 0.07898373773067752}}; -constexpr double ico_dym_trans[23][2][4] = {{{3676785.549175448, -3835017.5266620647, -3516181.101897219, 13536571.968889877}, {597946.080039791, 4588467.120428165, -4379277.476119764, 23446030.430853583}}, {{6186178.005526091, -1393567.8850913076, -615475.9158875226, 9668979.99656166}, {597946.0790283178, 4588467.148836121, -4379277.446492919, 23446030.4022735}}, {{6193487.416382644, -412638.42193403625, 1435299.1565727487, 7735183.994711302}, {610606.2949588482, 6287486.763792622, -827230.771869741, 20096597.453907937}}, {{6320833.951539666, -6999.925417495968, -797903.6054442794, 9668979.964544488}, {390035.65785509185, 5584900.2162612835, 3040789.86561249, 16747164.583089648}}, {{1785817.7160921493, -3817376.067203325, -4777879.901545344, 15470367.97086971}, {3873198.4648612146, 4557911.12782605, -2193951.0189847522, 20096597.472239383}}, {{1653953.7567438218, -4829262.323420258, -3812125.829251187, 15470367.969285296}, {-2905701.3326818133, 2866384.6227320307, -4891868.725058803, 26795463.326497696}}, {{6107473.604777472, -1644266.325782215, 764719.3302896866, 9668979.973521523}, {-20484.65208776388, -2749071.5526177026, -5747332.168284684, 30144896.23069373}}, {{6325351.398413758, 599247.844237452, 469545.1345954169, 7735183.991104206}, {356890.77665911405, 1136808.9376555325, -6258588.903331836, 26795463.365920186}}, {{3707748.6155441254, 320266.3046413801, 5171041.531732354, 3867591.9864321505}, {610606.2818745336, 6287486.766371998, -827230.7619227654, 20096597.44051682}}, {{3343388.0482846545, -4896993.062013145, 2330419.6732539237, 3867591.9905542377}, {20484.69631605078, 2749071.5422549895, 5747332.173083752, 13397731.669298988}}, {{6107473.604777474, -1644266.3257822143, 764719.330289686, 7735183.984065069}, {20484.65208776346, 2749071.552617706, 5747332.168284684, 13397731.654138729}}, {{6325351.398413757, 599247.8442374519, 469545.1345954159, 9668979.966482382}, {-356890.77665911167, -1136808.9376555379, 6258588.903331836, 10048298.789365184}}, {{4266333.348411551, 4606685.482609389, 1080041.5914374113, 13536571.961679665}, {-356890.81480763154, -1136808.9649443403, 6258588.896199714, 10048298.78278621}}, {{3707748.6155441264, 320266.30464138015, 5171041.531732352, 13536571.97115444}, {-610606.2818745337, -6287486.766372, 827230.7619227694, 3349432.8639618154}}, {{2461379.4064226267, 5855954.858490806, 488922.63367311924, 1933796.0165698116}, {3483162.7410947136, -1026989.0860837825, -5234740.880461738, 30144896.24019003}}, {{1320556.279179943, -5891237.854051452, 2034474.9935921053, 1933796.0148528814}, {-3483162.72987335, 1026989.0418338334, 5234740.896609632, 10048298.759397767}}, {{6186178.005526091, -1393567.885091309, -615475.9158875229, 7735183.961024929}, {-597946.0790283154, -4588467.148836119, 4379277.446492919, 6698865.825718503}}, {{6193487.416382645, -412638.4219340361, 1435299.156572748, 9668979.962875288}, {-610606.2949588535, -6287486.763792623, 827230.7718697439, 3349432.877352944}}, {{3498197.81693495, 4833165.559061878, 2234449.5231911456, 3867591.983769496}, {5278984.96116607, -2798512.200701845, -2211399.7153384583, 33494329.158408284}}, {{6320833.983680945, -6999.984355479206, -797903.6271294819, 7735183.9823354}, {-390035.68446349393, -5584900.177255948, -3040789.814780467, 0.044359486997177525}}, {{4266333.41772867, 4606685.445409489, 1080041.6365273518, 3867592.0700864717}, {356890.72771489987, 1136809.053212709, -6258588.866576485, 26795463.265809294}}, {{4266333.204506115, 4606685.540218764, 1080041.5936954806, 3867591.897018196}, {356890.8007120557, 1136808.9497242568, -6258588.899768077, 26795463.365730304}}, {{1824090.1118675405, 1318837.3514699321, 5960117.7705610385, 1933795.9110601672}, {3873198.583330483, 4557911.083457602, -2193951.0468033054, 23446030.547617782}}}; + +/* + The points of the Airocean projection map are deduced from the unfolded net + of the altered icosahedron defined above. + The distances in the projected 2d space are expressed in meter. +*/ +// Define the 23 unfolded surfaces used (from icosahedron + split faces) constexpr pj_face airocean_faces[23] = {{{11602775.971724393, 20096597.491866, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {17404163.95758659, 23446030.407177, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {5801387.985862196, 23446030.407177, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {5801387.985862196, 16747164.576555002, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {5801387.985862196, 16747164.576555002, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {17404163.95758659, 23446030.407177, 1.0}, {17404163.95758659, 16747164.576555002, 1.0}}, {{17404163.95758659, 23446030.407177, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {17404163.95758659, 30144896.237799004, 1.0}}, {{11602775.971724393, 33494329.153110005, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {5801387.985862196, 30144896.237799004, 1.0}}, {{5801387.985862196, 30144896.237799004, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}, {{5801387.985862196, 16747164.576555002, 1.0}, {0.0, 20096597.491866, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}, {{5801387.985862196, 16747164.576555002, 1.0}, {5801387.985862196, 10048298.745933, 1.0}, {0.0, 13397731.661244001, 1.0}}, {{5801387.985862196, 16747164.576555002, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {5801387.985862196, 10048298.745933, 1.0}}, {{5801387.985862196, 10048298.745933, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}}, {{11602775.971724393, 6698865.830622001, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {17404163.95758659, 10048298.745933, 1.0}}, {{11602775.971724393, 0.0, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}, {17404163.95758659, 3349432.9153110003, 1.0}}, {{0.0, 33494329.153110005, 1.0}, {5801387.985862196, 30144896.237799004, 1.0}, {0.0, 26795463.322488002, 1.0}}, {{0.0, 6698865.830622001, 1.0}, {0.0, 13397731.661244001, 1.0}, {5801387.985862196, 10048298.745933, 1.0}}, {{5801387.985862196, 3349432.9153110003, 1.0}, {5801387.985862196, 10048298.745933, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}}, {{5801387.985862196, 3349432.9153110003, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}, {11602775.971724393, 0.0, 1.0}}, {{5801387.985862196, 30144896.237799004, 1.0}, {2900693.992931098, 31819612.695454504, 1.0}, {5801387.985862196, 36843762.068421006, 1.0}}, {{5801387.985862196, 3349432.9153110003, 1.0}, {11602775.971724393, 0.0, 1.0}, {5801387.985862196, 0.0, 1.0}}, {{0.0, 26795463.322488002, 1.0}, {5801387.985862196, 30144896.237799004, 1.0}, {3867591.9905747976, 26795463.322488002, 1.0}}, {{5801387.985862196, 30144896.237799004, 1.0}, {5801387.985862196, 23446030.407177, 1.0}, {3867591.9905747976, 26795463.322488002, 1.0}}, {{0.0, 20096597.491866, 1.0}, {1933795.9952873988, 23446030.407177, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}}; -constexpr PJ_XY airocean_22_centers[22] = {{13536571.967011793, 23446030.407177}, {9668979.976436995, 23446030.407177}, {7735183.981149595, 20096597.491866004}, {9668979.976436993, 16747164.576555}, {15470367.962299192, 20096597.491866004}, {15470367.962299192, 26795463.322488}, {9668979.976436993, 30144896.237799004}, {7735183.981149595, 26795463.322488}, {3867591.9905747976, 20096597.491866004}, {3867591.9905747976, 13397731.661244}, {7735183.981149595, 13397731.661244}, {9668979.976436995, 10048298.745933002}, {13536571.967011793, 10048298.745933}, {13536571.967011793, 3349432.915311}, {1933795.9952873988, 30144896.237799004}, {1933795.9952873988, 10048298.745933}, {7735183.981149595, 6698865.830622}, {9668979.976436995, 3349432.915311}, {3867591.9905747976, 26795463.322488}, {3867591.9905747976, 33494329.15311}, {7735183.981149595, 0.0}, {1933795.9952873988, 23446030.407177}}; -constexpr PJ_XY airocean_2_centers[2] = {{3867591.9905747976, 26795463.322488}, {3867591.9905747976, 33494329.15311}}; -constexpr PJ_XY airocean_centers[23] = {{13536571.967011793, 23446030.407177}, {9668979.976436995, 23446030.407177}, {7735183.981149595, 20096597.491866004}, {9668979.976436993, 16747164.576555}, {15470367.962299192, 20096597.491866004}, {15470367.962299192, 26795463.322488}, {9668979.976436993, 30144896.237799004}, {7735183.981149595, 26795463.322488}, {3867591.9905747976, 20096597.491866004}, {3867591.9905747976, 13397731.661244}, {7735183.981149595, 13397731.661244}, {9668979.976436995, 10048298.745933002}, {13536571.967011793, 10048298.745933}, {13536571.967011793, 3349432.915311}, {1933795.9952873988, 30144896.237799004}, {1933795.9952873988, 10048298.745933}, {7735183.981149595, 6698865.830622}, {9668979.976436995, 3349432.915311}, {4834489.9882184975, 32936090.333891507}, {7735183.981149595, 1116477.638437}, {3222993.3254789985, 27911940.960925}, {5156789.320766397, 26795463.322488}, {2578394.6603831984, 22329552.768740002}}; -constexpr double dym_ico_trans[23][3][3] = {{{9.058433279771384e-08, 1.4731493732699052e-08, -0.9269301899999991}, {-9.44826679987233e-08, 1.1304527499839262e-07, -1.0974189099999994}, {-8.662754779110161e-08, -1.0789150406568015e-07, 4.077454709999999}}, {{1.5240780519329358e-07, 1.473149373269901e-08, -1.6442540899999978}, {-3.4333093302050216e-08, 1.1304527499839258e-07, -1.7953209499999985}, {-1.51633738709386e-08, -1.0789150406568015e-07, 3.248271909999998}}, {{1.525878853745444e-07, 1.504340175606161e-08, -1.6526118100000007}, {-1.0166102516109274e-08, 1.5490373090569122e-07, -2.9169376700000003}, {3.536121881520939e-08, -2.0380342501548998e-08, 0.9033697899999995}}, {{1.557252983599121e-07, 9.609243061078464e-09, -1.5798064100000002}, {-1.7245441994882394e-10, 1.375942246501773e-07, -2.6850295500000003}, {-1.96578129712955e-08, 7.491541593592458e-08, -0.37337721000000035}}, {{4.399688326690425e-08, 9.54233233151121e-08, -2.0080176699999996}, {-9.404803666461074e-08, 1.122924714451482e-07, -1.0873330499999996}, {-1.1771180391040664e-07, -5.405199315156007e-08, 3.3561273899999997}}, {{4.074817450170371e-08, -7.158726449003567e-08, 1.9642587099999982}, {-1.1897770528054373e-07, 7.061862589298568e-08, 0.3236332400000001}, {-9.391868744648748e-08, -1.2052012839388902e-07, 4.500442009999996}}, {{1.5046877525297362e-07, -5.046779687011883e-10, -1.2134956799999999}, {-4.0509505754953036e-08, -6.772840231043597e-08, 3.120257019999999}, {1.8840259480379495e-08, -1.4159603341569342e-07, 3.7568638499999985}}, {{1.55836594139745e-07, 8.792657069014762e-09, -1.52490368}, {1.4763566099823772e-08, 2.800736643244269e-08, -0.08634832999999958}, {1.1568102351290336e-08, -1.5419177904390005e-07, 4.178749899999998}}, {{9.134716490113195e-08, 1.504340175606163e-08, -1.2973306300000003}, {7.890345398644546e-09, 1.5490373090569127e-07, -3.021690130000001}, {1.2739806091251417e-07, -2.0380342501549028e-08, 0.3694283599999999}}, {{8.237047688665845e-08, 5.04677968701152e-10, -1.0017709799999996}, {-1.2064637664394705e-07, 6.772840231043599e-08, -0.8160591599999997}, {5.741414913322641e-08, 1.4159603341569342e-07, -1.937212839999999}}, {{1.504687752529736e-07, 5.046779687011514e-10, -1.3968356299999996}, {-4.0509505754953036e-08, 6.772840231043597e-08, -1.2809642399999992}, {1.8840259480379524e-08, 1.415960334156934e-07, -1.713430739999999}}, {{1.55836594139745e-07, -8.792657069014724e-09, -1.3345540299999996}, {1.4763566099823759e-08, -2.8007366432442684e-08, -0.6396431699999997}, {1.1568102351290311e-08, 1.5419177904390013e-07, -1.7978079499999997}}, {{1.0510891988020954e-07, -8.792657069014762e-09, -0.7459721899999996}, {1.1349411668458604e-07, -2.8007366432442694e-08, -1.7851916299999993}, {2.6608799545245027e-08, 1.541917790439001e-07, -1.9723217899999996}}, {{9.134716490113195e-08, -1.5043401756061595e-08, -0.5444247299999998}, {7.890345398644617e-09, -1.5490373090569122e-07, 0.29016699000000007}, {1.2739806091251412e-07, 2.038034250154901e-08, -2.2453721499999992}}, {{6.064058047097081e-08, 8.58140802540336e-08, -3.294437479999999}, {1.4427215125754238e-07, -2.530175320502907e-08, 0.7693199999999997}, {1.2045502760769865e-08, -1.2896740908748457e-07, 3.4155942999999986}}, {{3.2534318590648264e-08, -8.581408025403363e-08, 0.15470457999999998}, {-1.4514141392576755e-07, 2.530175320502908e-08, -0.2476383}, {5.01230094778404e-08, 1.289674090874846e-07, -1.7680179200000001}}, {{1.524078051932937e-07, -1.4731493732699067e-08, -1.25498709}, {-3.433309330205022e-08, -1.1304527499839266e-07, 0.49967191}, {-1.5163373870938614e-08, 1.0789150406568026e-07, -1.17748929}}, {{1.5258788537454444e-07, -1.50434017560616e-08, -1.25498709}, {-1.016610251610931e-08, -1.5490373090569122e-07, 0.49967191}, {3.536121881520941e-08, 2.0380342501549018e-08, -1.17748929}}, {{8.618449605826386e-08, 1.3005744286105568e-07, -4.776339219999996}, {1.1907386502737676e-07, -6.894646223375916e-08, 2.2311702599999985}, {5.5049746849940485e-08, -5.4481873383947436e-08, 0.9207512499999986}}, {{1.5572529749804938e-07, -9.609244553868475e-09, -1.29138978}, {-1.7245528181154292e-10, -1.3759422614296728e-07, 0.38371785999999997}, {-1.9657812971295542e-08, -7.491541593592457e-08, -0.53911579}}, {{1.0510892074207234e-07, 8.792655576224747e-09, -1.2306127199999985}, {1.1349411496086066e-07, 2.8007369418022736e-08, -0.6591226399999993}, {2.6608799545244997e-08, -1.5419177904390008e-07, 4.091492979999998}}, {{1.0510891815648413e-07, 8.79265706901476e-09, -1.2306127500000001}, {1.1349412013203696e-07, 2.8007366432442717e-08, -0.6591225800000001}, {2.6608799545245066e-08, -1.5419177904390005e-07, 4.091492979999997}}, {{4.4939794689710465e-08, 9.54233248079021e-08, -2.9126935899999995}, {3.249196924242356e-08, 1.1229246845956814e-07, -2.1653487399999993}, {1.4683839747935709e-07, -5.405199315156002e-08, 1.0461139699999995}}}; + +/* + The parameters here are extracted from the transition matrices + that allow converting a icosahedron face or subface to its + corresponding face in the Airocean projected space. + Since only a few parameters of those matrices are relevant, + the irrelevant ones has been discarded. +*/ +// Icosahedron to Airocean (forward) +constexpr double ico_air_trans[23][2][4] = {{{3676785.549175448, -3835017.5266620647, -3516181.101897219, 13536571.968889877}, {597946.080039791, 4588467.120428165, -4379277.476119764, 23446030.430853583}}, {{6186178.005526091, -1393567.8850913076, -615475.9158875226, 9668979.99656166}, {597946.0790283178, 4588467.148836121, -4379277.446492919, 23446030.4022735}}, {{6193487.416382644, -412638.42193403625, 1435299.1565727487, 7735183.994711302}, {610606.2949588482, 6287486.763792622, -827230.771869741, 20096597.453907937}}, {{6320833.951539666, -6999.925417495968, -797903.6054442794, 9668979.964544488}, {390035.65785509185, 5584900.2162612835, 3040789.86561249, 16747164.583089648}}, {{1785817.7160921493, -3817376.067203325, -4777879.901545344, 15470367.97086971}, {3873198.4648612146, 4557911.12782605, -2193951.0189847522, 20096597.472239383}}, {{1653953.7567438218, -4829262.323420258, -3812125.829251187, 15470367.969285296}, {-2905701.3326818133, 2866384.6227320307, -4891868.725058803, 26795463.326497696}}, {{6107473.604777472, -1644266.325782215, 764719.3302896866, 9668979.973521523}, {-20484.65208776388, -2749071.5526177026, -5747332.168284684, 30144896.23069373}}, {{6325351.398413758, 599247.844237452, 469545.1345954169, 7735183.991104206}, {356890.77665911405, 1136808.9376555325, -6258588.903331836, 26795463.365920186}}, {{3707748.6155441254, 320266.3046413801, 5171041.531732354, 3867591.9864321505}, {610606.2818745336, 6287486.766371998, -827230.7619227654, 20096597.44051682}}, {{3343388.0482846545, -4896993.062013145, 2330419.6732539237, 3867591.9905542377}, {20484.69631605078, 2749071.5422549895, 5747332.173083752, 13397731.669298988}}, {{6107473.604777474, -1644266.3257822143, 764719.330289686, 7735183.984065069}, {20484.65208776346, 2749071.552617706, 5747332.168284684, 13397731.654138729}}, {{6325351.398413757, 599247.8442374519, 469545.1345954159, 9668979.966482382}, {-356890.77665911167, -1136808.9376555379, 6258588.903331836, 10048298.789365184}}, {{4266333.348411551, 4606685.482609389, 1080041.5914374113, 13536571.961679665}, {-356890.81480763154, -1136808.9649443403, 6258588.896199714, 10048298.78278621}}, {{3707748.6155441264, 320266.30464138015, 5171041.531732352, 13536571.97115444}, {-610606.2818745337, -6287486.766372, 827230.7619227694, 3349432.8639618154}}, {{2461379.4064226267, 5855954.858490806, 488922.63367311924, 1933796.0165698116}, {3483162.7410947136, -1026989.0860837825, -5234740.880461738, 30144896.24019003}}, {{1320556.279179943, -5891237.854051452, 2034474.9935921053, 1933796.0148528814}, {-3483162.72987335, 1026989.0418338334, 5234740.896609632, 10048298.759397767}}, {{6186178.005526091, -1393567.885091309, -615475.9158875229, 7735183.961024929}, {-597946.0790283154, -4588467.148836119, 4379277.446492919, 6698865.825718503}}, {{6193487.416382645, -412638.4219340361, 1435299.156572748, 9668979.962875288}, {-610606.2949588535, -6287486.763792623, 827230.7718697439, 3349432.877352944}}, {{3498197.81693495, 4833165.559061878, 2234449.5231911456, 3867591.983769496}, {5278984.96116607, -2798512.200701845, -2211399.7153384583, 33494329.158408284}}, {{6320833.983680945, -6999.984355479206, -797903.6271294819, 7735183.9823354}, {-390035.68446349393, -5584900.177255948, -3040789.814780467, 0.044359486997177525}}, {{4266333.41772867, 4606685.445409489, 1080041.6365273518, 3867592.0700864717}, {356890.72771489987, 1136809.053212709, -6258588.866576485, 26795463.265809294}}, {{4266333.204506115, 4606685.540218764, 1080041.5936954806, 3867591.897018196}, {356890.8007120557, 1136808.9497242568, -6258588.899768077, 26795463.365730304}}, {{1824090.1118675405, 1318837.3514699321, 5960117.7705610385, 1933795.9110601672}, {3873198.583330483, 4557911.083457602, -2193951.0468033054, 23446030.547617782}}}; +// Airocean to Icosahedron (inverse) +constexpr double air_ico_trans[23][3][3] = {{{9.058433279771384e-08, 1.4731493732699052e-08, -0.9269301899999991}, {-9.44826679987233e-08, 1.1304527499839262e-07, -1.0974189099999994}, {-8.662754779110161e-08, -1.0789150406568015e-07, 4.077454709999999}}, {{1.5240780519329358e-07, 1.473149373269901e-08, -1.6442540899999978}, {-3.4333093302050216e-08, 1.1304527499839258e-07, -1.7953209499999985}, {-1.51633738709386e-08, -1.0789150406568015e-07, 3.248271909999998}}, {{1.525878853745444e-07, 1.504340175606161e-08, -1.6526118100000007}, {-1.0166102516109274e-08, 1.5490373090569122e-07, -2.9169376700000003}, {3.536121881520939e-08, -2.0380342501548998e-08, 0.9033697899999995}}, {{1.557252983599121e-07, 9.609243061078464e-09, -1.5798064100000002}, {-1.7245441994882394e-10, 1.375942246501773e-07, -2.6850295500000003}, {-1.96578129712955e-08, 7.491541593592458e-08, -0.37337721000000035}}, {{4.399688326690425e-08, 9.54233233151121e-08, -2.0080176699999996}, {-9.404803666461074e-08, 1.122924714451482e-07, -1.0873330499999996}, {-1.1771180391040664e-07, -5.405199315156007e-08, 3.3561273899999997}}, {{4.074817450170371e-08, -7.158726449003567e-08, 1.9642587099999982}, {-1.1897770528054373e-07, 7.061862589298568e-08, 0.3236332400000001}, {-9.391868744648748e-08, -1.2052012839388902e-07, 4.500442009999996}}, {{1.5046877525297362e-07, -5.046779687011883e-10, -1.2134956799999999}, {-4.0509505754953036e-08, -6.772840231043597e-08, 3.120257019999999}, {1.8840259480379495e-08, -1.4159603341569342e-07, 3.7568638499999985}}, {{1.55836594139745e-07, 8.792657069014762e-09, -1.52490368}, {1.4763566099823772e-08, 2.800736643244269e-08, -0.08634832999999958}, {1.1568102351290336e-08, -1.5419177904390005e-07, 4.178749899999998}}, {{9.134716490113195e-08, 1.504340175606163e-08, -1.2973306300000003}, {7.890345398644546e-09, 1.5490373090569127e-07, -3.021690130000001}, {1.2739806091251417e-07, -2.0380342501549028e-08, 0.3694283599999999}}, {{8.237047688665845e-08, 5.04677968701152e-10, -1.0017709799999996}, {-1.2064637664394705e-07, 6.772840231043599e-08, -0.8160591599999997}, {5.741414913322641e-08, 1.4159603341569342e-07, -1.937212839999999}}, {{1.504687752529736e-07, 5.046779687011514e-10, -1.3968356299999996}, {-4.0509505754953036e-08, 6.772840231043597e-08, -1.2809642399999992}, {1.8840259480379524e-08, 1.415960334156934e-07, -1.713430739999999}}, {{1.55836594139745e-07, -8.792657069014724e-09, -1.3345540299999996}, {1.4763566099823759e-08, -2.8007366432442684e-08, -0.6396431699999997}, {1.1568102351290311e-08, 1.5419177904390013e-07, -1.7978079499999997}}, {{1.0510891988020954e-07, -8.792657069014762e-09, -0.7459721899999996}, {1.1349411668458604e-07, -2.8007366432442694e-08, -1.7851916299999993}, {2.6608799545245027e-08, 1.541917790439001e-07, -1.9723217899999996}}, {{9.134716490113195e-08, -1.5043401756061595e-08, -0.5444247299999998}, {7.890345398644617e-09, -1.5490373090569122e-07, 0.29016699000000007}, {1.2739806091251412e-07, 2.038034250154901e-08, -2.2453721499999992}}, {{6.064058047097081e-08, 8.58140802540336e-08, -3.294437479999999}, {1.4427215125754238e-07, -2.530175320502907e-08, 0.7693199999999997}, {1.2045502760769865e-08, -1.2896740908748457e-07, 3.4155942999999986}}, {{3.2534318590648264e-08, -8.581408025403363e-08, 0.15470457999999998}, {-1.4514141392576755e-07, 2.530175320502908e-08, -0.2476383}, {5.01230094778404e-08, 1.289674090874846e-07, -1.7680179200000001}}, {{1.524078051932937e-07, -1.4731493732699067e-08, -1.25498709}, {-3.433309330205022e-08, -1.1304527499839266e-07, 0.49967191}, {-1.5163373870938614e-08, 1.0789150406568026e-07, -1.17748929}}, {{1.5258788537454444e-07, -1.50434017560616e-08, -1.25498709}, {-1.016610251610931e-08, -1.5490373090569122e-07, 0.49967191}, {3.536121881520941e-08, 2.0380342501549018e-08, -1.17748929}}, {{8.618449605826386e-08, 1.3005744286105568e-07, -4.776339219999996}, {1.1907386502737676e-07, -6.894646223375916e-08, 2.2311702599999985}, {5.5049746849940485e-08, -5.4481873383947436e-08, 0.9207512499999986}}, {{1.5572529749804938e-07, -9.609244553868475e-09, -1.29138978}, {-1.7245528181154292e-10, -1.3759422614296728e-07, 0.38371785999999997}, {-1.9657812971295542e-08, -7.491541593592457e-08, -0.53911579}}, {{1.0510892074207234e-07, 8.792655576224747e-09, -1.2306127199999985}, {1.1349411496086066e-07, 2.8007369418022736e-08, -0.6591226399999993}, {2.6608799545244997e-08, -1.5419177904390008e-07, 4.091492979999998}}, {{1.0510891815648413e-07, 8.79265706901476e-09, -1.2306127500000001}, {1.1349412013203696e-07, 2.8007366432442717e-08, -0.6591225800000001}, {2.6608799545245066e-08, -1.5419177904390005e-07, 4.091492979999997}}, {{4.4939794689710465e-08, 9.54233248079021e-08, -2.9126935899999995}, {3.249196924242356e-08, 1.1229246845956814e-07, -2.1653487399999993}, {1.4683839747935709e-07, -5.405199315156002e-08, 1.0461139699999995}}}; inline double det(const PJ_XYZ *u, const PJ_XYZ *v, const PJ_XYZ *w) { @@ -77,28 +102,28 @@ inline unsigned char get_dym_face_index(const PJ_XY *p) { inline PJ_XY ico_to_dym(const PJ_XYZ * p, unsigned char face_id) { return PJ_XY{ - ico_dym_trans[face_id][0][0] * p->x + - ico_dym_trans[face_id][0][1] * p->y + - ico_dym_trans[face_id][0][2] * p->z + - ico_dym_trans[face_id][0][3], - ico_dym_trans[face_id][1][0] * p->x + - ico_dym_trans[face_id][1][1] * p->y + - ico_dym_trans[face_id][1][2] * p->z + - ico_dym_trans[face_id][1][3], + ico_air_trans[face_id][0][0] * p->x + + ico_air_trans[face_id][0][1] * p->y + + ico_air_trans[face_id][0][2] * p->z + + ico_air_trans[face_id][0][3], + ico_air_trans[face_id][1][0] * p->x + + ico_air_trans[face_id][1][1] * p->y + + ico_air_trans[face_id][1][2] * p->z + + ico_air_trans[face_id][1][3], }; } inline PJ_XYZ dym_to_ico(const PJ_XY * p, unsigned char face_id) { return PJ_XYZ{ - dym_ico_trans[face_id][0][0] * p->x + - dym_ico_trans[face_id][0][1] * p->y + - dym_ico_trans[face_id][0][2], - dym_ico_trans[face_id][1][0] * p->x + - dym_ico_trans[face_id][1][1] * p->y + - dym_ico_trans[face_id][1][2], - dym_ico_trans[face_id][2][0] * p->x + - dym_ico_trans[face_id][2][1] * p->y + - dym_ico_trans[face_id][2][2], + air_ico_trans[face_id][0][0] * p->x + + air_ico_trans[face_id][0][1] * p->y + + air_ico_trans[face_id][0][2], + air_ico_trans[face_id][1][0] * p->x + + air_ico_trans[face_id][1][1] * p->y + + air_ico_trans[face_id][1][2], + air_ico_trans[face_id][2][0] * p->x + + air_ico_trans[face_id][2][1] * p->y + + air_ico_trans[face_id][2][2], }; } @@ -184,7 +209,7 @@ static PJ_LP airocean_inverse(PJ_XY xy, PJ *P) { PJ_XYZ sphereCoords = dym_to_ico(&xy, face_id); - double norm = sqrtl((sphereCoords.x * sphereCoords.x) + (sphereCoords.y * sphereCoords.y) + (sphereCoords.z * sphereCoords.z)); + double norm = sqrt((sphereCoords.x * sphereCoords.x) + (sphereCoords.y * sphereCoords.y) + (sphereCoords.z * sphereCoords.z)); double q = sphereCoords.x / norm; double r = sphereCoords.y / norm; double s = sphereCoords.z / norm; From 2839e8891d739f2dc903f4f2e5326e8b65f04293 Mon Sep 17 00:00:00 2001 From: Pierre Louvart Date: Fri, 1 Nov 2024 15:37:59 +0100 Subject: [PATCH 10/23] - Remove reference to Dymaxion Fuller. Fix typo. --- docs/source/operations/projections/airocean.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/operations/projections/airocean.rst b/docs/source/operations/projections/airocean.rst index 20c3e9682d..5daeb7b8a8 100644 --- a/docs/source/operations/projections/airocean.rst +++ b/docs/source/operations/projections/airocean.rst @@ -4,12 +4,12 @@ Airocean ******************************************************************************** -The Airocean map projection is based on the Dymaxion Fuller projection, which is a icosahedron polyhedral projection that intends +The Airocean map projection is a icosahedron polyhedral projection that intends to lay down continental landmasses into a contiguous map with minimal scale and angular distorsion while preserving land surfaces from (most) interruptions. In comparison to the Snyder's Icosahedral Equal Area, this projection relies on a specific way to orient and cut the icosahedron so that most interruptions lie within the ocean. The projection -was first invented by Buckminster Fuller in 1943 using a cubostahedron as basis. +was first invented by Buckminster Fuller in 1943 using a cuboctahedron as basis. The idea to use an icosahedron came later in 1954, and it wasn't until 1978 that the projection was formally mathematically defined :cite:`Gray1995`. From b0b4e2f9a87b3f9bdda8113cd4dd8c836c1f2658 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 1 Nov 2024 17:06:49 +0100 Subject: [PATCH 11/23] Update src/projections/airocean.cpp --- src/projections/airocean.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/projections/airocean.cpp b/src/projections/airocean.cpp index defddf793d..be825ee70f 100644 --- a/src/projections/airocean.cpp +++ b/src/projections/airocean.cpp @@ -131,6 +131,7 @@ inline PJ_XYZ cartesian_to_ico(const PJ_XYZ *p, unsigned char face_id) { const PJ_XYZ * center = &ico_centers[face_id]; const PJ_XYZ * normal = &ico_normals[face_id]; + // cppcheck-suppress unreadVariable double a = 1.0 - ( center->x * normal->x + center->y * normal->y + From cfc8cded1a0978ee7de0d72be5ee3bf978b16480 Mon Sep 17 00:00:00 2001 From: Pierre Louvart Date: Fri, 1 Nov 2024 21:16:34 +0100 Subject: [PATCH 12/23] - Fix spelling errors. Add legitimate words to spelling wordlist. --- docs/source/operations/projections/airocean.rst | 6 +++--- docs/source/spelling_wordlist.txt | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/source/operations/projections/airocean.rst b/docs/source/operations/projections/airocean.rst index 5daeb7b8a8..1803680c51 100644 --- a/docs/source/operations/projections/airocean.rst +++ b/docs/source/operations/projections/airocean.rst @@ -6,7 +6,7 @@ Airocean The Airocean map projection is a icosahedron polyhedral projection that intends to lay down continental landmasses into a contiguous map with minimal scale and angular -distorsion while preserving land surfaces from (most) interruptions. +distortion while preserving land surfaces from (most) interruptions. In comparison to the Snyder's Icosahedral Equal Area, this projection relies on a specific way to orient and cut the icosahedron so that most interruptions lie within the ocean. The projection was first invented by Buckminster Fuller in 1943 using a cuboctahedron as basis. @@ -38,9 +38,9 @@ was formally mathematically defined :cite:`Gray1995`. proj-string: ``+proj=airocean`` .. note:: - The airocean map of the whole globe has an extent of approximatelly + The airocean map of the whole globe has an extent of approximately :math:`[0, 0, 17404000, 36844000]` in meters. Although the airocean map has no - true up or down, the choice was made to lay it out vertically, from Antartica to Australia. + true up or down, the choice was made to lay it out vertically, from Antarctica to Australia. Parameters diff --git a/docs/source/spelling_wordlist.txt b/docs/source/spelling_wordlist.txt index da7cfb7bf9..d759ed017c 100644 --- a/docs/source/spelling_wordlist.txt +++ b/docs/source/spelling_wordlist.txt @@ -4,6 +4,8 @@ adams advertized aea aeqd +airocean +Airocean affine Affine Agri @@ -105,6 +107,7 @@ Boucher boundcrs boundCRS Bregler +Buckminster brussels cadastral cadastre @@ -210,6 +213,7 @@ ctable CTable CTest ctx +cuboctahedron cURL customizability customizations From 03220f5f7e038a698f9d40e8e70783da188af083 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 1 Nov 2024 22:16:42 +0100 Subject: [PATCH 13/23] Update src/projections/airocean.cpp --- src/projections/airocean.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/projections/airocean.cpp b/src/projections/airocean.cpp index be825ee70f..da62bb43bc 100644 --- a/src/projections/airocean.cpp +++ b/src/projections/airocean.cpp @@ -202,6 +202,7 @@ static PJ_LP airocean_inverse(PJ_XY xy, PJ *P) { if (face_id == 23) { // Point lies outside icosahedron net faces + proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); lp.lam = HUGE_VAL; lp.phi = HUGE_VAL; return lp; From 93d8ccca572f80e9d11b1de8eb69055d84833c62 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sat, 2 Nov 2024 01:47:16 +0100 Subject: [PATCH 14/23] Update docs/source/operations/projections/airocean.rst --- docs/source/operations/projections/airocean.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/source/operations/projections/airocean.rst b/docs/source/operations/projections/airocean.rst index 1803680c51..605cafdc8f 100644 --- a/docs/source/operations/projections/airocean.rst +++ b/docs/source/operations/projections/airocean.rst @@ -4,6 +4,8 @@ Airocean ******************************************************************************** +.. versionadded:: 9.6.0 + The Airocean map projection is a icosahedron polyhedral projection that intends to lay down continental landmasses into a contiguous map with minimal scale and angular distortion while preserving land surfaces from (most) interruptions. From dea24179c449bfba58b6eeb052c29f7841a2c962 Mon Sep 17 00:00:00 2001 From: Pierre Louvart Date: Tue, 5 Nov 2024 19:58:21 +0100 Subject: [PATCH 15/23] - Add a test point that triggers an out of bounds error --- test/gie/builtins.gie | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/gie/builtins.gie b/test/gie/builtins.gie index d69239aee0..860634122d 100644 --- a/test/gie/builtins.gie +++ b/test/gie/builtins.gie @@ -1266,7 +1266,8 @@ accept 5200000 26800000 expect 123.33794956763194 6.861286881197438 accept 2600000 22300000 expect 147.63769509437498 15.818879769693432 - +accept 0 0 +expect failure =============================================================================== # Eckert I From 55aa072b8ef13f7c8b7bcd997ce779f040f3dabe Mon Sep 17 00:00:00 2001 From: Pierre Louvart Date: Sun, 10 Nov 2024 15:39:18 +0100 Subject: [PATCH 16/23] - Add support for chosing between vertical and horizontal orientation. --- src/projections/airocean.cpp | 161 ++++++++++++++++++++++++++--------- 1 file changed, 122 insertions(+), 39 deletions(-) diff --git a/src/projections/airocean.cpp b/src/projections/airocean.cpp index da62bb43bc..ff749b0e09 100644 --- a/src/projections/airocean.cpp +++ b/src/projections/airocean.cpp @@ -21,7 +21,8 @@ namespace { // anonymous namespace const PJ_XYZ p2; const PJ_XYZ p3; }; -} // anonymous namespace +} + /* @@ -35,11 +36,11 @@ namespace { // anonymous namespace some faces are split in two (Australia) and 3 (Japan) subfaces. */ // Define the 23 faces and subfaces -constexpr pj_face ico_faces[23] = {{{0.42015243, 0.07814525, 0.90408255}, {0.51883673, 0.83542038, 0.18133184}, {0.99500944, -0.0913478, 0.04014718}}, {{0.42015243, 0.07814525, 0.90408255}, {-0.41468223, 0.65596241, 0.63067581}, {0.51883673, 0.83542038, 0.18133184}}, {{0.42015243, 0.07814525, 0.90408255}, {-0.51545596, -0.3817169, 0.76720099}, {-0.41468223, 0.65596241, 0.63067581}}, {{0.42015243, 0.07814525, 0.90408255}, {0.3557814, -0.84358, 0.40223423}, {-0.51545596, -0.3817169, 0.76720099}}, {{0.42015243, 0.07814525, 0.90408255}, {0.99500944, -0.0913478, 0.04014718}, {0.3557814, -0.84358, 0.40223423}}, {{0.99500944, -0.0913478, 0.04014718}, {0.51883673, 0.83542038, 0.18133184}, {0.51545596, 0.3817169, -0.76720099}}, {{0.51545596, 0.3817169, -0.76720099}, {0.51883673, 0.83542038, 0.18133184}, {-0.3557814, 0.84358, -0.40223423}}, {{-0.3557814, 0.84358, -0.40223423}, {0.51883673, 0.83542038, 0.18133184}, {-0.41468223, 0.65596241, 0.63067581}}, {{-0.51545596, -0.3817169, 0.76720099}, {-0.99500944, 0.0913478, -0.04014718}, {-0.41468223, 0.65596241, 0.63067581}}, {{-0.51545596, -0.3817169, 0.76720099}, {-0.51883673, -0.83542038, -0.18133184}, {-0.99500944, 0.0913478, -0.04014718}}, {{-0.51545596, -0.3817169, 0.76720099}, {0.3557814, -0.84358, 0.40223423}, {-0.51883673, -0.83542038, -0.18133184}}, {{-0.51883673, -0.83542038, -0.18133184}, {0.3557814, -0.84358, 0.40223423}, {0.41468223, -0.65596241, -0.63067581}}, {{0.41468223, -0.65596241, -0.63067581}, {0.3557814, -0.84358, 0.40223423}, {0.99500944, -0.0913478, 0.04014718}}, {{0.51545596, 0.3817169, -0.76720099}, {0.41468223, -0.65596241, -0.63067581}, {0.99500944, -0.0913478, 0.04014718}}, {{-0.42015243, -0.07814525, -0.90408255}, {-0.3557814, 0.84358, -0.40223423}, {-0.99500944, 0.0913478, -0.04014718}}, {{-0.42015243, -0.07814525, -0.90408255}, {-0.99500944, 0.0913478, -0.04014718}, {-0.51883673, -0.83542038, -0.18133184}}, {{-0.42015243, -0.07814525, -0.90408255}, {-0.51883673, -0.83542038, -0.18133184}, {0.41468223, -0.65596241, -0.63067581}}, {{-0.42015243, -0.07814525, -0.90408255}, {0.41468223, -0.65596241, -0.63067581}, {0.51545596, 0.3817169, -0.76720099}}, {{-0.3557814, 0.84358, -0.40223423}, {-0.38796691, 0.38271738, -0.65315839}, {0.51545596, 0.3817169, -0.76720099}}, {{-0.42015243, -0.07814525, -0.90408255}, {0.51545596, 0.3817169, -0.76720099}, {-0.38796691, 0.38271738, -0.65315839}}, {{-0.99500944, 0.0913478, -0.04014718}, {-0.3557814, 0.84358, -0.40223423}, {-0.58849102, 0.53029673, 0.0627648}}, {{-0.3557814, 0.84358, -0.40223423}, {-0.41468223, 0.65596241, 0.63067581}, {-0.58849102, 0.53029673, 0.0627648}}, {{-0.99500944, 0.0913478, -0.04014718}, {-0.58849102, 0.53029673, 0.0627648}, {-0.41468223, 0.65596241, 0.63067581}}}; +constexpr pj_face base_ico_faces[23] = {{{0.42015243, 0.07814525, 0.90408255}, {0.51883673, 0.83542038, 0.18133184}, {0.99500944, -0.0913478, 0.04014718}}, {{0.42015243, 0.07814525, 0.90408255}, {-0.41468223, 0.65596241, 0.63067581}, {0.51883673, 0.83542038, 0.18133184}}, {{0.42015243, 0.07814525, 0.90408255}, {-0.51545596, -0.3817169, 0.76720099}, {-0.41468223, 0.65596241, 0.63067581}}, {{0.42015243, 0.07814525, 0.90408255}, {0.3557814, -0.84358, 0.40223423}, {-0.51545596, -0.3817169, 0.76720099}}, {{0.42015243, 0.07814525, 0.90408255}, {0.99500944, -0.0913478, 0.04014718}, {0.3557814, -0.84358, 0.40223423}}, {{0.99500944, -0.0913478, 0.04014718}, {0.51883673, 0.83542038, 0.18133184}, {0.51545596, 0.3817169, -0.76720099}}, {{0.51545596, 0.3817169, -0.76720099}, {0.51883673, 0.83542038, 0.18133184}, {-0.3557814, 0.84358, -0.40223423}}, {{-0.3557814, 0.84358, -0.40223423}, {0.51883673, 0.83542038, 0.18133184}, {-0.41468223, 0.65596241, 0.63067581}}, {{-0.51545596, -0.3817169, 0.76720099}, {-0.99500944, 0.0913478, -0.04014718}, {-0.41468223, 0.65596241, 0.63067581}}, {{-0.51545596, -0.3817169, 0.76720099}, {-0.51883673, -0.83542038, -0.18133184}, {-0.99500944, 0.0913478, -0.04014718}}, {{-0.51545596, -0.3817169, 0.76720099}, {0.3557814, -0.84358, 0.40223423}, {-0.51883673, -0.83542038, -0.18133184}}, {{-0.51883673, -0.83542038, -0.18133184}, {0.3557814, -0.84358, 0.40223423}, {0.41468223, -0.65596241, -0.63067581}}, {{0.41468223, -0.65596241, -0.63067581}, {0.3557814, -0.84358, 0.40223423}, {0.99500944, -0.0913478, 0.04014718}}, {{0.51545596, 0.3817169, -0.76720099}, {0.41468223, -0.65596241, -0.63067581}, {0.99500944, -0.0913478, 0.04014718}}, {{-0.42015243, -0.07814525, -0.90408255}, {-0.3557814, 0.84358, -0.40223423}, {-0.99500944, 0.0913478, -0.04014718}}, {{-0.42015243, -0.07814525, -0.90408255}, {-0.99500944, 0.0913478, -0.04014718}, {-0.51883673, -0.83542038, -0.18133184}}, {{-0.42015243, -0.07814525, -0.90408255}, {-0.51883673, -0.83542038, -0.18133184}, {0.41468223, -0.65596241, -0.63067581}}, {{-0.42015243, -0.07814525, -0.90408255}, {0.41468223, -0.65596241, -0.63067581}, {0.51545596, 0.3817169, -0.76720099}}, {{-0.3557814, 0.84358, -0.40223423}, {-0.38796691, 0.38271738, -0.65315839}, {0.51545596, 0.3817169, -0.76720099}}, {{-0.42015243, -0.07814525, -0.90408255}, {0.51545596, 0.3817169, -0.76720099}, {-0.38796691, 0.38271738, -0.65315839}}, {{-0.99500944, 0.0913478, -0.04014718}, {-0.3557814, 0.84358, -0.40223423}, {-0.58849102, 0.53029673, 0.0627648}}, {{-0.3557814, 0.84358, -0.40223423}, {-0.41468223, 0.65596241, 0.63067581}, {-0.58849102, 0.53029673, 0.0627648}}, {{-0.99500944, 0.0913478, -0.04014718}, {-0.58849102, 0.53029673, 0.0627648}, {-0.41468223, 0.65596241, 0.63067581}}}; // Define the centers for each face or subface -constexpr PJ_XYZ ico_centers[23] = {{0.6446662, 0.27407261, 0.37518718999999995}, {0.1747689766666667, 0.5231760133333333, 0.5720300666666667}, {-0.16999525333333332, 0.11746358666666666, 0.7673197833333334}, {0.08682595666666666, -0.38238388333333334, 0.69117259}, {0.5903144233333334, -0.28559418333333336, 0.44882131999999997}, {0.6764340433333333, 0.37526316, -0.18190732333333334}, {0.22617043, 0.68690576, -0.3293677933333333}, {-0.08387563333333335, 0.77832093, 0.13659113999999997}, {-0.6417158766666667, 0.12186443666666665, 0.45257653999999997}, {-0.6764340433333333, -0.37526316, 0.18190732333333334}, {-0.22617043, -0.68690576, 0.3293677933333333}, {0.08387563333333335, -0.77832093, -0.13659113999999997}, {0.5884910233333334, -0.5302967366666668, -0.06276479999999997}, {0.6417158766666667, -0.12186443666666665, -0.45257653999999997}, {-0.5903144233333334, 0.28559418333333336, -0.44882131999999997}, {-0.6446662, -0.27407261, -0.37518718999999995}, {-0.1747689766666667, -0.5231760133333333, -0.5720300666666667}, {0.16999525333333332, -0.11746358666666668, -0.7673197833333334}, {-0.07609744999999997, 0.5360047600000001, -0.6075312033333334}, {-0.09755446, 0.22876301, -0.7748139766666666}, {-0.6464272866666667, 0.48840817666666664, -0.12653887}, {-0.45298488333333337, 0.6766130466666667, 0.0970687933333333}, {-0.6660608966666667, 0.42586898, 0.21776447666666665}}; +constexpr PJ_XYZ base_ico_centers[23] = {{0.6446662, 0.27407261, 0.37518718999999995}, {0.1747689766666667, 0.5231760133333333, 0.5720300666666667}, {-0.16999525333333332, 0.11746358666666666, 0.7673197833333334}, {0.08682595666666666, -0.38238388333333334, 0.69117259}, {0.5903144233333334, -0.28559418333333336, 0.44882131999999997}, {0.6764340433333333, 0.37526316, -0.18190732333333334}, {0.22617043, 0.68690576, -0.3293677933333333}, {-0.08387563333333335, 0.77832093, 0.13659113999999997}, {-0.6417158766666667, 0.12186443666666665, 0.45257653999999997}, {-0.6764340433333333, -0.37526316, 0.18190732333333334}, {-0.22617043, -0.68690576, 0.3293677933333333}, {0.08387563333333335, -0.77832093, -0.13659113999999997}, {0.5884910233333334, -0.5302967366666668, -0.06276479999999997}, {0.6417158766666667, -0.12186443666666665, -0.45257653999999997}, {-0.5903144233333334, 0.28559418333333336, -0.44882131999999997}, {-0.6446662, -0.27407261, -0.37518718999999995}, {-0.1747689766666667, -0.5231760133333333, -0.5720300666666667}, {0.16999525333333332, -0.11746358666666668, -0.7673197833333334}, {-0.07609744999999997, 0.5360047600000001, -0.6075312033333334}, {-0.09755446, 0.22876301, -0.7748139766666666}, {-0.6464272866666667, 0.48840817666666664, -0.12653887}, {-0.45298488333333337, 0.6766130466666667, 0.0970687933333333}, {-0.6660608966666667, 0.42586898, 0.21776447666666665}}; // Define the normals for each face and subface -constexpr PJ_XYZ ico_normals[23] = {{0.8112534716456183, 0.3448953244235397, 0.4721387719026189}, {0.21993078167242514, 0.6583691769191125, 0.7198475381327677}, {-0.21392348218574597, 0.1478171768398566, 0.9656017947376752}, {0.10926252593733311, -0.48119515565604315, 0.8697775132750616}, {0.7428567271237952, -0.3593941714860216, 0.5648005953155497}, {0.8512303999921011, 0.4722343774266651, -0.22891373682183738}, {0.28461480749719364, 0.8644080979012073, -0.4144792535654255}, {-0.1055498134715015, 0.9794457311974099, 0.17188745304792394}, {-0.80754076069938, 0.15335524153301364, 0.5695261975567215}, {-0.8512303999921011, -0.4722343774266651, 0.22891373682183735}, {-0.28461480749719364, -0.8644080979012073, 0.4144792535654255}, {0.10554981347150154, -0.97944573119741, -0.17188745304792397}, {0.7405621455042509, -0.6673299596621295, -0.07898375518726185}, {0.80754076069938, -0.15335524153301364, -0.5695261975567215}, {-0.7428567271237952, 0.3593941714860216, -0.5648005953155497}, {-0.8112534716456183, -0.3448953244235397, -0.4721387719026189}, {-0.21993078167242514, -0.6583691769191125, -0.7198475381327677}, {0.21392348218574597, -0.1478171768398566, -0.9656017947376752}, {-0.1092625236946045, 0.48119515875463253, -0.8697775118425345}, {-0.10926252412771359, 0.4811951525529661, -0.8697775152191327}, {-0.7405621389792739, 0.6673299643797594, 0.07898377650727696}, {-0.7405621607654073, 0.6673299431834946, 0.07898375132383098}, {-0.7405621367680706, 0.6673299714231342, 0.07898373773067752}}; +constexpr PJ_XYZ base_ico_normals[23] = {{0.8112534716456183, 0.3448953244235397, 0.4721387719026189}, {0.21993078167242514, 0.6583691769191125, 0.7198475381327677}, {-0.21392348218574597, 0.1478171768398566, 0.9656017947376752}, {0.10926252593733311, -0.48119515565604315, 0.8697775132750616}, {0.7428567271237952, -0.3593941714860216, 0.5648005953155497}, {0.8512303999921011, 0.4722343774266651, -0.22891373682183738}, {0.28461480749719364, 0.8644080979012073, -0.4144792535654255}, {-0.1055498134715015, 0.9794457311974099, 0.17188745304792394}, {-0.80754076069938, 0.15335524153301364, 0.5695261975567215}, {-0.8512303999921011, -0.4722343774266651, 0.22891373682183735}, {-0.28461480749719364, -0.8644080979012073, 0.4144792535654255}, {0.10554981347150154, -0.97944573119741, -0.17188745304792397}, {0.7405621455042509, -0.6673299596621295, -0.07898375518726185}, {0.80754076069938, -0.15335524153301364, -0.5695261975567215}, {-0.7428567271237952, 0.3593941714860216, -0.5648005953155497}, {-0.8112534716456183, -0.3448953244235397, -0.4721387719026189}, {-0.21993078167242514, -0.6583691769191125, -0.7198475381327677}, {0.21392348218574597, -0.1478171768398566, -0.9656017947376752}, {-0.1092625236946045, 0.48119515875463253, -0.8697775118425345}, {-0.10926252412771359, 0.4811951525529661, -0.8697775152191327}, {-0.7405621389792739, 0.6673299643797594, 0.07898377650727696}, {-0.7405621607654073, 0.6673299431834946, 0.07898375132383098}, {-0.7405621367680706, 0.6673299714231342, 0.07898373773067752}}; /* The points of the Airocean projection map are deduced from the unfolded net @@ -47,7 +48,7 @@ constexpr PJ_XYZ ico_normals[23] = {{0.8112534716456183, 0.3448953244235397, 0.4 The distances in the projected 2d space are expressed in meter. */ // Define the 23 unfolded surfaces used (from icosahedron + split faces) -constexpr pj_face airocean_faces[23] = {{{11602775.971724393, 20096597.491866, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {17404163.95758659, 23446030.407177, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {5801387.985862196, 23446030.407177, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {5801387.985862196, 16747164.576555002, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {5801387.985862196, 16747164.576555002, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {17404163.95758659, 23446030.407177, 1.0}, {17404163.95758659, 16747164.576555002, 1.0}}, {{17404163.95758659, 23446030.407177, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {17404163.95758659, 30144896.237799004, 1.0}}, {{11602775.971724393, 33494329.153110005, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {5801387.985862196, 30144896.237799004, 1.0}}, {{5801387.985862196, 30144896.237799004, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}, {{5801387.985862196, 16747164.576555002, 1.0}, {0.0, 20096597.491866, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}, {{5801387.985862196, 16747164.576555002, 1.0}, {5801387.985862196, 10048298.745933, 1.0}, {0.0, 13397731.661244001, 1.0}}, {{5801387.985862196, 16747164.576555002, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {5801387.985862196, 10048298.745933, 1.0}}, {{5801387.985862196, 10048298.745933, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}}, {{11602775.971724393, 6698865.830622001, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {17404163.95758659, 10048298.745933, 1.0}}, {{11602775.971724393, 0.0, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}, {17404163.95758659, 3349432.9153110003, 1.0}}, {{0.0, 33494329.153110005, 1.0}, {5801387.985862196, 30144896.237799004, 1.0}, {0.0, 26795463.322488002, 1.0}}, {{0.0, 6698865.830622001, 1.0}, {0.0, 13397731.661244001, 1.0}, {5801387.985862196, 10048298.745933, 1.0}}, {{5801387.985862196, 3349432.9153110003, 1.0}, {5801387.985862196, 10048298.745933, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}}, {{5801387.985862196, 3349432.9153110003, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}, {11602775.971724393, 0.0, 1.0}}, {{5801387.985862196, 30144896.237799004, 1.0}, {2900693.992931098, 31819612.695454504, 1.0}, {5801387.985862196, 36843762.068421006, 1.0}}, {{5801387.985862196, 3349432.9153110003, 1.0}, {11602775.971724393, 0.0, 1.0}, {5801387.985862196, 0.0, 1.0}}, {{0.0, 26795463.322488002, 1.0}, {5801387.985862196, 30144896.237799004, 1.0}, {3867591.9905747976, 26795463.322488002, 1.0}}, {{5801387.985862196, 30144896.237799004, 1.0}, {5801387.985862196, 23446030.407177, 1.0}, {3867591.9905747976, 26795463.322488002, 1.0}}, {{0.0, 20096597.491866, 1.0}, {1933795.9952873988, 23446030.407177, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}}; +constexpr pj_face base_airocean_faces[23] = {{{11602775.971724393, 20096597.491866, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {17404163.95758659, 23446030.407177, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {5801387.985862196, 23446030.407177, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {5801387.985862196, 16747164.576555002, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {5801387.985862196, 16747164.576555002, 1.0}}, {{11602775.971724393, 20096597.491866, 1.0}, {17404163.95758659, 23446030.407177, 1.0}, {17404163.95758659, 16747164.576555002, 1.0}}, {{17404163.95758659, 23446030.407177, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {17404163.95758659, 30144896.237799004, 1.0}}, {{11602775.971724393, 33494329.153110005, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {5801387.985862196, 30144896.237799004, 1.0}}, {{5801387.985862196, 30144896.237799004, 1.0}, {11602775.971724393, 26795463.322488002, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}, {{5801387.985862196, 16747164.576555002, 1.0}, {0.0, 20096597.491866, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}, {{5801387.985862196, 16747164.576555002, 1.0}, {5801387.985862196, 10048298.745933, 1.0}, {0.0, 13397731.661244001, 1.0}}, {{5801387.985862196, 16747164.576555002, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {5801387.985862196, 10048298.745933, 1.0}}, {{5801387.985862196, 10048298.745933, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}}, {{11602775.971724393, 6698865.830622001, 1.0}, {11602775.971724393, 13397731.661244001, 1.0}, {17404163.95758659, 10048298.745933, 1.0}}, {{11602775.971724393, 0.0, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}, {17404163.95758659, 3349432.9153110003, 1.0}}, {{0.0, 33494329.153110005, 1.0}, {5801387.985862196, 30144896.237799004, 1.0}, {0.0, 26795463.322488002, 1.0}}, {{0.0, 6698865.830622001, 1.0}, {0.0, 13397731.661244001, 1.0}, {5801387.985862196, 10048298.745933, 1.0}}, {{5801387.985862196, 3349432.9153110003, 1.0}, {5801387.985862196, 10048298.745933, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}}, {{5801387.985862196, 3349432.9153110003, 1.0}, {11602775.971724393, 6698865.830622001, 1.0}, {11602775.971724393, 0.0, 1.0}}, {{5801387.985862196, 30144896.237799004, 1.0}, {2900693.992931098, 31819612.695454504, 1.0}, {5801387.985862196, 36843762.068421006, 1.0}}, {{5801387.985862196, 3349432.9153110003, 1.0}, {11602775.971724393, 0.0, 1.0}, {5801387.985862196, 0.0, 1.0}}, {{0.0, 26795463.322488002, 1.0}, {5801387.985862196, 30144896.237799004, 1.0}, {3867591.9905747976, 26795463.322488002, 1.0}}, {{5801387.985862196, 30144896.237799004, 1.0}, {5801387.985862196, 23446030.407177, 1.0}, {3867591.9905747976, 26795463.322488002, 1.0}}, {{0.0, 20096597.491866, 1.0}, {1933795.9952873988, 23446030.407177, 1.0}, {5801387.985862196, 23446030.407177, 1.0}}}; /* The parameters here are extracted from the transition matrices @@ -57,9 +58,62 @@ constexpr pj_face airocean_faces[23] = {{{11602775.971724393, 20096597.491866, 1 the irrelevant ones has been discarded. */ // Icosahedron to Airocean (forward) -constexpr double ico_air_trans[23][2][4] = {{{3676785.549175448, -3835017.5266620647, -3516181.101897219, 13536571.968889877}, {597946.080039791, 4588467.120428165, -4379277.476119764, 23446030.430853583}}, {{6186178.005526091, -1393567.8850913076, -615475.9158875226, 9668979.99656166}, {597946.0790283178, 4588467.148836121, -4379277.446492919, 23446030.4022735}}, {{6193487.416382644, -412638.42193403625, 1435299.1565727487, 7735183.994711302}, {610606.2949588482, 6287486.763792622, -827230.771869741, 20096597.453907937}}, {{6320833.951539666, -6999.925417495968, -797903.6054442794, 9668979.964544488}, {390035.65785509185, 5584900.2162612835, 3040789.86561249, 16747164.583089648}}, {{1785817.7160921493, -3817376.067203325, -4777879.901545344, 15470367.97086971}, {3873198.4648612146, 4557911.12782605, -2193951.0189847522, 20096597.472239383}}, {{1653953.7567438218, -4829262.323420258, -3812125.829251187, 15470367.969285296}, {-2905701.3326818133, 2866384.6227320307, -4891868.725058803, 26795463.326497696}}, {{6107473.604777472, -1644266.325782215, 764719.3302896866, 9668979.973521523}, {-20484.65208776388, -2749071.5526177026, -5747332.168284684, 30144896.23069373}}, {{6325351.398413758, 599247.844237452, 469545.1345954169, 7735183.991104206}, {356890.77665911405, 1136808.9376555325, -6258588.903331836, 26795463.365920186}}, {{3707748.6155441254, 320266.3046413801, 5171041.531732354, 3867591.9864321505}, {610606.2818745336, 6287486.766371998, -827230.7619227654, 20096597.44051682}}, {{3343388.0482846545, -4896993.062013145, 2330419.6732539237, 3867591.9905542377}, {20484.69631605078, 2749071.5422549895, 5747332.173083752, 13397731.669298988}}, {{6107473.604777474, -1644266.3257822143, 764719.330289686, 7735183.984065069}, {20484.65208776346, 2749071.552617706, 5747332.168284684, 13397731.654138729}}, {{6325351.398413757, 599247.8442374519, 469545.1345954159, 9668979.966482382}, {-356890.77665911167, -1136808.9376555379, 6258588.903331836, 10048298.789365184}}, {{4266333.348411551, 4606685.482609389, 1080041.5914374113, 13536571.961679665}, {-356890.81480763154, -1136808.9649443403, 6258588.896199714, 10048298.78278621}}, {{3707748.6155441264, 320266.30464138015, 5171041.531732352, 13536571.97115444}, {-610606.2818745337, -6287486.766372, 827230.7619227694, 3349432.8639618154}}, {{2461379.4064226267, 5855954.858490806, 488922.63367311924, 1933796.0165698116}, {3483162.7410947136, -1026989.0860837825, -5234740.880461738, 30144896.24019003}}, {{1320556.279179943, -5891237.854051452, 2034474.9935921053, 1933796.0148528814}, {-3483162.72987335, 1026989.0418338334, 5234740.896609632, 10048298.759397767}}, {{6186178.005526091, -1393567.885091309, -615475.9158875229, 7735183.961024929}, {-597946.0790283154, -4588467.148836119, 4379277.446492919, 6698865.825718503}}, {{6193487.416382645, -412638.4219340361, 1435299.156572748, 9668979.962875288}, {-610606.2949588535, -6287486.763792623, 827230.7718697439, 3349432.877352944}}, {{3498197.81693495, 4833165.559061878, 2234449.5231911456, 3867591.983769496}, {5278984.96116607, -2798512.200701845, -2211399.7153384583, 33494329.158408284}}, {{6320833.983680945, -6999.984355479206, -797903.6271294819, 7735183.9823354}, {-390035.68446349393, -5584900.177255948, -3040789.814780467, 0.044359486997177525}}, {{4266333.41772867, 4606685.445409489, 1080041.6365273518, 3867592.0700864717}, {356890.72771489987, 1136809.053212709, -6258588.866576485, 26795463.265809294}}, {{4266333.204506115, 4606685.540218764, 1080041.5936954806, 3867591.897018196}, {356890.8007120557, 1136808.9497242568, -6258588.899768077, 26795463.365730304}}, {{1824090.1118675405, 1318837.3514699321, 5960117.7705610385, 1933795.9110601672}, {3873198.583330483, 4557911.083457602, -2193951.0468033054, 23446030.547617782}}}; +constexpr double base_ico_air_trans[23][4][4] = {{{3676785.549175448, -3835017.5266620647, -3516181.101897219, 13536571.968889877}, {597946.080039791, 4588467.120428165, -4379277.476119764, 23446030.430853583}, {0.8112534716456183, 0.3448953244235397, 0.4721387719026189, -0.7946544736643394}, {0.0, 0.0, 0.0, 0.9999999999999999}}, {{6186178.005526091, -1393567.8850913076, -615475.9158875226, 9668979.99656166}, {597946.0790283178, 4588467.148836121, -4379277.446492919, 23446030.4022735}, {0.2199307816724251, 0.6583691769191125, 0.7198475381327677, -0.794654474160402}, {2.7755575615628914e-17, 0.0, 0.0, 1.0}}, {{6193487.416382644, -412638.42193403625, 1435299.1565727487, 7735183.994711302}, {610606.2949588482, 6287486.763792622, -827230.771869741, 20096597.453907937}, {-0.213923482185746, 0.14781717683985665, 0.9656017947376753, -0.7946544722350559}, {-1.3877787807814457e-16, 2.7755575615628914e-17, 0.0, 1.0}}, {{6320833.951539666, -6999.925417495968, -797903.6054442794, 9668979.964544488}, {390035.65785509185, 5584900.2162612835, 3040789.86561249, 16747164.583089648}, {0.1092625259373331, -0.48119515565604315, 0.8697775132750618, -0.794654472177355}, {1.1102230246251565e-16, 5.551115123125783e-17, 0.0, 1.0}}, {{1785817.7160921493, -3817376.067203325, -4777879.901545344, 15470367.97086971}, {3873198.4648612146, 4557911.12782605, -2193951.0189847522, 20096597.472239383}, {0.7428567271237952, -0.3593941714860217, 0.5648005953155497, -0.7946544741179917}, {0.0, 0.0, 0.0, 1.0000000000000002}}, {{1653953.7567438218, -4829262.323420258, -3812125.829251187, 15470367.969285296}, {-2905701.3326818133, 2866384.6227320307, -4891868.725058803, 26795463.326497696}, {0.8512303999921013, 0.4722343774266651, -0.22891373682183747, -0.7946544711481622}, {0.0, -5.551115123125783e-17, 1.1102230246251565e-16, 1.0}}, {{6107473.604777472, -1644266.325782215, 764719.3302896866, 9668979.973521523}, {-20484.65208776388, -2749071.5526177026, -5747332.168284684, 30144896.23069373}, {0.2846148074971938, 0.8644080979012073, -0.41447925356542553, -0.7946544719642821}, {0.0, -1.1102230246251565e-16, 0.0, 1.0}}, {{6325351.398413758, 599247.844237452, 469545.1345954169, 7735183.991104206}, {356890.77665911405, 1136808.9376555325, -6258588.903331836, 26795463.365920186}, {-0.10554981347150151, 0.97944573119741, 0.17188745304792394, -0.794654473006748}, {-1.3877787807814457e-17, 0.0, 8.326672684688674e-17, 1.0}}, {{3707748.6155441254, 320266.3046413801, 5171041.531732354, 3867591.9864321505}, {610606.2818745336, 6287486.766371998, -827230.7619227654, 20096597.44051682}, {-0.8075407606993799, 0.15335524153301364, 0.5695261975567214, -0.7946544732451482}, {0.0, -8.326672684688674e-17, 0.0, 1.0}}, {{3343388.0482846545, -4896993.062013145, 2330419.6732539237, 3867591.9905542377}, {20484.69631605078, 2749071.5422549895, 5747332.173083752, 13397731.669298988}, {-0.8512303999921013, -0.4722343774266651, 0.22891373682183733, -0.7946544711481622}, {1.1102230246251565e-16, 0.0, -2.7755575615628914e-17, 1.0}}, {{6107473.604777474, -1644266.3257822143, 764719.330289686, 7735183.984065069}, {20484.65208776346, 2749071.552617706, 5747332.168284684, 13397731.654138729}, {-0.28461480749719376, -0.8644080979012073, 0.41447925356542553, -0.7946544719642822}, {-5.551115123125783e-17, 0.0, -5.551115123125783e-17, 1.0}}, {{6325351.398413757, 599247.8442374519, 469545.1345954159, 9668979.966482382}, {-356890.77665911167, -1136808.9376555379, 6258588.903331836, 10048298.789365184}, {0.10554981347150151, -0.97944573119741, -0.17188745304792394, -0.794654473006748}, {1.249000902703301e-16, 0.0, -8.326672684688674e-17, 1.0}}, {{4266333.348411551, 4606685.482609389, 1080041.5914374113, 13536571.961679665}, {-356890.81480763154, -1136808.9649443403, 6258588.896199714, 10048298.78278621}, {0.7405621455042507, -0.6673299596621294, -0.07898375518726183, -0.7946544743360283}, {1.1102230246251565e-16, 0.0, 5.551115123125783e-17, 0.9999999999999999}}, {{3707748.6155441264, 320266.30464138015, 5171041.531732352, 13536571.97115444}, {-610606.2818745337, -6287486.766372, 827230.7619227694, 3349432.8639618154}, {0.8075407606993799, -0.15335524153301364, -0.5695261975567214, -0.7946544732451483}, {-1.1102230246251565e-16, -2.7755575615628914e-17, 0.0, 1.0}}, {{2461379.4064226267, 5855954.858490806, 488922.63367311924, 1933796.0165698116}, {3483162.7410947136, -1026989.0860837825, -5234740.880461738, 30144896.24019003}, {-0.7428567271237954, 0.35939417148602165, -0.5648005953155498, -0.7946544741179918}, {-1.1102230246251565e-16, 5.551115123125783e-17, 0.0, 1.0}}, {{1320556.279179943, -5891237.854051452, 2034474.9935921053, 1933796.0148528814}, {-3483162.72987335, 1026989.0418338334, 5234740.896609632, 10048298.759397767}, {-0.8112534716456183, -0.34489532442353976, -0.4721387719026189, -0.7946544736643393}, {0.0, 1.1102230246251565e-16, 0.0, 1.0}}, {{6186178.005526091, -1393567.885091309, -615475.9158875229, 7735183.961024929}, {-597946.0790283154, -4588467.148836119, 4379277.446492919, 6698865.825718503}, {-0.21993078167242508, -0.6583691769191125, -0.7198475381327677, -0.794654474160402}, {0.0, -1.1102230246251565e-16, 0.0, 1.0}}, {{6193487.416382645, -412638.4219340361, 1435299.156572748, 9668979.962875288}, {-610606.2949588535, -6287486.763792623, 827230.7718697439, 3349432.877352944}, {0.21392348218574594, -0.14781717683985665, -0.965601794737675, -0.7946544722350558}, {-1.3877787807814457e-16, -2.7755575615628914e-17, 0.0, 1.0}}, {{3498197.81693495, 4833165.559061878, 2234449.5231911456, 3867591.983769496}, {5278984.96116607, -2798512.200701845, -2211399.7153384583, 33494329.158408284}, {-0.10926252369460446, 0.4811951587546325, -0.8697775118425342, -0.7946544734171301}, {8.326672684688674e-17, 0.0, 0.0, 0.9999999999999998}}, {{6320833.983680945, -6999.984355479206, -797903.6271294819, 7735183.9823354}, {-390035.68446349393, -5584900.177255948, -3040789.814780467, 0.044359486997177525}, {-0.10926252412771358, 0.48119515255296597, -0.8697775152191325, -0.79465447341713}, {-4.163336342344337e-17, -1.1102230246251565e-16, 0.0, 0.9999999999999999}}, {{4266333.41772867, 4606685.445409489, 1080041.6365273518, 3867592.0700864717}, {356890.72771489987, 1136809.053212709, -6258588.866576485, 26795463.265809294}, {-0.7405621389792741, 0.6673299643797597, 0.07898377650727716, -0.7946544674186218}, {1.1102230246251565e-16, 0.0, -1.3877787807814457e-17, 1.0}}, {{4266333.204506115, 4606685.540218764, 1080041.5936954806, 3867591.897018196}, {356890.8007120557, 1136808.9497242568, -6258588.899768077, 26795463.365730304}, {-0.7405621607654075, 0.6673299431834948, 0.07898375132383098, -0.7946544674186217}, {1.1102230246251565e-16, -1.1102230246251565e-16, 2.7755575615628914e-17, 0.9999999999999999}}, {{1824090.1118675405, 1318837.3514699321, 5960117.7705610385, 1933795.9110601672}, {3873198.583330483, 4557911.083457602, -2193951.0468033054, 23446030.547617782}, {-0.7405621367680707, 0.667329971423134, 0.07898373773067754, -0.7946544674186213}, {0.0, 0.0, 8.326672684688674e-17, 1.0}}}; // Airocean to Icosahedron (inverse) -constexpr double air_ico_trans[23][3][3] = {{{9.058433279771384e-08, 1.4731493732699052e-08, -0.9269301899999991}, {-9.44826679987233e-08, 1.1304527499839262e-07, -1.0974189099999994}, {-8.662754779110161e-08, -1.0789150406568015e-07, 4.077454709999999}}, {{1.5240780519329358e-07, 1.473149373269901e-08, -1.6442540899999978}, {-3.4333093302050216e-08, 1.1304527499839258e-07, -1.7953209499999985}, {-1.51633738709386e-08, -1.0789150406568015e-07, 3.248271909999998}}, {{1.525878853745444e-07, 1.504340175606161e-08, -1.6526118100000007}, {-1.0166102516109274e-08, 1.5490373090569122e-07, -2.9169376700000003}, {3.536121881520939e-08, -2.0380342501548998e-08, 0.9033697899999995}}, {{1.557252983599121e-07, 9.609243061078464e-09, -1.5798064100000002}, {-1.7245441994882394e-10, 1.375942246501773e-07, -2.6850295500000003}, {-1.96578129712955e-08, 7.491541593592458e-08, -0.37337721000000035}}, {{4.399688326690425e-08, 9.54233233151121e-08, -2.0080176699999996}, {-9.404803666461074e-08, 1.122924714451482e-07, -1.0873330499999996}, {-1.1771180391040664e-07, -5.405199315156007e-08, 3.3561273899999997}}, {{4.074817450170371e-08, -7.158726449003567e-08, 1.9642587099999982}, {-1.1897770528054373e-07, 7.061862589298568e-08, 0.3236332400000001}, {-9.391868744648748e-08, -1.2052012839388902e-07, 4.500442009999996}}, {{1.5046877525297362e-07, -5.046779687011883e-10, -1.2134956799999999}, {-4.0509505754953036e-08, -6.772840231043597e-08, 3.120257019999999}, {1.8840259480379495e-08, -1.4159603341569342e-07, 3.7568638499999985}}, {{1.55836594139745e-07, 8.792657069014762e-09, -1.52490368}, {1.4763566099823772e-08, 2.800736643244269e-08, -0.08634832999999958}, {1.1568102351290336e-08, -1.5419177904390005e-07, 4.178749899999998}}, {{9.134716490113195e-08, 1.504340175606163e-08, -1.2973306300000003}, {7.890345398644546e-09, 1.5490373090569127e-07, -3.021690130000001}, {1.2739806091251417e-07, -2.0380342501549028e-08, 0.3694283599999999}}, {{8.237047688665845e-08, 5.04677968701152e-10, -1.0017709799999996}, {-1.2064637664394705e-07, 6.772840231043599e-08, -0.8160591599999997}, {5.741414913322641e-08, 1.4159603341569342e-07, -1.937212839999999}}, {{1.504687752529736e-07, 5.046779687011514e-10, -1.3968356299999996}, {-4.0509505754953036e-08, 6.772840231043597e-08, -1.2809642399999992}, {1.8840259480379524e-08, 1.415960334156934e-07, -1.713430739999999}}, {{1.55836594139745e-07, -8.792657069014724e-09, -1.3345540299999996}, {1.4763566099823759e-08, -2.8007366432442684e-08, -0.6396431699999997}, {1.1568102351290311e-08, 1.5419177904390013e-07, -1.7978079499999997}}, {{1.0510891988020954e-07, -8.792657069014762e-09, -0.7459721899999996}, {1.1349411668458604e-07, -2.8007366432442694e-08, -1.7851916299999993}, {2.6608799545245027e-08, 1.541917790439001e-07, -1.9723217899999996}}, {{9.134716490113195e-08, -1.5043401756061595e-08, -0.5444247299999998}, {7.890345398644617e-09, -1.5490373090569122e-07, 0.29016699000000007}, {1.2739806091251412e-07, 2.038034250154901e-08, -2.2453721499999992}}, {{6.064058047097081e-08, 8.58140802540336e-08, -3.294437479999999}, {1.4427215125754238e-07, -2.530175320502907e-08, 0.7693199999999997}, {1.2045502760769865e-08, -1.2896740908748457e-07, 3.4155942999999986}}, {{3.2534318590648264e-08, -8.581408025403363e-08, 0.15470457999999998}, {-1.4514141392576755e-07, 2.530175320502908e-08, -0.2476383}, {5.01230094778404e-08, 1.289674090874846e-07, -1.7680179200000001}}, {{1.524078051932937e-07, -1.4731493732699067e-08, -1.25498709}, {-3.433309330205022e-08, -1.1304527499839266e-07, 0.49967191}, {-1.5163373870938614e-08, 1.0789150406568026e-07, -1.17748929}}, {{1.5258788537454444e-07, -1.50434017560616e-08, -1.25498709}, {-1.016610251610931e-08, -1.5490373090569122e-07, 0.49967191}, {3.536121881520941e-08, 2.0380342501549018e-08, -1.17748929}}, {{8.618449605826386e-08, 1.3005744286105568e-07, -4.776339219999996}, {1.1907386502737676e-07, -6.894646223375916e-08, 2.2311702599999985}, {5.5049746849940485e-08, -5.4481873383947436e-08, 0.9207512499999986}}, {{1.5572529749804938e-07, -9.609244553868475e-09, -1.29138978}, {-1.7245528181154292e-10, -1.3759422614296728e-07, 0.38371785999999997}, {-1.9657812971295542e-08, -7.491541593592457e-08, -0.53911579}}, {{1.0510892074207234e-07, 8.792655576224747e-09, -1.2306127199999985}, {1.1349411496086066e-07, 2.8007369418022736e-08, -0.6591226399999993}, {2.6608799545244997e-08, -1.5419177904390008e-07, 4.091492979999998}}, {{1.0510891815648413e-07, 8.79265706901476e-09, -1.2306127500000001}, {1.1349412013203696e-07, 2.8007366432442717e-08, -0.6591225800000001}, {2.6608799545245066e-08, -1.5419177904390005e-07, 4.091492979999997}}, {{4.4939794689710465e-08, 9.54233248079021e-08, -2.9126935899999995}, {3.249196924242356e-08, 1.1229246845956814e-07, -2.1653487399999993}, {1.4683839747935709e-07, -5.405199315156002e-08, 1.0461139699999995}}}; +constexpr double base_air_ico_trans[23][4][4] = {{{9.058433279771384e-08, 1.4731493732699052e-08, 0.8112534716456185, -0.9269301899999991}, {-9.44826679987233e-08, 1.1304527499839262e-07, 0.34489532442353965, -1.0974189099999994}, {-8.662754779110161e-08, -1.0789150406568015e-07, 0.47213877190261877, 4.077454709999999}, {0.0, 2.646977960169691e-23, 0.0, 1.0}}, {{1.5240780519329358e-07, 1.473149373269901e-08, 0.219930781672425, -1.6442540899999978}, {-3.4333093302050216e-08, 1.1304527499839258e-07, 0.6583691769191122, -1.7953209499999985}, {-1.51633738709386e-08, -1.0789150406568015e-07, 0.719847538132768, 3.248271909999998}, {-1.3234889800848443e-23, 2.6469779601696886e-23, 0.0, 1.0}}, {{1.525878853745444e-07, 1.504340175606161e-08, -0.21392348218574625, -1.6526118100000007}, {-1.0166102516109274e-08, 1.5490373090569122e-07, 0.14781717683985585, -2.9169376700000003}, {3.536121881520939e-08, -2.0380342501548998e-08, 0.9656017947376755, 0.9033697899999995}, {-1.3234889800848443e-23, 2.6469779601696886e-23, 2.220446049250313e-16, 1.0}}, {{1.557252983599121e-07, 9.609243061078464e-09, 0.10926252593733309, -1.5798064100000002}, {-1.7245441994882394e-10, 1.375942246501773e-07, -0.48119515565604315, -2.6850295500000003}, {-1.96578129712955e-08, 7.491541593592458e-08, 0.8697775132750615, -0.37337721000000035}, {2.6469779601696886e-23, 1.3234889800848443e-23, 0.0, 1.0}}, {{4.399688326690425e-08, 9.54233233151121e-08, 0.7428567271237949, -2.0080176699999996}, {-9.404803666461074e-08, 1.122924714451482e-07, -0.35939417148602176, -1.0873330499999996}, {-1.1771180391040664e-07, -5.405199315156007e-08, 0.5648005953155502, 3.3561273899999997}, {0.0, 0.0, 0.0, 1.0}}, {{4.074817450170371e-08, -7.158726449003567e-08, 0.8512303999921009, 1.9642587099999982}, {-1.1897770528054373e-07, 7.061862589298568e-08, 0.4722343774266655, 0.3236332400000001}, {-9.391868744648748e-08, -1.2052012839388902e-07, -0.22891373682183766, 4.500442009999996}, {1.3234889800848443e-23, 2.6469779601696886e-23, 0.0, 0.9999999999999991}}, {{1.5046877525297362e-07, -5.046779687011883e-10, 0.2846148074971936, -1.2134956799999999}, {-4.0509505754953036e-08, -6.772840231043597e-08, 0.8644080979012075, 3.120257019999999}, {1.8840259480379495e-08, -1.4159603341569342e-07, -0.4144792535654251, 3.7568638499999985}, {0.0, -1.1754943508222875e-38, 0.0, 1.0}}, {{1.55836594139745e-07, 8.792657069014762e-09, -0.1055498134715016, -1.52490368}, {1.4763566099823772e-08, 2.800736643244269e-08, 0.97944573119741, -0.08634832999999958}, {1.1568102351290336e-08, -1.5419177904390005e-07, 0.17188745304792347, 4.178749899999998}, {1.3234889800848443e-23, 0.0, 0.0, 1.0}}, {{9.134716490113195e-08, 1.504340175606163e-08, -0.80754076069938, -1.2973306300000003}, {7.890345398644546e-09, 1.5490373090569127e-07, 0.15335524153301333, -3.021690130000001}, {1.2739806091251417e-07, -2.0380342501549028e-08, 0.5695261975567216, 0.3694283599999999}, {1.3234889800848443e-23, -2.6469779601696886e-23, 0.0, 1.0}}, {{8.237047688665845e-08, 5.04677968701152e-10, -0.8512303999921011, -1.0017709799999996}, {-1.2064637664394705e-07, 6.772840231043599e-08, -0.472234377426665, -0.8160591599999997}, {5.741414913322641e-08, 1.4159603341569342e-07, 0.2289137368218376, -1.937212839999999}, {-2.6469779601696886e-23, 1.323488980084844e-23, 0.0, 1.0}}, {{1.504687752529736e-07, 5.046779687011514e-10, -0.2846148074971936, -1.3968356299999996}, {-4.0509505754953036e-08, 6.772840231043597e-08, -0.8644080979012072, -1.2809642399999992}, {1.8840259480379524e-08, 1.415960334156934e-07, 0.41447925356542575, -1.713430739999999}, {1.3234889800848443e-23, 0.0, 0.0, 0.9999999999999998}}, {{1.55836594139745e-07, -8.792657069014724e-09, 0.10554981347150141, -1.3345540299999996}, {1.4763566099823759e-08, -2.8007366432442684e-08, -0.97944573119741, -0.6396431699999997}, {1.1568102351290311e-08, 1.5419177904390013e-07, -0.17188745304792416, -1.7978079499999997}, {0.0, -2.6469779601696886e-23, 0.0, 0.9999999999999998}}, {{1.0510891988020954e-07, -8.792657069014762e-09, 0.740562145504251, -0.7459721899999996}, {1.1349411668458604e-07, -2.8007366432442694e-08, -0.6673299596621296, -1.7851916299999993}, {2.6608799545245027e-08, 1.541917790439001e-07, -0.07898375518726153, -1.9723217899999996}, {0.0, 0.0, 0.0, 1.0}}, {{9.134716490113195e-08, -1.5043401756061595e-08, 0.80754076069938, -0.5444247299999998}, {7.890345398644617e-09, -1.5490373090569122e-07, -0.15335524153301372, 0.29016699000000007}, {1.2739806091251412e-07, 2.038034250154901e-08, -0.5695261975567216, -2.2453721499999992}, {0.0, 0.0, 0.0, 1.0}}, {{6.064058047097081e-08, 8.58140802540336e-08, -0.7428567271237954, -3.294437479999999}, {1.4427215125754238e-07, -2.530175320502907e-08, 0.3593941714860216, 0.7693199999999997}, {1.2045502760769865e-08, -1.2896740908748457e-07, -0.5648005953155495, 3.4155942999999986}, {1.3234889800848443e-23, 0.0, 0.0, 1.0}}, {{3.2534318590648264e-08, -8.581408025403363e-08, -0.8112534716456185, 0.15470457999999998}, {-1.4514141392576755e-07, 2.530175320502908e-08, -0.34489532442353965, -0.2476383}, {5.01230094778404e-08, 1.289674090874846e-07, -0.47213877190261855, -1.7680179200000001}, {0.0, 0.0, 0.0, 1.0}}, {{1.524078051932937e-07, -1.4731493732699067e-08, -0.21993078167242536, -1.25498709}, {-3.433309330205022e-08, -1.1304527499839266e-07, -0.6583691769191123, 0.49967191}, {-1.5163373870938614e-08, 1.0789150406568026e-07, -0.7198475381327679, -1.17748929}, {0.0, 0.0, 2.220446049250313e-16, 1.0}}, {{1.5258788537454444e-07, -1.50434017560616e-08, 0.2139234821857457, -1.25498709}, {-1.016610251610931e-08, -1.5490373090569122e-07, -0.14781717683985668, 0.49967191}, {3.536121881520941e-08, 2.0380342501549018e-08, -0.9656017947376753, -1.17748929}, {0.0, 0.0, 0.0, 1.0}}, {{8.618449605826386e-08, 1.3005744286105568e-07, -0.10926252369460417, -4.776339219999996}, {1.1907386502737676e-07, -6.894646223375916e-08, 0.48119515875463226, 2.2311702599999985}, {5.5049746849940485e-08, -5.4481873383947436e-08, -0.8697775118425347, 0.9207512499999986}, {1.3234889800848443e-23, 2.6469779601696886e-23, 0.0, 1.0}}, {{1.5572529749804938e-07, -9.609244553868475e-09, -0.10926252412771378, -1.29138978}, {-1.7245528181154292e-10, -1.3759422614296728e-07, 0.48119515255296613, 0.38371785999999997}, {-1.9657812971295542e-08, -7.491541593592457e-08, -0.8697775152191327, -0.53911579}, {0.0, 0.0, 1.1102230246251565e-16, 1.0}}, {{1.0510892074207234e-07, 8.792655576224747e-09, -0.7405621389792737, -1.2306127199999985}, {1.1349411496086066e-07, 2.8007369418022736e-08, 0.6673299643797594, -0.6591226399999993}, {2.6608799545244997e-08, -1.5419177904390008e-07, 0.07898377650727657, 4.091492979999998}, {0.0, 0.0, 0.0, 1.0}}, {{1.0510891815648413e-07, 8.79265706901476e-09, -0.7405621607654073, -1.2306127500000001}, {1.1349412013203696e-07, 2.8007366432442717e-08, 0.6673299431834946, -0.6591225800000001}, {2.6608799545245066e-08, -1.5419177904390005e-07, 0.07898375132383044, 4.091492979999997}, {0.0, 1.323488980084842e-23, 0.0, 1.0}}, {{4.4939794689710465e-08, 9.54233248079021e-08, -0.7405621367680707, -2.9126935899999995}, {3.249196924242356e-08, 1.1229246845956814e-07, 0.6673299714231342, -2.1653487399999993}, {1.4683839747935709e-07, -5.405199315156002e-08, 0.07898373773067752, 1.0461139699999995}, {0.0, -2.6469779601696886e-23, 0.0, 0.9999999999999996}}}; + + +// By default the resulting orientation of the projection is vertical +// the following transforms are used to alter the projection data +// so that the resulting orientation is horizontal instead +constexpr double orient_horizontal_trans[4][4] = {{0.0, -1.0, 0.0, 36843762.068421006}, {1.0, 0.0, 0.0, 0.0}, {0.0, 0.0, 1.0, 0.0}, {0.0, 0.0, 0.0, 1.0}}; +constexpr double orient_horizontal_inv_trans[4][4] = {{0.0, 1.0, 0.0, 0.0}, {-1.0, -0.0, -0.0, 36843762.068421006}, {0.0, 0.0, 1.0, 0.0}, {0.0, 0.0, 0.0, 1.0}}; + +namespace { // anonymous namespace + + struct pj_airocean_data { + pj_face ico_faces[23] = {}; + PJ_XYZ ico_centers[23] = {}; + PJ_XYZ ico_normals[23] = {}; + pj_face airocean_faces[23] = {}; + double ico_air_trans[23][4][4] = {}; + double air_ico_trans[23][4][4] = {}; + + void initialize() { + memcpy((char *) this->ico_faces, (char *) base_ico_faces, sizeof(pj_face[23])); + memcpy((char *) this->airocean_faces, (char *) base_airocean_faces, sizeof(pj_face[23])); + memcpy(this->ico_centers, base_ico_centers, sizeof(PJ_XYZ[23])); + memcpy(this->ico_normals, base_ico_normals, sizeof(PJ_XYZ[23])); + memcpy(this->ico_air_trans, base_ico_air_trans, sizeof(double[23][4][4])); + memcpy(this->air_ico_trans, base_air_ico_trans, sizeof(double[23][4][4])); + } + + void mult4x4(const double m1[4][4], const double m2[4][4], double res[4][4]) { + for (unsigned char i = 0; i < 4; ++i) + for (unsigned char j = 0; j < 4; ++j) + res[i][j] = (m1[i][0] * m2[0][j]) + + (m1[i][1] * m2[1][j]) + + (m1[i][2] * m2[2][j]) + + (m1[i][3] * m2[3][j]); + } + + void transform(const double m[4][4], const double inv_m[4][4]) { + for (unsigned char i=0; i < 23; i++) { + mult4x4(m, base_ico_air_trans[i], this->ico_air_trans[i]); + } + for (unsigned char i=0; i < 23; i++) { + mult4x4(base_air_ico_trans[i], inv_m, this->air_ico_trans[i]); + } + } + + + }; + + + +} // anonymous namespace + + inline double det(const PJ_XYZ *u, const PJ_XYZ *v, const PJ_XYZ *w) { @@ -79,9 +133,9 @@ inline bool is_point_in_face(const PJ_XYZ *p, const pj_face * face) { } -inline unsigned char get_ico_face_index(const PJ_XYZ *p) { +inline unsigned char get_ico_face_index(const pj_airocean_data * pj_data, const PJ_XYZ *p) { for (unsigned char i=0; i < 23; i++) { - if (is_point_in_face(p, &ico_faces[i])) { + if (is_point_in_face(p, &pj_data->ico_faces[i])) { return i; } } @@ -89,10 +143,10 @@ inline unsigned char get_ico_face_index(const PJ_XYZ *p) { return 23; } -inline unsigned char get_dym_face_index(const PJ_XY *p) { +inline unsigned char get_dym_face_index(const pj_airocean_data * pj_data, const PJ_XY *p) { const PJ_XYZ pp{p->x, p->y, 1.0}; for (unsigned char i=0; i < 23; i++) { - if (is_point_in_face(&pp, &airocean_faces[i])) { + if (is_point_in_face(&pp, &pj_data->airocean_faces[i])) { return i; } } @@ -100,36 +154,36 @@ inline unsigned char get_dym_face_index(const PJ_XY *p) { return 23; } -inline PJ_XY ico_to_dym(const PJ_XYZ * p, unsigned char face_id) { +inline PJ_XY ico_to_dym(const pj_airocean_data * pj_data, const PJ_XYZ * p, unsigned char face_id) { return PJ_XY{ - ico_air_trans[face_id][0][0] * p->x + - ico_air_trans[face_id][0][1] * p->y + - ico_air_trans[face_id][0][2] * p->z + - ico_air_trans[face_id][0][3], - ico_air_trans[face_id][1][0] * p->x + - ico_air_trans[face_id][1][1] * p->y + - ico_air_trans[face_id][1][2] * p->z + - ico_air_trans[face_id][1][3], + pj_data->ico_air_trans[face_id][0][0] * p->x + // * -1 + pj_data->ico_air_trans[face_id][0][1] * p->y + // + pj_data->ico_air_trans[face_id][0][2] * p->z + // + pj_data->ico_air_trans[face_id][0][3], // +1000 + pj_data->ico_air_trans[face_id][1][0] * p->x + + pj_data->ico_air_trans[face_id][1][1] * p->y + + pj_data->ico_air_trans[face_id][1][2] * p->z + + pj_data->ico_air_trans[face_id][1][3], }; } -inline PJ_XYZ dym_to_ico(const PJ_XY * p, unsigned char face_id) { +inline PJ_XYZ dym_to_ico(const pj_airocean_data * pj_data, const PJ_XY * p, unsigned char face_id) { return PJ_XYZ{ - air_ico_trans[face_id][0][0] * p->x + - air_ico_trans[face_id][0][1] * p->y + - air_ico_trans[face_id][0][2], - air_ico_trans[face_id][1][0] * p->x + - air_ico_trans[face_id][1][1] * p->y + - air_ico_trans[face_id][1][2], - air_ico_trans[face_id][2][0] * p->x + - air_ico_trans[face_id][2][1] * p->y + - air_ico_trans[face_id][2][2], + pj_data->air_ico_trans[face_id][0][0] * p->x + // * -1 + pj_data->air_ico_trans[face_id][0][1] * p->y + // + pj_data->air_ico_trans[face_id][0][3], // + [face_id][0][0] * 1000 + pj_data->air_ico_trans[face_id][1][0] * p->x + + pj_data->air_ico_trans[face_id][1][1] * p->y + + pj_data->air_ico_trans[face_id][1][3], + pj_data->air_ico_trans[face_id][2][0] * p->x + + pj_data->air_ico_trans[face_id][2][1] * p->y + + pj_data->air_ico_trans[face_id][2][3], }; } -inline PJ_XYZ cartesian_to_ico(const PJ_XYZ *p, unsigned char face_id) { - const PJ_XYZ * center = &ico_centers[face_id]; - const PJ_XYZ * normal = &ico_normals[face_id]; +inline PJ_XYZ cartesian_to_ico(const pj_airocean_data * pj_data, const PJ_XYZ *p, unsigned char face_id) { + const PJ_XYZ * center = &pj_data->ico_centers[face_id]; + const PJ_XYZ * normal = &pj_data->ico_normals[face_id]; // cppcheck-suppress unreadVariable double a = 1.0 - ( @@ -156,6 +210,9 @@ inline PJ_XYZ cartesian_to_ico(const PJ_XYZ *p, unsigned char face_id) { // // ============================================ static PJ_XY airocean_forward(PJ_LP lp, PJ *P) { + const struct pj_airocean_data *Q = + static_cast(P->opaque); + double lat; /* Convert the geodetic latitude to a geocentric latitude. @@ -184,11 +241,11 @@ static PJ_XY airocean_forward(PJ_LP lp, PJ *P) { PJ_XYZ cartesianPoint{x, y, z}; - unsigned char face_id = get_ico_face_index(&cartesianPoint); + unsigned char face_id = get_ico_face_index(Q, &cartesianPoint); - PJ_XYZ icoPoint = cartesian_to_ico(&cartesianPoint, face_id); + PJ_XYZ icoPoint = cartesian_to_ico(Q, &cartesianPoint, face_id); - PJ_XY airoceanPoint = ico_to_dym(&icoPoint, face_id); + PJ_XY airoceanPoint = ico_to_dym(Q, &icoPoint, face_id); return airoceanPoint; @@ -196,9 +253,12 @@ static PJ_XY airocean_forward(PJ_LP lp, PJ *P) { static PJ_LP airocean_inverse(PJ_XY xy, PJ *P) { + const struct pj_airocean_data *Q = + static_cast(P->opaque); + PJ_LP lp = {0.0, 0.0}; - unsigned char face_id = get_dym_face_index(&xy); + unsigned char face_id = get_dym_face_index(Q, &xy); if (face_id == 23) { // Point lies outside icosahedron net faces @@ -208,8 +268,7 @@ static PJ_LP airocean_inverse(PJ_XY xy, PJ *P) { return lp; } - - PJ_XYZ sphereCoords = dym_to_ico(&xy, face_id); + PJ_XYZ sphereCoords = dym_to_ico(Q, &xy, face_id); double norm = sqrt((sphereCoords.x * sphereCoords.x) + (sphereCoords.y * sphereCoords.y) + (sphereCoords.z * sphereCoords.z)); double q = sphereCoords.x / norm; @@ -240,6 +299,30 @@ static PJ_LP airocean_inverse(PJ_XY xy, PJ *P) { } PJ *PJ_PROJECTION(airocean) { + char *opt; + struct pj_airocean_data *Q = static_cast( + calloc(1, sizeof(struct pj_airocean_data))); + if (nullptr == Q) + return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); + Q->initialize(); + P->opaque = Q; + opt = pj_param(P->ctx, P->params, "sorient").s; + if (opt) { + if (!strcmp(opt, "horizontal")) { + Q->transform(orient_horizontal_trans, orient_horizontal_inv_trans); + } else if (!strcmp(opt, "vertical")) { + // the orientation is vertical by default. + } else { + proj_log_error( + P, + _("Invalid value for orient: only vertical or horizontal are supported")); + return pj_default_destructor(P, + PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); + } + } + + + P->left = PJ_IO_UNITS_RADIANS; P->right = PJ_IO_UNITS_PROJECTED; P->from_greenwich = -P->lam0; From 8d00367379d2e810244d8b8aed0a66f7b6649aea Mon Sep 17 00:00:00 2001 From: Pierre Louvart Date: Sun, 10 Nov 2024 15:54:09 +0100 Subject: [PATCH 17/23] - Set matrix multiplication function to be static --- src/projections/airocean.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/projections/airocean.cpp b/src/projections/airocean.cpp index ff749b0e09..3ec2952642 100644 --- a/src/projections/airocean.cpp +++ b/src/projections/airocean.cpp @@ -88,7 +88,7 @@ namespace { // anonymous namespace memcpy(this->air_ico_trans, base_air_ico_trans, sizeof(double[23][4][4])); } - void mult4x4(const double m1[4][4], const double m2[4][4], double res[4][4]) { + static void mult4x4(const double m1[4][4], const double m2[4][4], double res[4][4]) { for (unsigned char i = 0; i < 4; ++i) for (unsigned char j = 0; j < 4; ++j) res[i][j] = (m1[i][0] * m2[0][j]) From 4b5e71402fc0412a937c7b24516e34be4ef8bf6f Mon Sep 17 00:00:00 2001 From: Pierre Louvart Date: Sun, 10 Nov 2024 16:52:26 +0100 Subject: [PATCH 18/23] - Add missing airocean space face transform when selection +orient=horizontal --- src/projections/airocean.cpp | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/projections/airocean.cpp b/src/projections/airocean.cpp index 3ec2952642..b2ccce962a 100644 --- a/src/projections/airocean.cpp +++ b/src/projections/airocean.cpp @@ -17,9 +17,9 @@ PROJ_HEAD(airocean, "Airocean") "\n\tMisc, Sph&Ell"; namespace { // anonymous namespace struct pj_face { - const PJ_XYZ p1; - const PJ_XYZ p2; - const PJ_XYZ p3; + PJ_XYZ p1; + PJ_XYZ p2; + PJ_XYZ p3; }; } @@ -88,7 +88,7 @@ namespace { // anonymous namespace memcpy(this->air_ico_trans, base_air_ico_trans, sizeof(double[23][4][4])); } - static void mult4x4(const double m1[4][4], const double m2[4][4], double res[4][4]) { + static void mat_mult(const double m1[4][4], const double m2[4][4], double res[4][4]) { for (unsigned char i = 0; i < 4; ++i) for (unsigned char j = 0; j < 4; ++j) res[i][j] = (m1[i][0] * m2[0][j]) @@ -97,13 +97,24 @@ namespace { // anonymous namespace + (m1[i][3] * m2[3][j]); } + static PJ_XYZ vec_mult(const double m[4][4], const PJ_XYZ * v) { + double x = m[0][0] * v->x + m[0][1] * v->y + m[0][2] * v->z + m[0][3]; + double y = m[1][0] * v->x + m[1][1] * v->y + m[1][2] * v->z + m[1][3]; + double z = m[2][0] * v->x + m[2][1] * v->y + m[2][2] * v->z + m[2][3]; + return {x, y, z}; + } + void transform(const double m[4][4], const double inv_m[4][4]) { for (unsigned char i=0; i < 23; i++) { - mult4x4(m, base_ico_air_trans[i], this->ico_air_trans[i]); - } - for (unsigned char i=0; i < 23; i++) { - mult4x4(base_air_ico_trans[i], inv_m, this->air_ico_trans[i]); + mat_mult(m, base_ico_air_trans[i], this->ico_air_trans[i]); + mat_mult(base_air_ico_trans[i], inv_m, this->air_ico_trans[i]); + this->airocean_faces[i] = { + vec_mult(m, &base_airocean_faces[i].p1), + vec_mult(m, &base_airocean_faces[i].p2), + vec_mult(m, &base_airocean_faces[i].p3), + }; } + } From 3f2f7c166db9b202d1d41dbb516805cacb4b318f Mon Sep 17 00:00:00 2001 From: Pierre Louvart Date: Sun, 10 Nov 2024 16:53:30 +0100 Subject: [PATCH 19/23] - Add tests for +orient=horizontal --- test/gie/builtins.gie | 102 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) diff --git a/test/gie/builtins.gie b/test/gie/builtins.gie index 860634122d..55ec747dac 100644 --- a/test/gie/builtins.gie +++ b/test/gie/builtins.gie @@ -1269,6 +1269,108 @@ expect 147.63769509437498 15.818879769693432 accept 0 0 expect failure +------------------------------------------------------------------------------- +operation +proj=airocean +orient=horizontal +ellps=GRS80 +------------------------------------------------------------------------------- +tolerance 0.1 mm +accept 23 29 +expect 13445038.138395257 13501788.272168122 +accept 71 47 +expect 13469321.22856612 9691162.310202885 +accept 146 75 +expect 16758940.408539249 7725947.54927852 +accept -77 60 +expect 20145508.681780424 9691320.12928607 +accept -26 34 +expect 16738437.29206201 15521444.12245347 +accept 29 -14 +expect 10002182.5715067 15508486.660989888 +accept 71 -24 +expect 6745544.686885769 9738408.304902693 +accept 97 10 +expect 10057167.426204873 7661719.142318802 +accept 169 35 +expect 16730877.466082027 3879364.926075886 +accept -151 13 +expect 23471357.831294097 3855457.9788894877 +accept -109 25 +expect 23405563.0692953 7677848.871802735 +accept -83 -10 +expect 26804332.00275987 9742444.815267786 +accept -42 -5 +expect 26833811.28608749 13531956.757129436 +accept -10 -35 +expect 33549702.824863963 13536077.88916722 +accept 155 -34 +expect 6754064.240713957 1878658.9644939895 +accept -157 -29 +expect 26849240.124435734 1910219.231732698 +accept -109 -46 +expect 30129033.055957943 7700118.744271104 +accept -32 -75 +expect 33546604.455268644 9700086.856617931 +accept 99 -49 +expect 3917784.3424766464 4762210.008135711 +accept 114 -72 +expect 35743305.80505435 7700279.4959819885 +accept 143 -9 +expect 8926966.62914534 3215425.0474725077 +accept 123 7 +expect 10051797.28039541 5233302.981464034 +accept 148 16 +expect 14580207.201673953 2606103.035139274 + +direction inverse +accept 13400000 13500000 +except 23.38101068889326 28.613417194415643 +accept 13500000 9700000 +except 70.7802085458946 47.32843064371629 +accept 16800000 7700000 +except 148.10287981014486 74.96215466929766 +accept 20100000 9700000 +except -76.54133367948258 60.47011202998829 +accept 16700000 15500000 +except -25.402102068835045 34.038552037244074 +accept 10000000 15500000 +except 29.093669699644725 -13.960206072298153 +accept 6700000 9700000 +except 71.39502686260073 -24.572248553401327 +accept 10100000 7700000 +except 96.5989815165186 10.519796023191507 +accept 16700000 3900000 +except 168.5332718079372 35.173954828735 +accept 23500000 3900000 +except -150.39605816066683 12.8877109123015 +accept 23400000 7700000 +except -108.73571568748467 25.097014645260366 +accept 26800000 9700000 +except -83.48998116482932 -9.98785063836723 +accept 26800000 13500000 +except -42.42285754320226 -4.68222695695373 +accept 33500000 13500000 +except -10.755116011311662 -35.31735130903507 +accept 6800000 1900000 +except 154.76504012111806 -33.459989505310055 +accept 26800000 1900000 +except -157.35174676612695 -28.520246787409704 +accept 30100000 7700000 +except -108.93360340357648 -45.67479874983113 +accept 33500000 9700000 +except -33.77121014744891 -74.7525617691622 +accept 3900000 4800000 +except 98.35846530162404 -48.821443120344455 +accept 35700000 7700000 +except 114.65803383575242 -72.41879106994266 +accept 8900000 3200000 +except 143.1150335988881 -9.311213341657826 +accept 10100000 5200000 +except 123.42786172727975 7.474238270475286 +accept 14600000 2600000 +except 148.23146560737166 16.00099471760901 +accept 0 0 +expect failure + + =============================================================================== # Eckert I # PCyl., Sph. From 95161187386125b7f54d3a8751b2cf978d7bb561 Mon Sep 17 00:00:00 2001 From: Pierre Louvart Date: Sun, 10 Nov 2024 17:14:41 +0100 Subject: [PATCH 20/23] Update docs/source/operations/projections/airocean.rst Add complete information about available forms for airocean projection Co-authored-by: Mike Taves --- docs/source/operations/projections/airocean.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/operations/projections/airocean.rst b/docs/source/operations/projections/airocean.rst index 605cafdc8f..391be9a007 100644 --- a/docs/source/operations/projections/airocean.rst +++ b/docs/source/operations/projections/airocean.rst @@ -18,7 +18,7 @@ was formally mathematically defined :cite:`Gray1995`. +---------------------+----------------------------------------------------------+ | **Classification** | Polyhedral, equal area | +---------------------+----------------------------------------------------------+ -| **Available forms** | Forward and inverse, spherical | +| **Available forms** | Forward and inverse, spherical and ellipsoidal | +---------------------+----------------------------------------------------------+ | **Defined area** | Global | +---------------------+----------------------------------------------------------+ From d76c738f6636958ea57f78ae909c57e80e683290 Mon Sep 17 00:00:00 2001 From: Pierre Louvart Date: Sun, 10 Nov 2024 17:15:13 +0100 Subject: [PATCH 21/23] Update docs/source/references.bib Preserve title case for BibTeX Co-authored-by: Mike Taves --- docs/source/references.bib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/references.bib b/docs/source/references.bib index f9670052c2..ece00af2e5 100644 --- a/docs/source/references.bib +++ b/docs/source/references.bib @@ -74,7 +74,7 @@ @TechReport{Deakin2004 } @Article{Gray1995, - Title = {Exact Transformation Equations for Fuller's World Map}, + Title = {Exact Transformation Equations for {Fuller's World Map}}, Author = {Robert W. Gray}, Journal = {Cartographica}, Year = {1995}, From 75885d6fc847ebccad5aea5355444e5412d27020 Mon Sep 17 00:00:00 2001 From: Pierre Louvart Date: Sun, 10 Nov 2024 17:20:43 +0100 Subject: [PATCH 22/23] - Correct typo in Builtins test. except becomes expect --- test/gie/builtins.gie | 46 +++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/test/gie/builtins.gie b/test/gie/builtins.gie index 55ec747dac..c415a0ab19 100644 --- a/test/gie/builtins.gie +++ b/test/gie/builtins.gie @@ -1322,51 +1322,51 @@ expect 14580207.201673953 2606103.035139274 direction inverse accept 13400000 13500000 -except 23.38101068889326 28.613417194415643 +expect 23.38101068889326 28.613417194415643 accept 13500000 9700000 -except 70.7802085458946 47.32843064371629 +expect 70.7802085458946 47.32843064371629 accept 16800000 7700000 -except 148.10287981014486 74.96215466929766 +expect 148.10287981014486 74.96215466929766 accept 20100000 9700000 -except -76.54133367948258 60.47011202998829 +expect -76.54133367948258 60.47011202998829 accept 16700000 15500000 -except -25.402102068835045 34.038552037244074 +expect -25.402102068835045 34.038552037244074 accept 10000000 15500000 -except 29.093669699644725 -13.960206072298153 +expect 29.093669699644725 -13.960206072298153 accept 6700000 9700000 -except 71.39502686260073 -24.572248553401327 +expect 71.39502686260073 -24.572248553401327 accept 10100000 7700000 -except 96.5989815165186 10.519796023191507 +expect 96.5989815165186 10.519796023191507 accept 16700000 3900000 -except 168.5332718079372 35.173954828735 +expect 168.5332718079372 35.173954828735 accept 23500000 3900000 -except -150.39605816066683 12.8877109123015 +expect -150.39605816066683 12.8877109123015 accept 23400000 7700000 -except -108.73571568748467 25.097014645260366 +expect -108.73571568748467 25.097014645260366 accept 26800000 9700000 -except -83.48998116482932 -9.98785063836723 +expect -83.48998116482932 -9.98785063836723 accept 26800000 13500000 -except -42.42285754320226 -4.68222695695373 +expect -42.42285754320226 -4.68222695695373 accept 33500000 13500000 -except -10.755116011311662 -35.31735130903507 +expect -10.755116011311662 -35.31735130903507 accept 6800000 1900000 -except 154.76504012111806 -33.459989505310055 +expect 154.76504012111806 -33.459989505310055 accept 26800000 1900000 -except -157.35174676612695 -28.520246787409704 +expect -157.35174676612695 -28.520246787409704 accept 30100000 7700000 -except -108.93360340357648 -45.67479874983113 +expect -108.93360340357648 -45.67479874983113 accept 33500000 9700000 -except -33.77121014744891 -74.7525617691622 +expect -33.77121014744891 -74.7525617691622 accept 3900000 4800000 -except 98.35846530162404 -48.821443120344455 +expect 98.35846530162404 -48.821443120344455 accept 35700000 7700000 -except 114.65803383575242 -72.41879106994266 +expect 114.65803383575242 -72.41879106994266 accept 8900000 3200000 -except 143.1150335988881 -9.311213341657826 +expect 143.1150335988881 -9.311213341657826 accept 10100000 5200000 -except 123.42786172727975 7.474238270475286 +expect 123.42786172727975 7.474238270475286 accept 14600000 2600000 -except 148.23146560737166 16.00099471760901 +expect 148.23146560737166 16.00099471760901 accept 0 0 expect failure From 18f9d9eafa6693a32ae0391501b174b79e70345b Mon Sep 17 00:00:00 2001 From: Pierre Louvart Date: Sun, 10 Nov 2024 18:36:57 +0100 Subject: [PATCH 23/23] - Document +orient option --- docs/source/operations/projections/airocean.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/source/operations/projections/airocean.rst b/docs/source/operations/projections/airocean.rst index 391be9a007..e70e538b6f 100644 --- a/docs/source/operations/projections/airocean.rst +++ b/docs/source/operations/projections/airocean.rst @@ -50,6 +50,12 @@ Parameters .. note:: All parameters are optional for the projection. +.. option:: +orient= + + Can be set to either ``vertical`` or ``horizontal``. + + *Defaults to vertical* + .. include:: ../options/lon_0.rst .. include:: ../options/R.rst