Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

If you type

?Region`*

you'll get:

Mathematica graphics

which seems a bunch of interesting and not documented symbols.

Any idea (or experience) on how to use them?

Edit

By using our "collective spelunking" I was able to work out this answer - Great! :)

And Silvia used it to write another one!

share|improve this question
3  
Region`RegionMeasure[Circle[]] -> 2 Pi :) –  cormullion Dec 20 '13 at 18:34
2  
Christmas has arrived in your region? :) –  cormullion Dec 20 '13 at 18:47
3  
Check this: Region`RegionProperty[Polygon[{{1, 0}, {0, 1}, {2, 3}}], {x, y}, "FastDescription"] –  Simon Woods Dec 20 '13 at 22:10
2  
Great find by the way. I wish we could get documentation for some of the useful stuff in these hidden-away packages. –  Simon Woods Dec 20 '13 at 22:24
2  
In Simon's footsteps, trying to find valid arguments for RegionProperty I ran Union@Cases[ ToExpression[#, InputForm, DownValues] & /@ Names["Region`*"], HoldPattern[Region`RegionProperty[__, s_String]] :> s, Infinity] to find {"Distance", "FastDescription", "ImplicitDescription", "Nearest", "SpaceDimension"}. SpecialRegionProperty can take {"Assumptions", "BoundingBox", "Centroid", "ConvexQ", "Distance", "ImplicitDescription", "InjectiveParametricDescription", "Instance", "Measure", "Nearest", "ParametricDescription", "RegionDimension", "SignedDistance", "SpaceDimension"} –  Szabolcs Dec 21 '13 at 0:12

4 Answers 4

up vote 10 down vote accepted

For a more clear view, here is a table of some of the Region functions.

AppendTo[$ContextPath, "Region`"]

