Function Repository Resource:

ExtrinsicCurvedManifoldToGraph

Source Notebook

Produce random spatial graphs by sprinkling points into a Riemannian manifold with an arbitrary extrinsic curvature

Contributed by: Jonathan Gorard

ResourceFunction["ExtrinsicCurvedManifoldToGraph"][cond,{x1,,xm},n]

produces a random sprinkling of n points into a Riemannian manifold with extrinsic curvature satisfying the conditions cond, assuming a discreteness scale of 1.

ResourceFunction["ExtrinsicCurvedManifoldToGraph"][cond,{x1,,xm},disc,n]

produces a random sprinkling of n points with discreteness scale disc into a Riemannian manifold with extrinsic curvature satisfying the conditions cond.

ResourceFunction["ExtrinsicCurvedManifoldToGraph"][cond,{x1,,xm},{{xmin,xmax},},n]

produces a random sprinkling of n points into a Riemannian manifold with extrinsic curvature satisfying the conditions cond restricted to the bounds {xmin,xmax}×, assuming a discreteness scale of 1.

ResourceFunction["ExtrinsicCurvedManifoldToGraph"][cond,{x1,,xm},{{xmin,xmax},},disc,n]

uses discreteness scale disc.

ResourceFunction["ExtrinsicCurvedManifoldToGraph"][,"prop"]

gives the property "prop" for the Riemannian manifold sprinkling with the specified extrinsic curvature.

Details and Options

When no "prop" argument is given, ResourceFunction["ExtrinsicCurvedManifoldToGraph"][cond,{x1,,xm},,n] returns a ManifoldGraph object by default.
By default, the discreteness scale is assumed to be equal to 1.
By default, the embedded region is restricted to the bounds {{-1,1},}.
Unlike the resource function FlatManifoldToGraph, sprinklings can only be performed in 1, 2 and 3-dimensional manifolds using ResourceFunction["ExtrinsicCurvedManifoldToGraph"].
Sprinklings are performed using a Poisson point process, with the expected number of sprinkled points being proportional to the Riemannian volume measure.
Spatial edges are added in accordance with both the Riemannian metric and the specified discreteness scale, so as to guarantee approximate isometry between the spatial graph and the underlying manifold.
ResourceFunction["ExtrinsicCurvedManifoldToGraph"] uses a similar argument specification to ImplicitRegion and DiscretizeRegion.
In ResourceFunction["ExtrinsicCurvedManifoldToGraph"][,"prop"], the following properties can be requested. These are the same as the properties supported by ManifoldGraph[]["prop"]:
"SpatialGraph"spatial graph with vertex coordinates given by the underlying manifold coordinates
"Points"plot of the sprinkled points only (without spatial edges)
"PointsList"list of the manifold coordinates of all sprinkled points
"DiscretenessScale"discreteness scale of the sprinkling
"PointsCount"number of sprinkled points
"Dimensions"number of dimensions in the continuum manifold approximation
"EdgeCount"total number of spatial edges
"PureSpatialGraph"spatial graph with vertex coordinate information removed
"Properties"list of properties
The discreteness scale determines at what distance (with respect to the Riemannian metric) a pair of points should be regarded as adjacent.

Examples

Basic Examples (5) 

Produce a random sprinkling of 100 points into a 2-dimensional Riemannian manifold with a hyperbolic extrinsic curvature condition, with discreteness scale 0.8:

In[1]:=
manifold = ResourceFunction["ExtrinsicCurvedManifoldToGraph"][
  x^2 - y^2 < 1, {x, y}, {{-2, 2}, {-2, 2}}, 0.8, 100]
Out[1]=

Show the spatial graph:

In[2]:=
manifold["SpatialGraph"]
Out[2]=

Show the pure spatial graph (with vertex coordinate information removed):

In[3]:=
manifold["PureSpatialGraph"]
Out[3]=

Produce a random sprinkling of 200 points into a 3-dimensional Riemannian manifold with a hyperboloidal extrinsic curvature condition, with discreteness scale 1.2:

In[4]:=
manifold = ResourceFunction["ExtrinsicCurvedManifoldToGraph"][
  x^2 + y^2 - z^2 == 1, {x, y, z}, {{-2, 2}, {-2, 2}, {-2, 2}}, 1.2, 200]
Out[4]=

Show the spatial graph:

In[5]:=
manifold["SpatialGraph"]
Out[5]=

Show the pure spatial graph (with vertex coordinate information removed):

In[6]:=
manifold["PureSpatialGraph"]
Out[6]=

Plot the positions of the sprinkled points only (without spatial edges):

In[7]:=
manifold["Points"]
Out[7]=

