Skip to main content

simplifying expressions - Simplify 2D polyhedral Regions like Interval


I don't think there's a built in "RegionSimplify" for polyhedral Regions and derived akin to how Interval automatically simplifies its argument expression:


Interval[{0, 1}, {1, 2}]

and


Interval[{0, 1}]~IntervalUnion~Interval[{1, 2}]

yield


Interval[{0, 2}]


In contrast, RegionUnion remains unevaluated, even in 2D:


Line[{{0, 0}, {1, 0}}]~ RegionUnion ~ Line[{{1, 0}, {2, 0}}]

(* RegionUnion[Line[{{0, 0}, {1, 0}}], Line[{{1, 0}, {2, 0}}]] *)

From


Rectangle[{0, 0}, {1, 1}] ~ RegionUnion ~ 
Rectangle[{1, 0}, {2, 1}] // RegionBoundary // DiscretizeRegion


enter image description here


As expected, the Rectangles' common segment is not part of the output.


How to expose or compute the ideal normal form for 2D (at least) polyhedral Regions like these basic examples:


Overlapping lines:


Line[{{0, 0}, {2, 0}}]~ RegionUnion ~ Line[{{1, 0}, {3, 0}}] (* // RegionSimplify *)

(* Line[{{0,0},{3,0}}] *)

Union of rectangles:


 Rectangle[{0, 0}, {1, 1}] ~ RegionUnion ~ 

Rectangle[{1, 0}, {2, 1}] (* // RegionSimplify *)

(* Rectangle[{0, 0}, {2, 1}] *)

Boundary:


 Rectangle[{0, 0}, {1, 1}] ~ RegionUnion ~ 
Rectangle[{1, 0}, {2, 1}] // RegionBoundary (* // RegionSimplify *)

(* Line[{{0,0},{2,0},{2,1},{0,1},{0,0}}] *)


The simplification should work for all 2D polyhedral regions including cones (which btw the current language does not support correctly):


ConicHullRegion[{{0, 0}}, {{1, 0}, {1, 1}}] ~RegionUnion ~ 
ConicHullRegion[{{0, 0}}, {{0, 1}, {1, 1}}] (* // RegionSimplify *)

(* ConicHullRegion[{{0, 0}}, {{1, 0}, {0, 1}}] *)

For convex regions and convex-preserving operations (eg intersection) should suffice to consider the extreme set (vertices and rays), but in general regions aren't convex (and union doens't preserve it).


(Note: RegionIntersection of the same Rectangles hangs the kernel w/ msg: Last::nolast: "{} has a length of zero and no last element")




Comments