Opened 5 years ago
Last modified 4 years ago
#13522 assigned Bugs
Invalid empty result using boost::geometry::difference
Reported by: | Owned by: | Barend Gehrels | |
---|---|---|---|
Milestone: | To Be Determined | Component: | geometry |
Version: | Boost 1.66.0 | Severity: | Problem |
Keywords: | geometry difference | Cc: | henrik@… |
Description
Hello,
executing the following polygon difference operation sequence produces an obviously incorrect empty result. The first difference produces a (possibliy) valid result with a spike which might be the actual problem. The third difference with the previous result generates an empty result. The intermediate difference is required the reproduce this behaviour. Without it the result of the third difference is correct. Removing the spike from step one also solves the problem.
Code to reproduce this:
using point_type = boost::geometry::model::d2::point_xy<double>; using polygon = boost::geometry::model::polygon<point_type>; using multi_polygon = boost::geometry::model::multi_polygon<polygon>;
BoostGeometryBridge::Polygon2d_t Right[3]; BoostGeometryBridge::MultiPolygon2d_t Left[4];
boost::geometry::read_wkt("MULTIPOLYGON(((0.747399249902131135 -0.974867609298678328,0.744720465461241043 -0.984866128861542012,0.737400169703072983 -0.992186849248596014,0.72740024741975795 -0.994866631198703,0.169444950081761997 -0.994882813404528998,0.156263880981993009 -0.992649068186161054,0.144555091741144004 -0.986196591543298973,0.135626528763234999 -0.976246166252738967,0.0970341390445131069 -0.91515608670535098,0.0527935015388215009 -0.831873652851741974,0.0149278636239085008 -0.745505885364162957,-0.016349202846282801 -0.656539920475841976,-0.0408612872409169006 -0.56547754891590496,-0.0584701351532070993 -0.472832385681689005,-0.0690764281904878985 -0.379126973119241983,-0.0726203441553292944 -0.284889833651171986,-0.0690818944579700972 -0.19065248877542601,-0.058481036857029399 -0.0969464611485150035,-0.0408775628926898033 -0.00430027666216776031,-0.0163707606471800993 0.086763516577464006,0.0149011452653820004 0.17573129555438699,0.0527617733210207981 0.262101259307556012,0.0969975799226773933 0.345386259216249991,0.135586426022915013 0.406478577227274984,0.144514411807557003 0.416429520405822984,0.156222826750318011 0.422882676210660002,0.169403766258661992 0.42511718599825099,0.727359063596658029 0.425133368204076989,0.737359141304932963 0.422454166307816015,0.744679861691986966 0.415133870549649009,0.747359067455327319 0.405136098375181386,0.747329770868999987 1.43513394783313997,2.74732976755064007 1.43524915817017007,2.74708725756255978 5.64524915118547987,-2.74750006237453981 1.25999999251885009,-2.74749997944197011 -4.43500000748115042,0.747500020558034994 -4.43500000604748035,0.747399249902131135 -0.974867609298678328),(-2.49638915854706989 0.152811596222504009,-1.75719536363572004 1.80498971421238008,-1.01782283569549992 1.4741902811305001,-1.75234596398119002 -0.167548384003570999,-1.76762179055725999 -0.173243028570225999,-2.49638915854706989 0.152811596222504009)))", Left[0]);
boost::geometry::read_wkt("POLYGON((-1.57590744074229994 2.19505211912179998,-2.74750006237453981 1.25999999251885009,-2.74750004134586989 -0.184043917378418992,-1.76796680349592994 -0.184043903114115004,-1.74492840055212994 -0.175455463366190001,-1.00461083616106994 1.47923439340570995,-1.57590744074229994 2.19505211912179998))", Right[0]); boost::geometry::read_wkt("POLYGON((2.74708725756255001 5.64524915118547987, 1.48149582377297007 4.63517624723808019, 2.7471454369183701 4.6352491528611397, 2.74708725756255001 5.64524915118547987))", Right[1]); boost::geometry::read_wkt("POLYGON((-2.74749997944197011 -4.43500000748115042, -2.74750006237453981 1.25999999251885009, -3.11250006493298015 1.43568817247817004, -3.11249997689355018 -4.61000000763086959, -2.74749997944197011 -4.43500000748115042))", Right[2]);
for(int i = 0; i < 3; i++) {
boost::geometry::difference(Left[i], Right[i], Left[i + 1]);
}
Final result in Left[3] is empty.
Change History (3)
comment:1 by , 5 years ago
Status: | new → assigned |
---|
comment:2 by , 4 years ago
I have probably encountered the same problem, it might have to do with a problem in the boost::geometry::intersection function. In my testcase the result of the intersection between green and blue is (erroneously) equal to green.
Available on wandbox.org under permlink/ThHHAW13DOdHbgEx
This file is a "Hello, world!" in C++ language by GCC for wandbox. #include <iostream> #include <cstdlib> #include <boost/tuple/tuple.hpp> #include <boost/geometry.hpp> #include <boost/geometry/geometries/polygon.hpp> #include <boost/geometry/geometries/adapted/boost_tuple.hpp> #include <boost/foreach.hpp>
#include <boost/geometry.hpp> #include <boost/geometry/algorithms/assign.hpp> #include <boost/geometry/algorithms/union.hpp> #include <boost/geometry/geometries/point_xy.hpp> #include <boost/geometry/geometries/polygon.hpp> #include <boost/geometry/geometries/multi_polygon.hpp> #include <boost/geometry/algorithms/buffer.hpp> #include <boost/geometry/geometries/box.hpp> #include <boost/foreach.hpp>
using BoostPointT = boost::geometry::model::d2::point_xy<double>; using BoostCCWPolygonT = boost::geometry::model::polygon< BoostPointT, false>; using BoostMultiPolygonT = boost::geometry::model::multi_polygon< BoostCCWPolygonT>; using BoostBoxT = boost::geometry::model::box<BoostPointT>; using BoostLineStringT = boost::geometry::model::linestring<BoostPointT>; using BoostClosedRingT = boost::geometry::model::ring<BoostPointT, false, true>; using BoostSegmentT = boost::geometry::model::segment<BoostPointT>; using BoostReferringSegmentT = boost::geometry::model::referring_segment<BoostPointT>;
void test_boost_difference() {
BoostMultiPolygonT green, blue; boost::geometry::read_wkt("MULTIPOLYGON(((109.9985073 0.001497676134,109.9995457 0.0612420731,110.000004 0.08749948829,110 0.8867007527,110 1.886700753,110 2.886700753,110 3.886700753,110 4.886700753,110 5.886700753,110 6.886700753,110 7.886700753,110 8.886700753,110 9.886700753,110 10.88670075,110 11.88670075,110 12.88670075,110 13.88670075,110 14.88670075,110 15.88670075,110 16.88670075,110 17.88670075,110 18.88670075,110 19.88670075,110 20.88670075,110 21.88670075,110 22.88670075,110 23.88670075,110 24.88670075,110 25.88670075,110 26.88670075,110 27.88670075,110 28.88670075,110 29.88670075,110 30.88670075,110 31.88670075,110 32.88670075,110 33.88670075,110 34.88670075,110 35.88670075,110 36.88670075,110 37.88670075,110 38.88670075,110 39.88670075,110 40.88670075,110 41.88670075,110 42.88670075,110 43.88670075,110 44.88670075,110 45.88670075,110 46.88670075,110 47.88670075,110 48.88670075,110 49.88670075,110 50.88670075,110 51.88670075,110 52.88670075,110 53.88670075,110 54.88670075,110 55.88670075,110 56.88670075,110 57.88670075,110 58.88670075,110 59.88670075,110 60.88670075,110 61.88670075,110 62.88670075,110 63.88670075,110 64.88670075,110 65.88670075,110 66.88670075,110 67.88670075,110 68.88670075,110 69.88670075,110 70.88670075,110 71.88670075,110 72.88670075,110 73.88670075,110 74.88670075,110 75.88670075,110 76.88670075,110 77.88670075,110 78.88670075,110 79.88670075,110 80.88670075,110 81.88670075,110 82.88670075,110 83.88670075,110 84.88670075,110 85.88670075,110 86.88670075,110 87.88670075,110 88.88670075,110 89.88670075,110 90.88670075,110 91.88670075,110 92.88670075,110 93.88670075,110 94.88670075,110 95.88670075,110 96.88670075,110 97.88670075,110 98.88670075,110 99.88670075,110 100.8867008,110 101.8867008,110 102.8867008,110 103.8867008,110 104.8867008,110 105.8867008,110 106.8867008,110 107.8867008,110 108.8867008,110 109.8867008,110 110.8867008,110 111.8867008,110 112.8867008,110 113.8867008,110 114.5954041,110 114.8867008,110 115.5954041,110 115.8867008,110 116.5954041,110 116.8867008,110 117.5954041,110 117.8867008,110 118.5954041,110 118.8867008,110 119.5954041,109.9999967 119.9129178,109.9984991 119.9985007,109.9372206 119.9995725,109.9130371 119.9999947,109.1117617 120,108.820465 120,108.1117617 120,107.820465 120,107.1117617 120,106.820465 120,106.1117617 120,105.820465 120,105.1117617 120,104.820465 120,104.1117617 120,103.820465 120,102.820465 120,101.820465 120,100.820465 120,99.82046504 120,98.82046504 120,97.82046504 120,96.82046504 120,95.82046504 120,94.82046504 120,93.82046504 120,92.82046504 120,91.82046504 120,90.82046504 120,89.82046504 120,88.82046504 120,87.82046504 120,86.82046504 120,85.82046504 120,84.82046504 120,83.82046504 120,82.82046504 120,81.82046504 120,80.82046504 120,79.82046504 120,78.82046504 120,77.82046504 120,76.82046504 120,75.82046504 120,74.82046504 120,73.82046504 120,72.82046504 120,71.82046504 120,70.82046504 120,69.82046504 120,68.82046504 120,67.82046504 120,66.82046504 120,65.82046504 120,64.82046504 120,63.82046504 120,62.82046504 120,61.82046504 120,60.82046504 120,59.82046504 120,58.82046504 120,57.82046504 120,56.82046504 120,55.82046504 120,54.82046504 120,53.82046504 120,52.82046504 120,51.82046504 120,50.82046504 120,49.82046504 120,48.82046504 120,47.82046504 120,46.82046504 120,45.82046504 120,44.82046504 120,43.82046504 120,42.82046504 120,41.82046504 120,40.82046504 120,39.82046504 120,38.82046504 120,37.82046504 120,36.82046504 120,35.82046504 120,34.82046504 120,33.82046504 120,32.82046504 120,31.82046504 120,30.82046504 120,29.82046504 120,28.82046504 120,27.82046504 120,26.82046504 120,25.82046504 120,24.82046504 120,23.82046504 120,22.82046504 120,21.82046504 120,20.82046504 120,19.82046504 120,18.82046504 120,17.82046504 120,16.82046504 120,15.82046504 120,14.82046504 120,13.82046504 120,12.82046504 120,11.82046504 120,10.82046504 120,9.820465041 120,8.820465041 120,7.820465041 120,6.820465041 120,5.820465041 120,5.392080345 120,4.820465041 120,4.392080345 120,3.820465041 120,3.392080345 120,2.820465041 120,2.392080345 120,1.820465041 120,1.392080345 120,0.8204650409 120,0.3920803446 120,0.08685786452 119.9999928,0.001504965242 119.9984995,0.0002090355037 119.924707,0.0001763579247 119.9228349,4.457256991e-06 119.9127306,0 119.5276308,0 119.0992461,0 118.5276308,1.776356839e-15 118.0992461,0 117.5276308,0 117.0992461,0 116.5276308,0 116.0992461,0 115.5276308,0 115.0992461,0 114.5276308,0 114.0992461,0 113.5276308,-1.776356839e-15 112.5276308,1.776356839e-15 111.5276308,0 110.5276308,-1.776356839e-15 109.5276308,0 108.5276308,1.776356839e-15 107.5276308,0 106.5276308,-1.776356839e-15 105.5276308,0 104.5276308,0 103.5276308,0 102.5276308,0 101.5276308,0 100.5276308,0 99.52763083,0 98.52763083,0 97.52763083,0 96.52763083,0 95.52763083,0 94.52763083,0 93.52763083,0 92.52763083,0 91.52763083,0 90.52763083,0 89.52763083,0 88.52763083,0 87.52763083,0 86.52763083,0 85.52763083,0 84.52763083,0 83.52763083,0 82.52763083,0 81.52763083,0 80.52763083,0 79.52763083,0 78.52763083,0 77.52763083,0 76.52763083,0 75.52763083,0 74.52763083,0 73.52763083,0 72.52763083,0 71.52763083,0 70.52763083,0 69.52763083,0 68.52763083,0 67.52763083,0 66.52763083,0 65.52763083,0 64.52763083,0 63.52763083,0 62.52763083,0 61.52763083,0 60.52763083,0 59.52763083,0 58.52763083,0 57.52763083,0 56.52763083,0 55.52763083,0 54.52763083,0 53.52763083,0 52.52763083,0 51.52763083,0 50.52763083,0 49.52763083,0 48.52763083,0 47.52763083,0 46.52763083,0 45.52763083,0 44.52763083,0 43.52763083,0 42.52763083,0 41.52763083,0 40.52763083,0 39.52763083,0 38.52763083,0 37.52763083,0 36.52763083,0 35.52763083,0 34.52763083,0 33.52763083,0 32.52763083,0 31.52763083,0 30.52763083,0 29.52763083,0 28.52763083,0 27.52763083,0 26.52763083,0 25.52763083,0 24.52763083,0 23.52763083,0 22.52763083,0 21.52763083,0 20.52763083,0 19.52763083,0 18.52763083,0 17.52763083,0 16.52763083,0 15.52763083,0 14.52763083,0 13.52763083,0 12.52763083,0 11.52763083,0 10.52763083,0 9.527630834,0 8.527630834,0 7.527630834,0 6.527630834,0 5.527630834,0 5.404203613,0 4.527630834,0 4.404203613,0 3.527630834,0 3.404203613,0 2.527630834,0 2.404203613,0 1.527630834,0 1.404203613,0 0.5276308344,0 0.4042036128,-1.15983827e-07 0.08727532262,0.0003899881774 0.06492358486,0.001497273744 0.001498135305,0.0631716201 0.0004206157086,0.0873786732 -1.91997499e-06,0.765203372 1.776356839e-15,0.8886305936 0,1.765203372 0,1.888630594 8.67361738e-19,2.765203372 0,2.888630594 0,3.765203372 0,3.888630594 8.67361738e-19,4.765203372 0,4.888630594 0,5.765203372 0,5.888630594 0,6.765203372 0,7.765203372 0,8.765203372 0,9.765203372 0,10.76520337 0,11.76520337 0,12.76520337 0,13.76520337 0,14.76520337 0,15.76520337 0,16.76520337 0,17.76520337 0,18.76520337 0,19.76520337 0,20.76520337 0,21.76520337 0,22.76520337 0,23.76520337 0,24.76520337 0,25.76520337 0,26.76520337 0,27.76520337 0,28.76520337 0,29.76520337 0,29.91272302 0,29.99963042 0.001516926166,30.04657968 0.02544289189,30.16401313 0.0827216774,30.28045153 0.1407905759,30.32050195 0.1590475463,30.36030206 0.1784555204,30.47979629 0.2316618183,30.59805702 0.2855709281,30.63880797 0.3024554023,30.6791734 0.3204261845,30.79963124 0.3690898352,30.92052179 0.4191788123,30.96204927 0.4347101383,31.00280519 0.451181915,31.12581738 0.4959595975,31.24745297 0.5414514479,32.19006035 0.8753546188,32.23628347 0.8908166285,32.28276053 0.9076808739,32.40230405 0.946392289,32.52105963 0.9861430355,32.56818065 1.000106154,32.61483151 1.015214409,33.57142486 1.306640465,33.5830268 1.309956905,33.59439998 1.313609702,33.75108694 1.357965553,33.90704642 1.402519383,33.91857621 1.405381976,33.93025077 1.408682555,34.89704833 1.664226021,35.05186672 1.702269654,35.21183269 1.741992298,36.18640689 1.966057327,36.31588428 1.993455574,36.4465021 2.022223428,37.4266929 2.220278937,37.54202241 2.24149429,37.65756418 2.264111409,38.64213823 2.43907979,38.74442851 2.455421593,38.84679485 2.473262894,39.83478721 2.627765613,39.92448659 2.640193213,40.01382616 2.654106469,41.00445261 2.790705294,41.07995822 2.799777074,41.15540881 2.810351198,42.14799985 2.931854403,42.21523398 2.93889592,42.28254023 2.947399526,43.27668579 3.055448692,43.3367521 3.060918189,43.3965302 3.06774407,44.39190529 3.163808795,44.44518838 3.168014059,44.49859701 3.17352918,45.49494413 3.258924733,45.54232728 3.262153971,45.58986786 3.266605378,46.58698305 3.342508559,46.62925666 3.344985364,46.67140315 3.348575637,47.66912505 3.416036808,47.70658859 3.417913769,47.74418517 3.420828519,48.74238624 3.480783677,48.77544906 3.482190947,48.80911498 3.484567864,49.80769447 3.537850149,49.83613717 3.538870377,49.86486918 3.540736784,50.86373733 3.588301598,50.88914432 3.589067329,50.91409978 3.590572573,51.91319503 3.633101142,51.93579544 3.633668262,51.95824771 3.634917159,52.95752457 3.672940459,52.97749465 3.673351485,52.99782824 3.674392663,53.99725031 3.708385597,54.01493707 3.708678272,54.03330137 3.709546698,55.03283956 3.739934525,55.0490305 3.740144035,55.06508734 3.740862855,56.06471835 3.768025905,56.07934556 3.768167985,56.09355688 3.76876791,57.0932621 3.793047107,57.10639542 3.793136786,57.11905011 3.793640125,58.11881463 3.81534052,58.13027164 3.815389199,58.14187368 3.815814425,59.14168559 3.835208915,59.15231386 3.83522956,59.16230049 3.835587546,60.16215026 3.852920546,60.17145755 3.852919435,60.1805827 3.853223089,61.18046272 3.868712846,61.18859739 3.868696878,61.19694156 3.868954547,62.19684576 3.88279642,62.20388623 3.882770997,62.21157635 3.882989486,63.21149985 3.8953583,63.2182169 3.895324149,63.22466865 3.895512522,64.22460757 3.906564457,64.23051065 3.90652667,64.23637604 3.906687603,65.23632728 3.916562691,65.24167567 3.916522159,65.24684884 3.916661061,66.24680992 3.925483993,66.25181833 3.925440768,66.25621288 3.925562536,67.25618181 3.933445172,67.26022312 3.933406493,67.26458538 3.933507885,68.26456058 3.940550164,68.26818874 3.94051239,68.27207264 3.940600245,69.27205285 3.946891318,69.27537951 3.946854184,69.27876478 3.946931292,70.27874899 3.952551172,70.28188669 3.95251404,70.2847482 3.952583087,71.2847356 3.957603046,71.28736587 3.957570342,71.29009501 3.957628515,71.98653479 3.960751394,72.09587083 3.959328879,72.20589904 3.959328879,72.27072424 3.957065461,72.33555356 3.956224626,72.44530022 3.950966394,72.55473453 3.947147275,72.6193267 3.94263055,72.68420174 3.939520035,72.79342613 3.930456332,72.9029324 3.922798908,72.96757847 3.916004332,73.03205455 3.910657974,73.14084724 3.89779305,73.25006841 3.886313444,73.31424523 3.877293979,73.37868819 3.869673607,73.48722857 3.852982756,73.59571962 3.837735333,73.65950436 3.826488362,73.72368033 3.816616868,73.83158146 3.796146528,73.93946492 3.777123762,74.00284835 3.763651198,74.06661066 3.751552397,74.17386665 3.727296454,74.28088551 3.704552575,74.34341305 3.688953532,74.40706137 3.674559465,74.51393929 3.646445744,74.61956542 3.62011019,74.68147168 3.602358856,74.74461767 3.585731877,74.85007092 3.554007935,74.95509202 3.523899487,75.01670759 3.503879374,75.0788683 3.485177856,75.1829176 3.449874469,75.28705652 3.416037683,75.34778194 3.393935437,75.40940603 3.37301991,75.51237542 3.33402831,75.61505447 3.296656192,75.67502714 3.272425659,75.73582815 3.249394688,75.8369358 3.207011082,75.93868626 3.165900462,75.99800663 3.139489331,76.05773697 3.114452807,76.15747979 3.068487306,76.25755759 3.023929797,76.31571049 2.995563142,76.37474028 2.968358674,76.47295212 2.918874863,76.57127997 2.870917169,76.62841795 2.840536363,76.68645187 2.811290281,76.7825962 2.758558336,76.87947117 2.707048998,76.93566844 2.67460349,76.99249197 2.643438992,77.08677465 2.587362281,77.18175572 2.532524934,77.23680974 2.498123361,77.29248771 2.465009308,77.38452318 2.40582176,77.47776532 2.347557607,77.53161974 2.31123234,77.58607359 2.276218618,77.67621382 2.213702237,77.76713933 2.15237237,77.81956391 2.114282366,77.87289193 2.077296935,77.96103449 2.011499295,78.0495252 1.947207028,78.10039655 1.907461978,78.15259329 1.868486614,78.23849361 1.79956873,78.32457888 1.732311542,78.3740406 1.690808234,78.42483688 1.650042059,78.50826353 1.578174601,78.59196526 1.507947729,78.64005001 1.464652028,78.68929102 1.422229409,78.76975576 1.347864443,78.85135857 1.274388943,78.89818456 1.229169613,78.94563351 1.18532622,79.02344622 1.108205835,79.10244278 1.031919739,79.14738859 0.9853724338,79.19355205 0.9396211227,79.26895976 0.8594797492,79.34491199 0.7808355277,79.38819616 0.7327635805,79.43274458 0.6854134697,79.50511551 0.6029114913,79.57847077 0.521442217,79.62017704 0.4717386193,79.66291968 0.4230129743,79.7323008 0.3381147312,79.80283459 0.2540558376,79.84280662 0.2028965825,79.88379691 0.1527393311,79.95001481 0.06568019037,79.98416448 0.02196734815,80.00073415 0.001506569541,80.08722867 -1.258761169e-06,80.77766443 0,81.77766443 0,82.77766443 0,83.77766443 0,84.77766443 -1.776356839e-15,85.77766443 0,86.77766443 0,87.77766443 0,88.77766443 0,89.77766443 0,90.77766443 0,91.77766443 0,92.77766443 0,93.77766443 0,94.77766443 0,95.77766443 0,96.77766443 0,97.77766443 0,98.77766443 0,99.77766443 0,100.7776644 0,101.7776644 0,102.7776644 0,103.7776644 0,104.5938665 0,104.7776644 0,105.5938665 0,105.7776644 0,106.5938665 8.67361738e-19,106.7776644 0,107.5938665 0,107.7776644 0,108.5938665 8.67361738e-19,108.7776644 0,109.5938665 0,109.7776644 0,109.9127247 -1.15983827e-07,109.9985073 0.001497676134)))", green); boost::geometry::read_wkt("MULTIPOLYGON(((109.9954313 -0.1744709027,109.9954313 -0.5235190314,110.0076129 -0.8723545295,110.0319613 -1.220552395,110.0684468 -1.567688401,110.1170249 -1.913339617,110.1776364 -2.257084921,110.2502076 -2.59850551,110.33465 -2.937185418,110.4308607 -3.272712014,110.5387225 -3.604676512,110.658104 -3.932674462,110.7888597 -4.256306252,110.9308304 -4.575177584,111.083843 -4.888899964,111.2477112 -5.197091169,111.4222353 -5.499375716,111.6072026 -5.795385317,111.8023878 -6.084759331,112.0075532 -6.367145199,112.2224487 -6.642198878,112.4468125 -6.909585257,112.6803713 -7.168978568,112.9228405 -7.420062779,113.1739247 -7.662531983,113.433318 -7.896090769,113.7007044 -8.120454582,113.975758 -8.335350067,114.2581439 -8.54051541,114.5475179 -8.735700646,114.8435275 -8.920667974,115.1458121 -9.095192038,115.4540033 -9.259060209,115.7677257 -9.412072837,116.086597 -9.554043502,116.4102288 -9.684799232,116.7382267 -9.804180723,117.0701912 -9.912042527,117.4057178 -10.00825323,117.7443977 -10.09269561,118.0858183 -10.1652668,118.4295636 -10.22587837,118.7752148 -10.27445648,119.1223508 -10.31094195,119.4705487 -10.33529031,119.8193842 -10.34747192,120.1684323 -10.34747192,120.5172678 -10.33529031,120.8654657 -10.31094195,121.2126017 -10.27445648,121.5582529 -10.22587837,121.9019982 -10.1652668,122.2434188 -10.09269561,122.5820987 -10.00825323,122.9176253 -9.912042527,123.2495898 -9.804180723,123.5775878 -9.684799232,123.9012196 -9.554043502,124.2200909 -9.412072837,124.5338133 -9.259060209,124.8420045 -9.095192038,125.144289 -8.920667974,125.4402986 -8.735700646,125.7296726 -8.54051541,126.0120585 -8.335350067,126.2871122 -8.120454582,126.5544986 -7.896090769,126.8138919 -7.662531983,127.0649761 -7.420062779,127.3074453 -7.168978568,127.5410041 -6.909585257,127.7653679 -6.642198878,127.9802634 -6.367145199,128.1854287 -6.084759331,128.3806139 -5.795385317,128.5655813 -5.499375716,128.7401053 -5.197091169,128.9039735 -4.888899964,129.0569861 -4.575177584,129.1989568 -4.256306252,129.3297125 -3.932674462,129.449094 -3.604676512,129.5569558 -3.272712014,129.6531665 -2.937185418,129.7376089 -2.59850551,129.8101801 -2.257084921,129.8707917 -1.913339617,129.9193698 -1.567688401,129.9558553 -1.220552395,129.9802036 -0.8723545295,129.9923852 -0.5235190314,129.998477 -0.1745240644,129.998477 -0.1745240644,129.998477 0.1745240644,129.9862953 0.5233595624,129.961947 0.8715574275,129.9254615 1.218693434,129.8768834 1.56434465,129.8162718 1.908089954,129.7437006 2.249510543,129.6592583 2.588190451,129.5630476 2.923717047,129.4551858 3.255681545,129.3358043 3.583679495,129.2050485 3.907311285,129.0630779 4.226182617,128.9100652 4.539904997,128.7461971 4.848096202,128.571673 5.150380749,128.3867057 5.44639035,128.1915204 5.735764364,127.9863551 6.018150232,127.7714596 6.29320391,127.5470958 6.56059029,127.313537 6.819983601,127.0710678 7.071067812,126.8199836 7.313537016,126.5605903 7.547095802,126.2932039 7.771459615,126.0181502 7.9863551,125.7357644 8.191520443,125.4463904 8.386705679,125.1503807 8.571673007,124.8480962 8.746197071,124.539905 8.910065242,124.2261826 9.06307787,123.9073113 9.205048535,123.5836795 9.335804265,123.2556815 9.455185756,122.923717 9.56304756,122.5881905 9.659258263,122.2495105 9.743700648,121.90809 9.816271834,121.5643447 9.876883406,121.2186934 9.925461516,120.8715574 9.961946981,120.5233596 9.986295348,120.1745241 9.998476952,119.8254759 9.998476952,119.4766404 9.986295348,119.1284426 9.961946981,118.7813066 9.925461516,118.4356553 9.876883406,118.09191 9.816271834,117.7504895 9.743700648,117.4118095 9.659258263,117.076283 9.56304756,116.7443185 9.455185756,116.4163205 9.335804265,116.0926887 9.205048535,115.7738174 9.06307787,115.460095 8.910065242,115.1519038 8.746197071,114.8496193 8.571673007,114.5536096 8.386705679,114.2642356 8.191520443,113.9818498 7.9863551,113.7067961 7.771459615,113.4394097 7.547095802,113.1800164 7.313537016,112.9289322 7.071067812,112.686463 6.819983601,112.4529042 6.56059029,112.2285404 6.29320391,112.0136449 6.018150232,111.8084796 5.735764364,111.6132943 5.44639035,111.428327 5.150380749,111.2538029 4.848096202,111.0899348 4.539904997,110.9369221 4.226182617,110.7949515 3.907311285,110.6641957 3.583679495,110.5448142 3.255681545,110.4369524 2.923717047,110.3407417 2.588190451,110.2562994 2.249510543,110.1837282 1.908089954,110.1231166 1.56434465,110.0745385 1.218693434,110.038053 0.8715574275,110.0137047 0.5233595624,110.001523 0.1745240644,109.9954313 -0.1744709027)))", blue); boost::geometry::correct(green); boost::geometry::correct(blue);
Test intersection between green and blue BoostMultiPolygonT output_intersection; boost::geometry::intersection(green,blue, output_intersection); std::cout << " area of intersection " << boost::geometry::area(output_intersection) << std::endl; std::cout << " Polygons of intersection : ..." << std::endl; BOOST_FOREACH(BoostCCWPolygonT const& p, output_intersection) {
std::cout << boost::geometry::dsv(p) << std::endl;
} Does intersection output equal green? std::cout << "Intersection output does" << (boost::geometry::equals(output_intersection, green) ? "(!)" : " not") << " equal green" << std::endl;
Test difference between green and blue BoostMultiPolygonT output_difference; boost::geometry::difference(green, blue, output_difference); std::cout << " area of difference " << boost::geometry::area(output_difference) << std::endl; std::cout << " Polygons of difference : ..." << std::endl; BOOST_FOREACH(BoostCCWPolygonT const& p, output_difference) {
std::cout << boost::geometry::dsv(p) << std::endl;
}
}
int main() {
test_boost_difference();
}
comment:3 by , 4 years ago
Cc: | added |
---|
Thanks for the report. I'm currently busy with this and will verify this soon.