Produce a random sprinkling of 200 points into a 3-dimensional Riemannian manifold with a paraboloidal extrinsic curvature condition based on Flamm's paraboloid (related to the Schwarzschild geometry), with discreteness scale 0.3:

In[8]:=
manifold = ResourceFunction["ExtrinsicCurvedManifoldToGraph"][
  2*Sqrt[(x^2 + y^2)] == z, {x, y, z}, {{-1, 1}, {-1, 1}, {-1, 1}}, 0.3, 200]
Out[8]=

Plot the positions of the sprinkled points only (without spatial edges):

In[9]:=
manifold["Points"]
Out[9]=

Show the spatial graph:

In[10]:=
manifold["SpatialGraph"]
Out[10]=

Show the pure spatial graph (with vertex coordinate information removed):

In[11]:=
manifold["PureSpatialGraph"]
Out[11]=

By default, the discreteness scale is assumed to be equal to 1:

In[12]:=
manifold = ResourceFunction["ExtrinsicCurvedManifoldToGraph"][
  x^2 + y^2 - z^2 == 1, {x, y, z}, {{-2, 2}, {-2, 2}, {-2, 2}}, 200]
Out[12]=

Show the spatial graph:

In[13]:=
manifold["SpatialGraph"]
Out[13]=

By default, the manifold region is restricted to the bounds {{-1,1},}:

In[14]:=
manifold = ResourceFunction["ExtrinsicCurvedManifoldToGraph"][
  x^2 + y^2 + z^2 == 1, {x, y, z}, 100]
Out[14]=

Show the spatial graph:

In[15]:=
manifold["SpatialGraph"]
Out[15]=

Scope (5) 

Sprinklings can be produced in 1-dimensional Riemannian manifolds:

In[16]:=
manifold = ResourceFunction["ExtrinsicCurvedManifoldToGraph"][
  x^2 < 1, {x}, {{-2, 2}}, 0.3, 100]
Out[16]=

Show the spatial graph:

In[17]:=
manifold["SpatialGraph"]
Out[17]=

Produce a sprinkling in a 2-dimensional Riemannian manifold:

In[18]:=
manifold2 = ResourceFunction["ExtrinsicCurvedManifoldToGraph"][
  x^2 - y^2 < 1, {x, y}, {{-2, 2}, {-2, 2}}, 0.8, 100]
Out[18]=

Show the spatial graph:

In[19]:=
manifold2["SpatialGraph"]
Out[19]=

Produce a sprinkling in a 3-dimensional Riemannian manifold:

In[20]:=
manifold3 = ResourceFunction["ExtrinsicCurvedManifoldToGraph"][
  x^2 + y^2 - z^2 < 1, {x, y, z}, {{-2, 2}, {-2, 2}, {-2, 2}}, 1.2, 200]
Out[20]=

Show the spatial graph. Note that, unlike the resource function FlatManifoldToGraph, ExtrinsicCurvedManifoldToGraph does not support higher-dimensional sprinklings:

In[21]:=
manifold3["SpatialGraph"]
Out[21]=

Properties can be requested directly from ExtrinsicCurvedManifoldToGraph:

In[22]:=
ResourceFunction["ExtrinsicCurvedManifoldToGraph"][
 x^2 + y^2 == 1, {x, y}, 0.5, 100, "PureSpatialGraph"]
Out[22]=

Produce a random sprinkling of 200 points into a 2-dimensional Riemannian manifold with hyperboloidal extrinsic curvature condition, with discreteness scale 1.2:

In[23]:=
manifold = ResourceFunction["ExtrinsicCurvedManifoldToGraph"][
  x^2 + y^2 - z^2 == 1, {x, y, z}, {{-2, 2}, {-2, 2}, {-2, 2}}, 1.2, 200]
Out[23]=

Show the complete list of properties:

In[24]:=
manifold["Properties"]
Out[24]=

Show the spatial graph:

In[25]:=
manifold["SpatialGraph"]
Out[25]=

Plot the positions of the sprinkled points only (without spatial edges):

In[26]:=
manifold["Points"]
Out[26]=

Show a complete list of manifold coordinates for the sprinkled points:

In[27]:=
Take[manifold["PointsList"], 100]
Out[27]=

Show the discreteness scale:

In[28]:=
manifold["DiscretenessScale"]
Out[28]=

Show the number of dimensions in the background manifold:

In[29]:=
manifold["Dimensions"]
Out[29]=

Show the total number of spatial edges:

In[30]:=
manifold["EdgeCount"]
Out[30]=

Show the pure spatial graph (with vertex coordinate information removed):

In[31]:=
manifold["PureSpatialGraph"]
Out[31]=

Publisher

Jonathan Gorard

Version History

  • 1.0.0 – 11 December 2020

Source Metadata

Related Resources

License Information