geometry/test/formulas/vertex_longitude_cases.hpp
2017-05-05 15:57:36 +03:00

458 lines
9.6 KiB
C++

// Boost.Geometry
// Unit Test
// Copyright (c) 2017 Oracle and/or its affiliates.
// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_GEOMETRY_TEST_VERTEX_LONGITUDE_CASES_HPP
#define BOOST_GEOMETRY_TEST_VERTEX_LONGITUDE_CASES_HPP
struct coordinates
{
double lon;
double lat;
};
struct expected_result
{
double lon;
double lat;
};
struct expected_results
{
coordinates p1;
coordinates p2;
double andoyer;
double thomas;
double vincenty;
double spherical;
};
expected_results expected[] =
{
{ //ascenting segments (wrt pole)
{ 1, 1 },{ 100, 2 },
66.25553538,
66.25594187,
66.25594273,
66.39744208
},{
{ 1, 1 },{ 90, 2 },
64.09051435,
64.09082287,
64.09082352,
64.24414382
},{
{ 0, 1 },{ 50, 1 },
24.99994265,
24.99999906,
25,
25
},{
{ 0, 1 },{ 50, 1.1 },
30.79039009,
30.79049758,
30.79049828,
30.83209056
},{
{ 0, 1 },{ 50, 1.2 },
35.95625867,
35.95640445,
35.95640493,
36.0343576
},{
{ 0, 1 },{ 50, 1.3 },
40.52204781,
40.52222064,
40.52222094,
40.63120292
},{
{ 0, 1 },{ 50, 1.4 },
44.53768967,
44.53788045,
44.53788061,
44.6729585
},{
{ 0, 1 },{ 50, 1.5 },
48.06382018,
48.0640219,
48.06402195,
48.22088385
},{
{ 0, 1 },{ 50, 1.6 },
50,
50,
50,
50
},{ //descending segment (wrt pole)
{ 50, 1 },{ 0, 1.1 },
19.20950181,
19.20950054,
19.20950172,
19.16790944
},{
{ 50, 1 },{ 0, 1.2 },
14.04365003,
14.04359367,
14.04359507,
13.9656424
},{
{ 50, 1 },{ 0, 1.3 },
9.477883847,
9.477777483,
9.477779056,
9.368797077
},{
{ 50, 1 },{ 0, 1.4 },
5.462267984,
5.462117673,
5.462119386,
5.327041497
},{
{ 50, 1 },{ 0, 1.5 },
1.936164363,
1.935976226,
1.93597805,
1.779116148
},{
{ 3, 5 },{ 150, 0},
60.29182988,
60.29785309,
60.29785255,
60
},{
{ 3, 5 },{ 150, 0.5},
63.11344576,
63.11900045,
63.11899891,
62.87000766
},{
{ 3, 5 },{ 150, 1},
65.51880171,
65.52391866,
65.52391623,
65.31813729
},{
{ 3, 5 },{ 150, 5},
76.49727275,
76.50000657,
76.5,
76.5
},{ //segments parallel to equator
{ 0, 1 },{ 4, 1 },
1.999999973,
1.999999925,
2,
2
},{
{ 0, 1 },{ 10, 1 },
4.999999569,
4.999999812,
5,
5
},{
{ 0, 1 },{ 60, 1 },
29.9998978,
29.99999887,
30,
30
},{
{ 0, 1 },{ 90, 1 },
44.99960266,
45.22272756,//thomas low accuracy
45,
45
},{
{ 0, 1 },{ 120, 1 },
59.99878311,
59.99999778,
60,
60
},{
{ 0, 1 },{ 180, 1 },
90,
90,
90,
90
},{
{ 0, 1 },{ 270, 1 },
-44.99960266,
-45.08931472,//thomas low accuracy
-45,
-45
},{
{ 0, 1 },{ 290, 1 },
-34.9998314,
-34.99999868,
-35,
-35
},{
{ 0, 1 },{ 150, 1 },
74.99598515,
74.99999794,
75,
75
},{
{ 0, 1 },{ 180, 1 },
90,
90,
90,
90
},{ //in equator vertex is any point on segment
{ 1, 0 },{ 10, 0 },
1,
1,
1,
1
},{// one point on equator (descending)
{ 150, 0},{ 3, 1 },
60.29513726,
60.30158943,
60.3015947,
60
},{// one point on equator (ascending)
{ 3, 0 },{ 150, 1},
92.69840523,
92.6984053,
92.6984053,
93
},{ //meridian
{ 1, 1 },{ 1, 2 },
1,
1,
1,
1
},{ //nearly meridian
{ 1, 1 },{ 1.001, 2 },
1.001,
1.001,
1.001,
1.001
},{ //vertex is a segment's endpoint
{ 1, 1 },{ 10, 2 },
10,
10,
10,
10
},{
{ 10, 1 },{ 1, 2 },
1,
1,
1,
1
},{ //South hemisphere, ascending
{ 0, -1 },{ 50, -1.4 },
44.53768958,
44.53788035,
44.53788052,
44.6729585
},{ //South hemisphere, descending
{ 0, -1.5 },{ 50, -1 },
1.936164356,
1.935976219,
1.935978042,
1.779116148
},{ //South hemisphere, same latitude
{ 0, -1 },{ 50, -1 },
24.99994261,
24.99999901,
24.99999995,
25
},{//Both hemispheres, vertex on the northern
//A desc vertex north
{ 3, 5 },{ 150, -3},
27.357069,
27.36422922,
27.36423549,
26.74999989
},{//B asc vertex north
{ 3, -3 },{ 150, 5},
125.6403436,
125.6357677,
125.6357659,
126.2500001
},{//C desc vertex south
{ 3, -5 },{ 150, 3},
27.3570679,
27.36422812,
27.36423439,
26.74999989
},{//D asc vertex south
{ 3, 3 },{ 150, -5},
125.6403423,
125.6357664,
125.6357645,
126.2500001
},{//E asc vertex south
{ 3, 3 },{ 184, -5},
-88.00743796,
-88.0660268,
-88.0558747,
-88.49315894
},{
{ 3, 5 },{ 150, -3.5},
17.96722293,
17.97322407,
17.97323051,
17.3742464
},{
{ 3, 5 },{ 150, -1},
52.9706038,
52.97759463,
52.9775964,
52.56504545
},{ //Both hemispheres, vertex on the southern
{ 3, 3},{ 5, -5},
5,
5,
5,
5
},{
{ 3, -5 },{ 150, 1}, //symmetric to { 3, 5 },{ 150, -1}
52.97060093,
52.97759176,
52.97759353,
52.56504545
},{// fix p1 lon, lat and p2 lon and vary p2 lat
{ 3, 5 },{ 150, 1},
65.51880171,
65.52391866,
65.52391623,
65.31813729
},{
{ 3, 5 },{ 150, 0},
60.29182988,
60.29785309,
60.29785255,
60
},{
{ 3, 5 },{ 150, -0.1},
59.66911673,
59.67523649,
59.67523616,
59.36690727
},{
{ 3, 5 },{ 150, -1},
52.9706038,
52.97759463,
52.9775964,
52.56504545
},{
{ 3, 5 },{ 150, -4.15},
4.481947557,
4.485467841,
4.485473295,
3.981178967
},{
{ 3, 5 },{ 150, -4.2},
3,
3,
3,
3
},{//symmetry of geodesics:
// (i) case A same as C and B same as D
// (ii) longitude diff between vertex and p2 in A, C equals
// longitude diff between vertex and p1 in B, D by symmetry
// case (A)
{ 0, 5 },{ 30, 5.5},
25.06431998,
25.0644277,
25.06442787,
25.13253724
},{// case (B)
{ 0, 5.5 },{ 30, 5},
4.935667094,
4.935571216,
4.93557213,
4.867462762
},{// case (C)
{ 0, -5 },{ 30, -5.5},
25.06431885,
25.06442657,
25.06442674,
25.13253724
},{// case (D)
{ 0, -5.5 },{ 30, -5},
4.935666841,
4.935570963,
4.935571877,
4.867462762
},{//crossing meridian
{ -10, 1 },{ 50, 1.1},
24.68113946,
24.68127641,
24.68127733,
24.71605263
},{
{ 350, 1 },{ 50, 1.1},
24.68113946,
24.68127641,
24.68127733,
24.71605263
},{//crossing antimeridian
{ 130, 1 },{ 190, 1.1},
164.6811395,
164.6812764,
164.6812773,
164.7160526
},{
{ 130, 1 },{ -170, 1.1},
164.6811395,
164.6812764,
164.6812773,
164.7160526
},{//crossing meridian both hemispheres
{ -10, -5 },{ 150, 1},
55.61285835,
55.62727853,
55.62725182,
55.19943725
},{
{ 350, -5 },{ 150, 1},
55.6243632,
55.6272619,
55.627257,
55.1994373
},{//crossing anti-meridian both hemispheres
{ 90, -5 },{ 210, 1},
109.4997596,
109.5011987,
109.5012031,
109.1354089
},{
{ 90, -5 },{ -150, 1},
109.4997596,
109.5011987,
109.5012031,
109.1354089
},{
{ -150, -5 },{ 90, 1},
-169.4997596,
-169.5011987,
-169.5012031,
-169.1354089
},{
{ 90, 1 },{ 210, -5},
-169.5008004,
-169.5012037,
-169.501204,
-169.1354089
},{
{ 0, 1 },{ 120, -5},
100.4991996,
100.4987963,
100.498796,
100.8645911
}
};
size_t const expected_size = sizeof(expected) / sizeof(expected_results);
#endif // BOOST_GEOMETRY_TEST_VERTEX_LONGITUDE_CASES_HPP