Consider these four regions:

regions = Disk[#, 1] & /@ Tuples[{0, 4/5}, {2}]

Graphics[{FaceForm[Opacity[0.2]], EdgeForm[Black], regions}]

enter image description here

I was looking to get subregions which are part of some of these and not part of others. BooleanRegion should be able to do this.

For example,

BooleanRegion[And, BoundaryDiscretizeRegion /@ regions]

enter image description here

But any non-trivial combination (i.e. anything else than using the simple operators And, Or, etc.) seems to fail when more than two regions are present.

For example, try

BooleanRegion[#1 && #2 && ! #3 && ! #4 &, BoundaryDiscretizeRegion /@ regions]

Is this a bug? Am I doing something wrong?

I was very surprised to see this because if these cases don't work, then BooleanRegion seems to be pointless. We might as well just use a single RegionUnion, RegionIntersection, etc. Also, the computation I'm after can be expressed in terms of several region unions, intersections and differences. Thus what I'm expecting from BooleanRegion does not seem to be difficult to implement.

  • 2
    $\begingroup$ The problem seems to exist only for MeshRegions and BoundaryMeshRegions. For example, BoundaryDiscretizeRegion@ BooleanRegion[#1 && #2 && ! #3 && ! #4 &, regions] works as expected... $\endgroup$ – Henrik Schumacher May 16 '18 at 11:30
  • $\begingroup$ @HenrikSchumacher You're right! I was so convinced that it is much easier to compute with discretized regions that I didn't even try descretizing only afterwards. $\endgroup$ – Szabolcs May 16 '18 at 11:40
  • 1
    $\begingroup$ Moreover, I think that the problem with discretized regions is BooleanRegion[Not, region] because that cannot be represented by a discrete region. Maybe one needs to replace Not somehow by the RegionComplement with respect to a common BoundingRegion... Maybe it is also possible to modify the boolean function with BooleanConvert... $\endgroup$ – Henrik Schumacher May 16 '18 at 11:46

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.