2
$\begingroup$

I am dealing with polygons admitted by using other region functions (like RegionDifference), some of which have insidious problems.

Consider those below;

pA = Polygon[{{45.36842200621874, -19.99999846732962}, {46., -92.}, {45., -93.}, {98., -151.}, {202., -162.6389941886955}, {202., -115.45591028150943}, {165., -116.}, {120., -49.}, {120.62032087153082, -19.999999255934014}}];
pB = Polygon[{{98., -151.}, {66.58627519630939, -116.62271625256498}, {55.79313759815469, -104.8113581262825}, {50.39656879907734, -98.90567906314125}, {49.278708119268465, -97.68235982863342}}];

Note that pB is very thin and is a result of RegionDifference being infamously unreliable. So to visualise it below, I'll draw a thick line between its points.

enter image description here

I now wish to find the intersection of these Polygons, but alas, calling

RegionIntersection[pA, pB]

takes 303 seconds to spit out error:

BoundaryMeshRegion::dupbcl: The cell Line[{{2,1}}] was given in more than one boundary.

Clearly pB is malformed and an adversarial input for RegionIntersection. What exactly is wrong with it, and is there a way I can efficiently determine it is a bogus output of RegionDifference to be discarded?

$\endgroup$
0

1 Answer 1

1
$\begingroup$

The following succeeds. First, we use exact numbers and convert polygons to ImplicitRegions.

pA = RegionConvert[Polygon[Rationalize[{{45.36842200621874, -19.99999846732962}, 
{46., -92.}, {45., -93.}, {98., -151.}, {202., -162.6389941886955}, 
{202., -115.45591028150943}, {165., -116.}, {120., -49.}, 
{120.62032087153082, -19.999999255934014}}, 0]], "Implicit"];
pB = RegionConvert[ Polygon[Rationalize[{{98., -151.}, {66.58627519630939, 
-116.62271625256498}, {55.79313759815469, -104.8113581262825}, 
{50.39656879907734, -98.90567906314125}, {49.278708119268465, 
-97.68235982863342}}, 0]], "Implicit"];

Now we easily find the intersection

ri = RegionIntersection[pA, pB];

and plot it

Region[ri]

enter image description here

This looks like an interval in 2D. Indeed,

RegionMeasure[ri, 2]

0

and

RegionMeasure[ri, 1] // N

67.7041

$\endgroup$
1
  • $\begingroup$ The same RegionMeasure[ri,2]==0 is obtained without Rationalize. $\endgroup$
    – user64494
    Nov 3, 2022 at 11:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.