Clear[testfunc]
testfunc[reg_] := {ToString /@ #, Through[#[reg]]} &[{
                    ConvexRegionQ,
                    BoundedRegionQ,
                    RegionDimension,
                    Module[{dim = RegionEmbeddingDimension[#]},
                           var = Symbol["x" <> ToString[#]] & /@ Range[dim];
                           dim] &,
                    RegionMeasure,
                    RegionCentroid,
                    RegionProperty[#, var, "FastDescription"] &,
                    RegionProperty[#, var, "ImplicitDescription"] &,
                    RegionElement,
                    LevelFunction[RegionProperty[#, var, "FastDescription"][[1, 2]]] &
                  }] // 
          Grid[Insert[#, {ConvexRegionQ, BoundedRegionQ, RegionDimension, 
               RegionEmbeddingDimension, RegionMeasure, RegionCentroid, 
               FastDescription, ImplicitDescription, RegionElement, 
               LevelFunction}, 2]\[Transpose], Dividers -> All, 
            FrameStyle -> GrayLevel[.8], Alignment -> Left] & // Quiet

In addition of BoxRegion, other *Regions also seems to be used to declare regions:

Names["Region`*Region"]

{"BallRegion", "BooleanRegion", "BoxRegion", "EllipsoidRegion", "EmptyRegion", "FullRegion", "InverseTransformedRegion", "ParametricRegion", "SimplexRegion", "TransformedRegion"}

For example, a 2D triangle embeded in 7D space:

tri3d = RandomInteger[{-10, 10}, {3, 3}];
tri7d = ArrayFlatten[{{tri3d, ConstantArray[0, {3, 4}]}}];
(* a random rotate in 7D space: *)
rt7d = RotationTransform[{{0, 0, 1, 0, 0, 0, 0}, RandomInteger[{-1, 1}, 7]},
                         ConstantArray[0, 7]];
tri7d = rt7d /@ tri7d;
testfunc@SimplexRegion[tri7d]

test for 7D triangle

Maybe some of them (LevelFunction) work only on "full-rank" regions?

simplex = Function[dim, SimplexRegion[RandomInteger[{-10, 10}, {dim + 1, dim}]]] @ 4
testfunc @ simplex

test for simplex

Some regions look like special cases:

RegionDimension@EmptyRegion[2]

$-\infty$

RegionMeasure@FullRegion[3]

$\infty$

Edit:

SimplePolygonPartition can be used to divide self-intersecting Polygon to simple pieces. The usage is like

SimplePolygonPartition[Polygon[...]]
SimplePolygonPartition[Polygon[...],Graphics`Region`RegionDump`FillingMethod->"OddEvenRule"]

An example can be found here.

share|improve this answer
1  
Great! In a few days we'll be able to write a manual! :) –  belisarius Dec 21 '13 at 3:31
4  
@belisarius The Uncomplete Unofficial Documentation for Undocumented Functions :P –  Silvia Dec 21 '13 at 4:02
1  
take a look! mathematica.stackexchange.com/a/39206/193 –  belisarius Dec 21 '13 at 6:49
    
@belisarius Thanks for you and Simon's enlightenment, I found a similar solution :) –  Silvia Dec 22 '13 at 0:25
    
@belisarius Found a new one SimplePolygonPartition :) –  Silvia Jan 28 at 6:30

This is quite a find. I've only had time to play with it a little, but are some interesting results:

Region`ConvexRegionQ[Disk[{1., 0.}]]
True
Region`RegionCentroid[Disk[{1., 0.}]]
{1., 0.}
Region`RegionMeasure[Disk[{1., 0.}]]
π
Region`RegionIntersection[Disk[{0, 0}], Disk[{1, 0}]]

seems to do nothing, but

Region`RegionMeasure @ Region`RegionIntersection[Disk[{0, 0}], Disk[{1, 0}]]
-(Sqrt[3]/2) + (2 π)/3

It appears one can create regions and operate on them:

box = Region`BoxRegion[{0, 0}, {2, 3}];
Region`RegionMeasure @ box
6
Region`RegionCentroid @ box

{1, 3/2}

share|improve this answer
    
+1 And it seems most of them also work for 3D cases. –  Silvia Dec 21 '13 at 0:11

Four more:

RegionNearest[] returns the nearest point inside a region to a given point:

AppendTo[$ContextPath, "Region`"]

RegionNearest[Disk[], {3, 4}]
(*
 {3/5, 4/5}
*)

RegionDifference[] seems to return unevaluated ... but no:

RegionMeasure@RegionDifference[Rectangle[], Disk[]]
(*
 1 - π/4
*)

TransformedRegion[] also seems to return unevaluated ... but again:

RegionMeasure@TransformedRegion[Rectangle[], ScalingTransform[{3, 2}]]
(*
 6
*)

ParametricRegion[]:

RegionMeasure@ParametricRegion[{{x, y}, 0 < x < 1 && 0 < y < 2}]
(*
 2
*)
share|improve this answer
    
@Silvia RegionMeasure@ParametricRegion[{{x, y}, 0 < x < 1 && 0 < y < 2}] –  belisarius Dec 21 '13 at 5:58
    
Sorry I missed that.. But ParametricRegion will be my most interested one :) –  Silvia Dec 21 '13 at 5:58
    
Wow! Brilliant! –  Silvia Dec 21 '13 at 5:58

Its interesting to note that the Region context is loaded when you evaluate Graphics`Region`RegionInit[]. Old favourite Graphics`Mesh gets loaded too. There is some interesting looking stuff in Graphics`Region, clearly incomplete, for example one of the definitions is this...

BoundingRegion[___] := "Implement me..."

I've not done much spelunking yet, but did find this:

Graphics`Region`RegionInit[];

RegionConvert[Disk[]]
(* MeshRegion[{2, 2}, {951, 2289, 1339}, <>] *)

Graphics[Line @ MeshCoordinates[%, 1]]

enter image description here

share|improve this answer
1  
"Implement me..." There's some sentient code! –  cormullion Dec 22 '13 at 0:02

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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