Function Repository Resource:

SimplexBoundary

Source Notebook

Find the topological boundary of a simplex or simplicial complex

Contributed by: Richard Hennigan (Wolfram Research)

ResourceFunction["SimplexBoundary"][simplex]

finds the topological boundary of simplex.

ResourceFunction["SimplexBoundary"][{simplex1,simplex2,}]

finds the topological boundary of the simplicial complex containing simplex1,simplex2,.

ResourceFunction["SimplexBoundary"][mesh]

finds the topological boundary of the MeshRegion mesh.

ResourceFunction["SimplexBoundary"][complex,k]

finds the topological boundary of the k-skeleton of complex.

Details and Options

A simplex can be considered any of the following:
Point[v] point
Line[{v1,v2}]line segment
Triangle[{v1,v2,v3}] or Polygon[{v1,v2,v3}]filled triangle
Tetrahedron[{v1,v2,v3,v4}] filled tetrahedron
Simplex[{v1,v2,,vn}] an (n-1)-dimensional simplex
A simplicial complex is either a list of simplices or a MeshRegion where all cells are valid simplices.
The boundary preserves orientations so that it can be used for simplicial homology computations.

Examples

Basic Examples (4) 

Retrieve the ResourceFunction:

In[1]:=
ResourceFunction["SimplexBoundary"]
Out[1]=

Get the boundary of a Simplex:

In[2]:=
ResourceFunction["SimplexBoundary"][Simplex[{1, 2, 3}]]
Out[2]=

Get the boundary of a simplicial complex, represented as a list of simplices:

In[3]:=
ResourceFunction[ "SimplexBoundary"][{Simplex[{1, 2, 3}], Simplex[{1, 3, 4}]}]
Out[3]=

Get the boundary of a MeshRegion:

In[4]:=
mesh = MeshRegion[{{0, 0}, {1, 0}, {0, 1}, {1, 1}, {2, 1}, {2, 0}}, Polygon[{{1, 2, 3}, {4, 5, 6}}]]
Out[4]=
In[5]:=
ResourceFunction["SimplexBoundary"][mesh]
Out[5]=

Scope (2) 

By default, the boundary will be computed from simplices that match the dimension of the simplicial complex:

In[6]:=
ResourceFunction[ "SimplexBoundary"][{Point[1], Line[{2, 3}], Triangle[{4, 5, 6}]}]
Out[6]=

A different dimension k can be specified, which will find the boundary of the k-skeleton of the complex:

In[7]:=
ResourceFunction[ "SimplexBoundary"][{Point[1], Line[{2, 3}], Triangle[{4, 5, 6}]}, 1]
Out[7]=

Generalizations and Extensions (1) 

Some other primitives can represent a simplex as well:

In[8]:=
ResourceFunction["SimplexBoundary"][ Triangle[{{0, 0}, {1, 0}, {0, 1}}]]
Out[8]=
In[9]:=
Graphics[%]
Out[9]=

Applications (2) 

Find holes in a 3D model:

In[10]:=
mesh = ResourceData["Stanford Bunny", "MeshRegion"]
Out[10]=
In[11]:=
boundary = ResourceFunction["SimplexBoundary"][mesh]
Out[11]=

Highlight the boundary edges:

In[12]:=
Show[HighlightMesh[mesh, Style[boundary, Red]], ViewPoint -> {-2.25, -0.5, -2.5}, ViewVertical -> {-1, 0, 0}]
Out[12]=

Properties and Relations (3) 

Orientation is preserved:

In[13]:=
pts = {{0, 0, 0}, {1, 0, 0}, {0, 1, 0}, {0, 0, 1}}; boundary = ResourceFunction["SimplexBoundary"][Tetrahedron[{1, 2, 3, 4}]]; insideOutBoundary = ResourceFunction["SimplexBoundary"][Tetrahedron[{2, 1, 3, 4}]]; {Graphics3D[{FaceForm[Red, Blue], GraphicsComplex[pts, boundary]}], Graphics3D[{FaceForm[Red, Blue], GraphicsComplex[pts, insideOutBoundary]}]}
Out[13]=
In[14]:=
pts = {{0, 0}, {1, 0}, {0, 1}}; boundary = ResourceFunction["SimplexBoundary"][Triangle[{1, 2, 3}]]; insideOutBoundary = ResourceFunction["SimplexBoundary"][Triangle[{2, 1, 3}]]; {Graphics[GraphicsComplex[pts, Arrow @@@ boundary]], Graphics[GraphicsComplex[pts, Arrow @@@ insideOutBoundary]]}
Out[14]=

