Regions
A region is the open set on one side of a closed curve or closed path.
Abstract interface
An AbstractRegion
is expected to provide the following methods. Here R
is an AbstractRegion
and z
is a number.
Method | Description |
---|---|
boundary(R) | Boundary curve(s)/path(s) of a region. |
in(z,R) | Determine whether z is in R . |
isfinite(R) | Determine whether the region is bounded. |
There are default implementations of the following methods.
Method | Description |
---|---|
intersect(R1,R2) or R1 ∩ R2 | Intersection of two regions. (Currently a stub for further development.) |
union(R1,R2) or R1 ∪ R2 | Union of two regions. (Currently a stub for further development.) |
There is also a parametric subtype AbstractConnectedRegion{N}
used to represent a region of connectivity N
. Any implementation is expected to provide the following methods.
Method | Description |
---|---|
outerboundary(R) | Curve/path of the outermost boundary, if it exists. |
innerboundary(R) | Curve(s)/path(s) of inner boundaries (that R is exterior to). |
Default implementations are provided for +
, -
, *
, /
, performing translation, rotation, and scaling.
AbstractSimplyConnectedRegion
is an alias for AbstractConnectedRegion{1}
.
Generic types
SimplyConnectedRegion
Type SimplyConnectedRegion
is a union of parameterized types InteriorSimplyConnectedRegion{T}
and ExteriorSimplyConnectedRegion{T}
, where T
is a subtype of a union of AbstractClosedCurve
and AbstractClosedPath
. The preferred method for constructing a value of one of these types is to use interior
and exterior
, respectively, with a closed curve or path as argument. If the given curve is bounded, these constructors ignore its orientation and select the bounded or unbounded region it defines, respectively. For an unbounded boundary curve, points "to the left" of it are considered the interior.
In addition to the methods of the Abstract interface, the SimplyConnectedRegion
type provides the following methods.
Method | Description |
---|---|
!(R) | Complement of R . |
isapprox(R1, R2) | Determine whether R1 and R2 represent the same region. |
The SimplyConnectedRegion
type is parameterized by the type of curve bounding it in order to facilitate dispatch. Notably included are the definitions
AbstractDisk = SimplyConnectedRegion{T} where T<:Circle
AbstractHalfplane = SimplyConnectedRegion{T} where T<:Line
PolygonalRegion = SimplyConnectedRegion{Polygon}
There are also methods to facilitate construction of important common regions. For disks there are
disk(C::Circle)
disk(center, radius)
unitdisk
For half-planes there are
halfplane(L::Line)
upperhalfplane
lowerhalfplane
lefthalfplane
righthalfplane
ExteriorRegion
The parameterized type ExteriorRegion{N}
represents a region lying exterior to N
closed curves or paths. It is constructed by ExteriorRegion(inner)
, where inner
is a vector of closed curves/paths. These are returned by innerboundary
, and outerboundary
returns nothing
.
ConnectedRegion
The parameterized type ConnectedRegion{N}
represents a region of connectivity N
. You construct one by calling ConnectedRegion{N}(outer, inner)
, where outer
(if given) is an outer boundary, possibly unbounded, and inner
is a vector of disconnected inner boundary components. Some rudimentary checking is done that a valid region of connectivity N
has been specified, but it should not be considered rigorous.
The particular case of a doubly connected region can be constructed by between(outer, inner)
, giving the two boundary components. The given orientation is ignored for any bounded component.
Specific subtypes
Annulus
An Annulus
is the doubly connected region between two concentric circles. It is a subtype of AbstractConnectedRegion{2}
. Construction is by Annulus(outer, inner)
, where Circle values are given explicitly, or by Annulus(outrad, inrad, center=0)
, giving the radii and optionally the center.
Examples
Here is a "dog bone" region.
a = Arc(-1,1,-1im);
right = Path([4+1im+a,4-1im-1im*a]);
s = Segment(-3+1im,3+1im);
p = ClosedPath([s,right...,-s,-right...]);
r = interior(exp(1im*pi/4)*p)
using ComplexPlots, Plots
default(linewidth=2,legend=:none)
plot(r)
Inspired by the Swiss flag?
box = [1-1im, 3-1im, 3+1im];
plus = Polygon([box; 1im*box; -box; -1im*box]);
r = between(rectangle(-6-4im, 6+4im), plus)
plot(r, color=:red, linewidth=0)
A multiply-connected exterior region:
c = Circle(0, 1)
t = n_gon(3)
s = n_gon(4)
plot( ExteriorRegion([c, 3+s, 6+t]) )