123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518 |
- // 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
|