The boundary of a boundary is always empty:

In[15]:=
NestList[ResourceFunction["SimplexBoundary"], MeshRegion[{{0, 0}, {1, 0}, {0, 1}, {1, 1}, {2, 1}, {2, 0}}, Polygon[{{1, 2, 3}, {4, 5, 6}}]], 2]
Out[15]=
In[16]:=
Graphics /@ NestList[ResourceFunction["SimplexBoundary"], Triangle[], 2]
Out[16]=
In[17]:=
Graphics /@ NestList[ResourceFunction[ "SimplexBoundary"], {Simplex[{{0, 0}, {1, 0}, {0, 1}}], Simplex[{{1, 1}, {1, 0}, {0, 1}}]}, 2]
Out[17]=

A graph can be considered a one-dimensional simplicial complex:

In[18]:=
(* Evaluate this cell to get the example input *) CloudGet["https://www.wolframcloud.com/obj/7c3732eb-2f65-4916-9195-aa279a2784fc"]
Out[18]=
In[19]:=
HighlightGraph[g, boundary]
Out[19]=

The boundary can give you information about degree of vertices:

In[20]:=
Sort[boundary] === Sort[Keys@ Select[AssociationThread[VertexList[g], VertexDegree[g]], # == 1 &]]
Out[20]=

Possible Issues (5) 

Not all graphics primitives are valid simplices:

In[21]:=
arc = Circle[{0, 0}, 1, {Pi/6, 3 Pi/4}]; Graphics[arc]
Out[21]=
Out[21]=

They can often be converted to simplicial complexes using DiscretizeGraphics that are reasonable approximations:

In[22]:=
d = DiscretizeGraphics[arc]
Out[22]=
In[23]:=
Graphics[{arc, Style[MeshPrimitives[ResourceFunction["SimplexBoundary"][d], 0], Red, PointSize[Large]]}]
Out[23]=

Valid n-dimensional simplices must have n+1 vertices:

Out[23]=
In[24]:=
ResourceFunction["SimplexBoundary"][Polygon[{1, 2, 3}]]
Out[24]=

Mesh regions are not necessarily composed of simplices:

In[25]:=
mesh = DiscretizeGraphics[Rectangle[]]
Out[25]=
Out[25]=

TriangulateMesh can often be used to create a valid simplicial complex:

In[26]:=
ResourceFunction["SimplexBoundary"][ TriangulateMesh[mesh, MaxCellMeasure -> Infinity]]
Out[26]=

Vertices must be unique:

Out[26]=

If orientations are not consistent within a simplicial complex, the boundary will not have consistent orientations, either:

In[27]:=
s = {Simplex[{{0, 0, 0}, {1, 0, 0}, {0, 1, 0}}], Simplex[{{1, 1, 0}, {1, 0, 0}, {0, 1, 0}}]}; Graphics3D[{FaceForm[Red, Blue], s}, BoxRatios -> {1, 1, .1}, Boxed -> False]
Out[27]=
In[28]:=
Graphics3D[Arrow @@@ ResourceFunction["SimplexBoundary"][s], BoxRatios -> {1, 1, .1}, Boxed -> False]
Out[28]=

Interactive Examples (1) 

One can visualize 4D shapes by rotating and projecting the boundary into 3D. Here is an example using a hexadecachoron:

In[29]:=
rotationFunction = Block[{\[Theta]1, \[Theta]2, \[Theta]3, \[Theta]4, \[Theta]5, \[Theta]6}, With[{rotateExpr = Simplify[ N[(Composition @@ RotationTransform @@@ Transpose[{{\[Theta]1, \[Theta]2, \[Theta]3, \[Theta]4, \[Theta]5, \[Theta]6}, Subsets[IdentityMatrix[4], {2}]}])[{x, y, z, w}]], Reals]}, Compile[{{r, _Real, 1}, {v, _Real, 1}}, Block[{\[Theta]1, \[Theta]2, \[Theta]3, \[Theta]4, \[Theta]5, \[Theta]6, x, y, z, w}, {\[Theta]1, \[Theta]2, \[Theta]3, \[Theta]4, \[Theta]5, \[Theta]6} = r; {x, y, z, w} = v; rotateExpr ], CompilationOptions -> {"ExpressionOptimization" -> True}, RuntimeOptions -> "Speed", RuntimeAttributes -> {Listable}, Parallelization -> True ] ]]; vertices = Flatten[Table[ Chop[rotationFunction[r, Prepend[IdentityMatrix[4], {0, 0, 0, 0}]]], {r, Pi*IdentityMatrix[6]}], 1]; hexadecachoron = Table[Simplex[{1, 2, 3, 4, 5} + 5 n], {n, 0, 5}]
Out[29]=
In[30]:=
Manipulate[ Graphics3D[{EdgeForm[Thick], Opacity[.25], GraphicsComplex[ rotationFunction[{\[Theta]1, \[Theta]2, \[Theta]3, \[Theta]4, \[Theta]5, \[Theta]6}, vertices][[All, ;; 3]], ResourceFunction["SimplexBoundary"][hexadecachoron]]}, PlotRange -> 1, ViewAngle -> Pi/10, Boxed -> False], {{\[Theta]1, 1}, -2 Pi, 2 Pi}, {{\[Theta]2, 1}, -2 Pi, 2 Pi}, {{\[Theta]3, 1}, -2 Pi, 2 Pi}, {{\[Theta]4, 1}, -2 Pi, 2 Pi}, {{\[Theta]5, 1}, -2 Pi, 2 Pi}, {{\[Theta]6, 1}, -2 Pi, 2 Pi} ]
Out[30]=

Neat Examples (2) 

The boundary of an annulus is two circles, while the boundary of a Moebius strip is a single circle:

In[31]:=
{ResourceFunction["SimplexBoundary"][\!\(\* GraphicsBox[ TagBox[ DynamicModuleBox[{ Typeset`mesh = {MeshRegion, {Method -> {"PropagateMarkers" -> False}}}}, TagBox[GraphicsComplexBox[CompressedData[" 1:eJxVVH1M1HUYP0loWtZc+dJgAhnnelsM+qfJekJBDTVfpkbFQbUoXxCSlQ0J KePo4MzE1dqIGLqFAVnKiyy6fFBepvHS8XLOBkRB56Lj/YB1cN2V9/08t/3Y 2Hf3/T3f5/l8Ps/necJfz9idGqDT6b78///O2bY+983SstvUqU5O+C3w3abF I9QzZh4qcw5z/MvLXjKsdlBhR/jD+4P+oCNJbRWW3lG6WnVke2NzH6U88MbJ nPYJei3jyejaCgsdGEkMLImaoBPxAcOns9vJXXHg54S1Ns4ngzXh6XH6QN2z xG1FvS5Vj1KRR/LmIY/E3530YLS+vChG5/ub9OOKA85rwCU4u5FX6jSq7yzf jT5cHgqovIPTzm/77t3U4otzcDt06YBO0IclL3ixzvfeRur9KDcBB3jxNtQH D84HL/DkRMWbwYsVz7Mx0J8LFE/BzQweyMtW1JH8x6Gz6LTE2jIeZfrCYkYe 6MXNyCO404FDcC0tLN32TFalRXDNq376eV8Bz0y8L9D2l9/X9o+N8IHS28b7 0Vcz3gEH9O8TXiQ8xZfSB+mLnPnop8eH0w4fuOFXB/T2wq+Cywu/9gsvvLeR 4q17Tul33qLqzJGcygdO+MvlP7twr/q3AJ9OkVerH37b/bjzgENwXQNu4SF5 4pBX+WKKpQ7qwhcu+N3B8t6geLPooOaxn6We+E54p0IniTdo/UHiS9kTat7t LHzEZ2bNnC7g9xTmxY15cWC+XCy6qvmbY9FbfHkQewJ1eAF1wQP+7xeeiG+X fjYqnpdiJD5f038P5tnu9/kC9hh0xPw5/PkToavsUdkbncAvPHrQH+GZru0H 5sffD16EOcHcSJ9Z+o4+Y06coiuLzs3AKTrv0e5X5Lcjvwff/f3G/Pr9iH3Q YBEdTeir7CkT+io4gYsE5xX0ORN45rX+543w0Un4aiN8fRK8oBuJjm3whegs vszU+NSL3+3YN17sm34uf/bc2ufDnBxWv7n20Ufs/OpVT153cQ2XLLN+nt81 y7FLJzI+SRhhfcErpz7qnvLfJ6k4+vGgudywdZJXrdi0xxg6RhsWPxVyYUsH Hzrc2rvFPEt2Z8jeyz/8TvpvNwxmR84w4ilExfPHzevf+d47Q72bvfG2qFv8 N+IjVDz9hHjJb0K8VcXTd03VyQM9U9zVuav0m4IB3nfsbGOoZ5zLbgQNGaod 7E4rdtftuETelMuta+KcvM5xPLmm7wavPDX26eogJ8c+NHh+SdUQ70qsiT0x PMkSpzvse+ePi1DvKPfMryHHIqd50+DOoyuD/6R7M40rkupHuDf4Qtr11lE6 FFq3KMA6yCnG3OkXo50UiDzISxezjDv0yTYqiRz4padwmknVp92of4/KRzdV PkY9SlD1eLi4tmqWZ6jwqGvVXV9Xc602H4EPgQ/NN0waT2dN0Gc5MV9F7L1N 92nzE/hROPhBT7qp9KT0nOVh6yr/4bCGEsf2tH7W45R7OR9T99Q6e+uJvtox Tl4+ty9wYoZMOz9M/zeonkznshPLylyUnB1eVBfVRXMFa94KfcHFLSqeUlQ8 X3xcX3P/e3MUXOQo8fb+Rdfx3YB8/wEFNBJf "], {Hue[0.6, 0.3, 0.95], EdgeForm[Hue[0.6, 0.3, 0.75]], TagBox[PolygonBox[CompressedData[" 1:eJwNw4V2qgAAANBNF67LpesO152uu7vDdTrEQgURKQUsQOp/3ne93XNuk9V2 aNWlpaX9+6v/W3sEm2ph5Obs7BxEzkAwaIZ54JjfGRvxwUf18wsuEwzcIEAN Vg3wx7v8yYNwdyFcXtgFNND8+C6HtqvQ9quSX8gqPwWbGu/pDsQE1JmQG+B6 b98RQO3H18ApYkab2xvNwTrktLAgSpRVCnZ0HXeKe44Tx34y4WchG7YdWs6n KtbwrU3n9KS3qjy0jdUc7IkH4iEuhnrjRbkcNZTMcG6ux33aljO1voHHkurc Vioa17CQwzslyQH7VRA1lhG40VmcTZ7fgk4j8en5wuqryRRhRkCicoVctaRm 51h/oiGRaVimvr880rxr1bUgbhySBheZbUj61VXStWbE+/rVaFF8d4cP3Lc0 B1rc8ntnN0PfB+i2Vrq1w/ooK5FwJwPR4ba28DNeXlGPwZH0np5wRMd8eBgd l5vX8xyW6YDy+l2Oh16Vl4guvQQqZUohzRv9LGWY7g/G89kJdUFsV/CqiR3w 96n+hh+W/elSfTHbMGuDfpcWpWltxqN8k8TKxZMdvBO8k1NcYVQfy0lZZntj cccJz0W9I6Oa8vZSFC3g8ibe39yL81J+LjVRyElTSw4ec1ESGhQol2Gwzw9j fFKf4dFFwrSbXClOZGXGY76BQT87PPAk27MSQ4on0sAmlLB7XO0f0XzatHdD xEOiwytx6pjPkiK10RmKk3JivWPqOJFyym46OZR4uBRAIfimuO/AW30y9h+L MeVS "]], Annotation[#, "Geometry"]& ]}], MouseAppearanceTag["LinkHand"]], AllowKernelInitialization->False], "MeshGraphics", AutoDelete->True, Editable->False, Selectable->False], DefaultBaseStyle->{"MeshGraphics", FrontEnd`GraphicsHighlightColor -> Hue[0.1, 1, 0.7]}, ImageSize->{Automatic, 99.8576}]\)], ResourceFunction["SimplexBoundary"][\!\(\* Graphics3DBox[ TagBox[ DynamicModuleBox[{Typeset`mesh = {MeshRegion, {}}}, TagBox[GraphicsComplex3DBox[CompressedData[" 1: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 "], {Hue[0.6, 0.3, 0.85], EdgeForm[Hue[0.6, 0.3, 0.75]], TagBox[Polygon3DBox[CompressedData[" 1:eJwBvwNA/CFib1JiAgAAADoBAAADAAAAAQIDBAUGBwgJCgYLDA0ODw4QERIF ExAIFAkVFhcYGRobHBUdHgsNHxsgISIXIyAkJSQiJicoKRgqKywtLi0vMC8x JjIzNDM1Njc4OTgyOjE7PB0aPTU+P0BBQkNERURGRyosSD5DSUFKS0pMTUZA Tjs3T0xQUVJTE1RVVldYWVpbXFtdXlhaX2BXYWJgY11kZWZkCmdoHmlnB2pU DGtpEWxtbgNtD1VrFG9qHHBvLnFyGXN0KXV2PHRwH3dzIXh5I3p3JXl6e1BS FnZ4fFNiMH1xK3J+R351On99OSiAToF/NoCBgoOENIUnSIaHRYiJe4qLTYyI SY2OS4+NQomGT4uPUZCKY5GSX5OUfJWQP46MVpaTXJKXXpiWWZeYPYeFmZpm mwMSmxFtnBEFnR5nnh4NnwponQoLnARsYZSVngxpoBMIoQ9rog8Qo4QDoQwO oAdUpAcJohNVpBRqpRQVpRxvpjwapykqqDxwphl0qR8gqhkbqh9zp0d1qSN3 qyV6rCF5rSEXqyMkrRZ4ril2rCUirhYYBGhsr0cssDY4sS5ysk5/sSstsy4v tDp9szBxtDAxryt+sjo7qBwdsDmAtTaBtU43tjkytzQntiYotyYzuDQ1uD2F uT0+unuLu0JEvEVGvE2Iu0WJvUKGvUhDvk1Avj+Mv0uNwEtMwXtSwE+PwkmO wj9Buk9QwVGKw1FTxFmYxXxixlZYw3yQxWGVx19XyGFgyF+Uv0lKx1aTgoRm yVlbxF5axl6WyVyXymNky1xdy2OSymaRzAGEFq52EZsSE6BUA5ttzaNuBJ9o EZxsBJwFB6AICp8GHp0LDJ4NDKFrCp1nD6EOE6IQHp5pD6JVKa4YB6RqI6t6 HKUVH6obFKVvHKhwGaYaPKgdPKZ0FKQJGapzAwISJaskI6kgH6l3Jax5Fq0X IawiIa14nwQGKad1XsSYOrQxK7FyLrNxMLMvLrEtK68sR69+MLR9OrJ/TrI7 NrCAuUiHObYoObA4JrcnJrYyNLczPbg1P8KOSLk+TbxGPbmHSL2GRbtEQr1D QruJNrU3RbyINLiFScJBP75ATb6MSb+NT8BMS79KS8CPTrWBT7qLe7pQY8td fMWVfMNTYciUYcViY8qRX8hgZspkUcOQVsdXWcRaWcmXX8eTXMlbXsZYVsaW XMuSR6cqzoJlo83Pg4LPg6PPZpqR0AHRbqMDe8GKhAEDAczRzJmE0pnRhJlm gs7PZYJmo4OEmczRUcFSAdACmdKaydpvxw== "]], Annotation[#, "Geometry"]& ]}], MouseAppearanceTag["LinkHand"]], AllowKernelInitialization->False], "MeshGraphics3D", AutoDelete->True, Editable->False, Selectable->False], Boxed->False, DefaultBaseStyle->{"MeshGraphics3D", FrontEnd`GraphicsHighlightColor -> Hue[0.1, 1, 0.7]}, ImageSize->{Automatic, 101.06325221053599`}, Lighting->{{"Ambient", GrayLevel[0.45]}, {"Directional", GrayLevel[0.3], ImageScaled[{2, 0, 2}]}, {"Directional", GrayLevel[0.33], ImageScaled[{2, 2, 2}]}, {"Directional", GrayLevel[0.3], ImageScaled[{0, 2, 2}]}}, Method->{"ShrinkWrap" -> True}, ViewPoint->{1.3, -2.4, 2.}, ViewVertical->{0., 0., 1.}]\)]}
Out[31]=

Get text outlines:

In[32]:=
ResourceFunction["SimplexBoundary"][ DiscretizeGraphics[Text["Hello world"], _Text]]
Out[32]=

Requirements

Wolfram Language 11.3 (March 2018) or above

Version History

  • 1.0.0 – 12 October 2018

Related Resources

License Information