For a demonstration project, I am calculating certain geometric properties of a region (an isosceles triangle in this example), as follows:
baseshape = SASTriangle[2, Pi/6, 2];
cbs0 = RegionCentroid[baseshape];
baseshape = TransformedRegion[baseshape, TranslationTransform[-cbs0]];
This calculates the centroid, and moves the region so its centroid is at the origin. Now I am going to rotate the region, move it down by depth
, and define the part of the region that lies below y=0
as a new region, as follows:
rrs[\[Theta]_?NumericQ, depth_?NumericQ] :=
RegionIntersection[
TransformedRegion[
TransformedRegion[baseshape, RotationTransform[\[Theta]]],
TranslationTransform[{0, -depth}]],
ImplicitRegion[y <= 0, {x, y}]];
However, I get an error message when I try to plot this:
Plot[Area[rrs[0, depth]], {depth, -0.7, 1.4}]
Area::reg: rrs(0,d,{0,0}) is not a correctly specified region.
The plot looks fine, but I don't understand the reason for the error message. What am I missing?
Answer
The error comes from the evaluation of Area[rrs[0, depth]]
with the non-evaluated symbol depth
:
Plot[Area[rrs[0, Echo@depth]], {depth, -0.6, -0.5},
PlotPoints -> 2, MaxRecursion -> 1]
>> -0.6
>> -0.5999
>> depth
Area::reg: rrs[0,depth] is not a correctly specified region.
>> -0.6
>> -0.5
>> -0.55
(* plot displayed *)
This symbolic evaluation happens as part of the detection of exclusions. You can avoid it by setting the option Exclusions
to None
:
Plot[Area[rrs[0, Echo@depth]], {depth, -0.6, -0.5},
PlotPoints -> 2, MaxRecursion -> 1, Exclusions -> None]
>> -0.6
>> -0.5999
>> -0.6
>> -0.5
>> -0.55
(* plot displayed *)
Note that Plot
has the default value Exclusions -> Automatic
, which is effectively equivalent to Exclusions -> All
when the option PerformanceGoal
is Quality
(see Exclusions
ref page),
Options[Plot, "PerformanceGoal"]
(* {PerformanceGoal :> $PerformanceGoal} *)
$PerformanceGoal
(* "Quality" *)
so another way to get rid of the message is to set PerformanceGoal
to another value:
Plot[Area[rrs[0, Echo@depth]], {depth, -0.6, -0.5},
PlotPoints -> 2, MaxRecursion -> 1, PerformanceGoal -> "Speed"]
>> -0.6
>> -0.5999
>> -0.6
>> -0.5
>> -0.55
(* plot displayed *)
This last approach may be more interesting if you want to process excluded regions with ExclusionsStyle
(in this case the value of Exclusions
should not be Automatic
, and needs to be set to another value --- for instance True
or All
).
Comments
Post a Comment