519 lines
14 KiB
C++
519 lines
14 KiB
C++
// Boost.Geometry
|
|
// Unit Test
|
|
|
|
// Copyright (c) 2019 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_DISTANCE_CROSS_TRACK_CASES_HPP
|
|
#define BOOST_GEOMETRY_TEST_DISTANCE_CROSS_TRACK_CASES_HPP
|
|
|
|
struct coordinates
|
|
{
|
|
double lon;
|
|
double lat;
|
|
};
|
|
|
|
struct expected_results
|
|
{
|
|
coordinates p1; //1st point of segment
|
|
coordinates p2; //2nd point of segment
|
|
coordinates p3; //point to compute distance from segment
|
|
double reference; // karney or vincenty
|
|
double vincenty_bisection;
|
|
double vincenty;
|
|
double thomas_bisection;
|
|
double thomas;
|
|
double andoyer_bisection;
|
|
double andoyer;
|
|
double spherical;
|
|
};
|
|
|
|
expected_results expected[] =
|
|
{
|
|
{
|
|
{ 0, 0 },{ 1, 1 },{ 0, 1 },
|
|
78442.119873761606868,
|
|
78442.119873761606868,
|
|
78442.119873761592316,
|
|
78442.118218914125464,
|
|
78442.118218840550981,
|
|
78440.792929481409374,
|
|
78440.792934224984492,
|
|
78618.810427426869865
|
|
} , {
|
|
{ 0, 0 },{ 1, 1 },{ 1, 0 },
|
|
78453.98942845336569,
|
|
78453.98942845336569,
|
|
78453.98942845336569,
|
|
78453.990728736869642,
|
|
78453.990728682110785,
|
|
78453.54172924211889,
|
|
78453.541733992169611,
|
|
78630.786885094828904
|
|
} , {
|
|
{ 10, 15 },{ 30, 15 },{ 15, 80 },
|
|
7204174.4886689241976,
|
|
7204174.4886689241976,
|
|
7204174.4886689241976,
|
|
7204174.4785777237266,
|
|
7204174.4785777227953,
|
|
7204194.9162934627384,
|
|
7204194.9162937803194,
|
|
7205729.8545973757282
|
|
} , {
|
|
{ 10, 15 },{ 30, 15 },{ 15, 10 },
|
|
571412.78107940487098,
|
|
571412.78107940487098,
|
|
571412.78107940475456,
|
|
571412.77996722259559,
|
|
571412.77996722620446,
|
|
571408.51759251800831,
|
|
571408.51759251928888,
|
|
574226.66911869682372
|
|
} , {
|
|
{ 10, 15 },{ 30, 15 },{ 5, 10 },
|
|
775316.40275838342495,
|
|
775316.40275838342495,
|
|
775316.40275838342495,
|
|
775316.40098149504047,
|
|
775316.40098149504047,
|
|
775309.55307898123283,
|
|
775309.55307898123283,
|
|
776861.2271022957284
|
|
} , {
|
|
{ 10, 15 },{ 30, 15 },{ 35, 10 },
|
|
775316.40275838342495,
|
|
775316.40275838342495,
|
|
775316.40275838342495,
|
|
775316.40098149504047,
|
|
775316.40098149504047,
|
|
775309.55307898123283,
|
|
775309.55307898123283,
|
|
776861.22710229584482
|
|
} , {
|
|
{ 2, 2 },{ 3, 2 },{ 3.5, 3 },
|
|
123770.82713049851009,
|
|
123770.82713049851009,
|
|
123770.82713049851009,
|
|
123770.82682863833907,
|
|
123770.82682863833907,
|
|
123769.27773668900772,
|
|
123769.27773668900772,
|
|
124295.90554402528505
|
|
} , {
|
|
{ 2, 2 },{ 3, 2 },{ 1.5, 3 },
|
|
123770.82713049851009,
|
|
123770.82713049851009,
|
|
123770.82713049851009,
|
|
123770.82682863833907,
|
|
123770.82682863833907,
|
|
123769.27773668900772,
|
|
123769.27773668900772,
|
|
124295.90554402528505
|
|
} , {
|
|
{ 2, 2 },{ 3, 2 },{ 2, 3 },
|
|
110576.41139532231318,
|
|
110576.41139532231318,
|
|
110576.41139532238594,
|
|
110576.41139116862905,
|
|
110576.41139118297724,
|
|
110575.1780244907568,
|
|
110575.17802451056195,
|
|
111195.07457694716868
|
|
} , {
|
|
{ 2, 2 },{ 3, 2 },{ 3, 3 },
|
|
110576.41139532234229,
|
|
110576.41139532234229,
|
|
110576.41139532234229,
|
|
110576.41139242639474,
|
|
110576.41139243228827,
|
|
110575.17802478378871,
|
|
110575.17802474705968,
|
|
111195.07457694721234
|
|
} , {
|
|
{ 2, 2 },{ 3, 2 },{ 3.5, 1 },
|
|
123784.75399867084343,
|
|
123784.75399867084343,
|
|
123784.75399867084343,
|
|
123784.75369734384003,
|
|
123784.75369734384003,
|
|
123783.19294134904339,
|
|
123783.19294134904339,
|
|
124311.043335600305
|
|
} , {
|
|
{ 2, 2 },{ 3, 2 },{ 1.5, 1 },
|
|
123784.75399867084343,
|
|
123784.75399867084343,
|
|
123784.75399867084343,
|
|
123784.75369734384003,
|
|
123784.75369734384003,
|
|
123783.19294134904339,
|
|
123783.19294134904339,
|
|
124311.043335600305
|
|
} , {
|
|
{ 2, 2 },{ 3, 2 },{ 2, 1 },
|
|
110575.06481432798319,
|
|
110575.06481432798319,
|
|
110575.06481432798319,
|
|
110575.06688667042181,
|
|
110575.06688667042181,
|
|
110573.82008001199574,
|
|
110573.82008001199574,
|
|
111195.07973463158123
|
|
} , {
|
|
{ 2, 2 },{ 3, 2 },{ 3, 1 },
|
|
110575.06481432798319,
|
|
110575.06481432798319,
|
|
110575.06481432798319,
|
|
110575.06688667042181,
|
|
110575.06688667042181,
|
|
110573.82008001199574,
|
|
110573.82008001199574,
|
|
111195.07973463158123
|
|
} , {
|
|
{ 2, -2 },{ 3, -2 },{ 3, -1 },
|
|
110575.06481432798319,
|
|
110575.06481432798319,
|
|
110575.06481432798319,
|
|
110575.06688667042181,
|
|
110575.06688667042181,
|
|
110573.82008001199574,
|
|
110573.82008001199574,
|
|
111195.07973463158123
|
|
} , {
|
|
{ 220, 2 },{ 3, 2 },{ 3, 1 },
|
|
110575.06481432798319,
|
|
110575.06481432798319,
|
|
110575.06481432798319,
|
|
110575.06688667042181,
|
|
110575.06688667042181,
|
|
110573.82008001199574,
|
|
110573.82008001199574,
|
|
111195.07973463158123
|
|
} , //antimeridian
|
|
{
|
|
{ 220, 2 },{ 3, 2 },{ 220, 1 },
|
|
110575.06481432798319,
|
|
110575.06481432798319,
|
|
110575.06481432798319,
|
|
110575.06688667042181,
|
|
110575.06688667042181,
|
|
110573.82008001199574,
|
|
110573.82008001199574,
|
|
111195.07973463158123
|
|
} , //meridian
|
|
{
|
|
{ 2, 2 },{ 2, 4 },{ 2.5, 2 },
|
|
55626.064900081859,
|
|
55626.064900081859,
|
|
55626.064900081867,
|
|
55626.06490013907,
|
|
55626.064900107223,
|
|
55626.065279513903,
|
|
55626.065279463517,
|
|
55563.670489238102
|
|
} , {
|
|
{ 2, 2 },{ 2, 4 },{ 2.5, 5 },
|
|
123722.15822285149,
|
|
123722.15822285149,
|
|
123722.15822285149,
|
|
123722.15791917888,
|
|
123722.15791917888,
|
|
123720.64936755209,
|
|
123720.64936755209,
|
|
124243.00560435352
|
|
} , {
|
|
{ 2, 2 },{ 2, 4 },{ 2.5, 3 },
|
|
55583.973320908837,
|
|
55583.973320908837,
|
|
55583.97332090883,
|
|
55583.973320941128,
|
|
55583.973320900877,
|
|
55583.97416950998,
|
|
55583.974169663285,
|
|
55521.343440931159
|
|
} , {
|
|
{ 0, 40 },{ 180, 80 },{ 0, 20 },
|
|
2217162.7761786841,
|
|
2217162.7761786841,
|
|
2217162.7761786841,
|
|
2217162.7361901053,
|
|
2217162.7361901053,
|
|
2217171.9891410829,
|
|
2217171.9891410829,
|
|
2223901.5946926316
|
|
} , {
|
|
{ 0, 40 },{ 0, 80 },{ 0, 20 },
|
|
2217162.7761786841,
|
|
2217162.7761786841,
|
|
2217162.7761786841,
|
|
2217162.7361901053,
|
|
2217162.7361901053,
|
|
2217171.9891410829,
|
|
2217171.9891410829,
|
|
2223901.5946926316
|
|
} , {
|
|
{ 0, 0 },{ 0, 90 },{ 0, 80 },
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0
|
|
} , {
|
|
{ 0, 0 },{ 0, 90 },{ 1, 80 },
|
|
19392.530629092114,
|
|
19392.530629092114,
|
|
19392.530629092107,
|
|
19392.53062953979,
|
|
19392.530629094777,
|
|
19392.328788289116,
|
|
19392.328788113067,
|
|
19307.872231041671
|
|
} , {
|
|
{ 1, -1 }, { 1, 0 },{ 2, 0 },
|
|
111319.4907932264,
|
|
111319.4907932264,
|
|
111319.4907932264,
|
|
111319.49079334327,
|
|
111319.49079326246,
|
|
111319.49079326226,
|
|
111319.49079326246,
|
|
111195.07973463158
|
|
} , //equator
|
|
{
|
|
{ 2, 0 },{ 3, 0 },{ 0, 0 },
|
|
222638.98158645280637,
|
|
222638.98158645280637,
|
|
222638.98158645280637,
|
|
222638.98158654122381,
|
|
222638.98158654122381,
|
|
222638.98158654125291,
|
|
222638.98158654125291,
|
|
222390.15946926316246
|
|
} , {
|
|
{ 2, 0 },{ 3, 0 },{ 2.5, 3 },
|
|
331725.86989626317518,
|
|
331725.86989626317518,
|
|
331725.86989626317518,
|
|
331725.87608870770782,
|
|
331725.87608870770782,
|
|
331722.14136137196328,
|
|
331722.14136137196328,
|
|
333585.2392038948019
|
|
} , {
|
|
{ 2, 0 },{ 3, 0 },{ 2, 0 },
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0
|
|
} , {
|
|
{ 2, 0 },{ 3, 0 },{ 3, 0 },
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0
|
|
} , {
|
|
{ 2, 0 },{ 3, 0 },{ 2.5, 0 },
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0
|
|
} , {
|
|
{ 2, 0 },{ 3, 0 },{ 3.5, 3 },
|
|
336358.80734967370518,
|
|
336358.80734967370518,
|
|
336358.80734967370518,
|
|
336358.80718013871228,
|
|
336358.80718013871228,
|
|
336354.9292840428534,
|
|
336354.9292840428534,
|
|
338182.45508443051949
|
|
} , //segment pass by pole
|
|
/* those cases have expected very large reference errors for spherical
|
|
* {
|
|
{ 0, 0 },{ 180, 0 },{ 0, 90 },
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
10007557.176116843
|
|
} , {
|
|
{ 0, 0 },{ 180, 0 },{ 80, 89 },
|
|
109996.81571864839,
|
|
109996.81571864839,
|
|
109996.81571864836,
|
|
109996.81571864968,
|
|
109996.81571858823,
|
|
109995.58014976831,
|
|
109995.58014972134,
|
|
9896362.096382184,
|
|
}*/ // short distance to segment
|
|
{
|
|
{ 0.5, 0 },{ 175.5, 0 },{ 90, 1e-3 },
|
|
110.57427582169922,
|
|
110.57427582169922,
|
|
110.57427582169922,
|
|
110.57427792305019,
|
|
110.57427792305019,
|
|
110.57302444153535,
|
|
110.57302444153535,
|
|
111.19507973475258
|
|
} , {
|
|
{ 0.5, 0 },{ 175.5, 0 },{ 90, 1e-8 },
|
|
0.0011057427582158647,
|
|
0.0011057427582158647,
|
|
0.0011057427582158647,
|
|
0.0011057427792293744,
|
|
0.0011057427792293744,
|
|
0.0011057302444142166,
|
|
0.0011057302444142166,
|
|
0.0011119503057618657
|
|
} , {
|
|
// mysql Bug #29545865
|
|
{ -16.42203, -7.52882 },{ 4.89998, -6.15568 },{ 3.32696, -6.29345 },
|
|
481.73908764883043,
|
|
481.73908764883043,
|
|
481.73908764873721,
|
|
481.74578258317035,
|
|
481.74576160418479,
|
|
480.34603374821353,
|
|
480.34602624448405,
|
|
508.0731159303939
|
|
} , { // same segment but the point is from the other side
|
|
{ -16.42203, -7.52882 },{ 4.89998, -6.15568 },{ 3.3262, -6.28451},
|
|
510.48273138899611,
|
|
510.48273138899611,
|
|
510.48273138908797,
|
|
510.47605556026537,
|
|
510.47605888246693,
|
|
511.86547773473234,
|
|
511.86548088955459,
|
|
489.55321195417821
|
|
} , {
|
|
{ -16.42203, -7.52882 },{ 4.89998, -6.1556 },{ 3.32696, -6.2889 },
|
|
11.511229576046485,
|
|
11.511229576046485,
|
|
11.51122957617916,
|
|
11.50474785537202,
|
|
11.504394870933424,
|
|
12.898977232559222,
|
|
12.898968261046516,
|
|
12.130727461169611
|
|
} , {
|
|
{ -16.42203, -7.52882 },{ 4.89998, -6.1556 },{ 3.32696, -6.28895 },
|
|
6.0009073659133909,
|
|
6.0009073659133909,
|
|
6.0009073659387502,
|
|
5.9949823734311893,
|
|
5.9941706378723278,
|
|
7.3883629173067344,
|
|
7.3889362323779535,
|
|
17.671122161310702
|
|
} , {
|
|
// mysql Bug #29545865
|
|
//{ 8.65279, -2.71668 },
|
|
{ -7.13372, 8.35583 },{ -9.09998, -1.22625 },{ -7.35561, 7.2137 },
|
|
1671.2894143458557,
|
|
1671.2894143458557,
|
|
1671.2894143458786,
|
|
1671.2962894596874,
|
|
1671.296284713379,
|
|
1677.2323385335374,
|
|
1677.232338307874,
|
|
1668.697566121507
|
|
}
|
|
#ifdef GEOMETRY_TEST_INCLUDE_FAILING_TESTS
|
|
, {
|
|
{ 0, 10 }, { 20, 10 }, { 18.00000000000003908, 10.054676080707787733 },
|
|
0.0011398027228318023,
|
|
0.0011398027228318023,
|
|
0.0060057460922939617,
|
|
0,
|
|
0,
|
|
0,
|
|
0.30055333992381872,
|
|
39.88666722147299
|
|
} , {
|
|
{ 0, 10 }, { 20, 10 }, { 18, 10.054678231628329854 },
|
|
0.23669789852514209,
|
|
0.23669789852514209,
|
|
0.23669789883426567,
|
|
0.25069019912476698,
|
|
0.23204712322540744,
|
|
0.26712030782599411,
|
|
0.40206187237490559,
|
|
40.125767043637062
|
|
} , {
|
|
{ 0, 10 }, { 20, 10 },{ 17.999999999999950262, 10.054676091041047314 },
|
|
2.7930744094407741e-06,
|
|
2.7930744094407741e-06,
|
|
0.0058967770186943418,
|
|
0,
|
|
0,
|
|
0,
|
|
0.30055160527904862,
|
|
39.887815883329125
|
|
}
|
|
#endif
|
|
, // large distance to segment
|
|
{
|
|
{ 0.5, 0 }, { 175.5, 0 }, { 90, 90 },
|
|
10001965.729311479,
|
|
10001965.729311479,
|
|
10001965.729311479,
|
|
10001965.729311479,
|
|
10001965.729311479,
|
|
10001958.678477952,
|
|
10001958.678477952,
|
|
10007557.108987356
|
|
} , {
|
|
{ 0.5, -89 }, { 175.5, -89 }, { 90, 90 },
|
|
19892237.59370932,
|
|
19892237.59370932,
|
|
19892237.59370932,
|
|
19892237.570068691,
|
|
19892237.570068691,
|
|
19892224.746673118,
|
|
19892224.746673118,
|
|
19903919.272499084
|
|
} , //acos issue solved
|
|
{
|
|
{ 90, 0 }, { 0, 1.000005 }, {0, 90},
|
|
9891389.2448064201,
|
|
9891389.2448064201,
|
|
9891389.2448064163,
|
|
9891370.4775929395,
|
|
9891370.4775932431,
|
|
9891383.4444574378,
|
|
9891383.4444574378,
|
|
9896361.5404068138
|
|
}
|
|
};
|
|
|
|
size_t const expected_size = sizeof(expected) / sizeof(expected_results);
|
|
|
|
#endif // BOOST_GEOMETRY_TEST_DISTANCE_CROSS_TRACK_CASES_HPP
|