458 lines
9.6 KiB
C++
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
|