This computation essay considers the geometric and algebraic properties of the holes formed from randomly aggregation regular pentagons within the two dimensional Euclidian plane. We do this by using methods from packing problems, tessellation problems, as well as some techniques from abstract algebra. We also explore the densities formed from the aggregations when we treat them like packings, we explore both the densities gained from finite and infinite aggregations. We form decompositions of holes as elements of a specific non-commutative monoid structure, we also look at a specific set of “prime holes” that generate this monoid and consider the algebraic relations between these holes.
Introduction
Introduction
Pentagonal tiling is a very non-trivial problem that is concerned with tiling the plane using pentagons. Pentagonal packing problems are also extremely non-trivial and difficult problems that deal with packing specific pentagons into space as to maximize the space taken up by pentagons. There do exist known pentagonal tilings (as shown below), however one may notice that there is no tiling using only regular pentagons,
In[]:=
periodicPentagonalTilings
Out[]=
One can easily see that this is because three regular pentagons attached at a vertex leave empty space, and four pentagons cause intersection between them. Thus one may turn and look at packings, there are packings of regular pentagons known with the best known packing having density 92% is quite complicated and not particularly useful in a lot of cases. There is another “type” of packing that one could consider, so called aggregations.
Definition 1. (Pentagonal Aggregations)
A Pentagonal Aggregation (Aggregation of Regular Pentagons) is a packing formed by starting at some seed pentagon, and randomly adjoining pentagons to at the sides.
A Pentagonal Aggregation (Aggregation of Regular Pentagons) is a packing formed by starting at some seed pentagon, and randomly adjoining pentagons to at the sides.
One may see very easily that the optimal tiling for regular pentagons is not an aggregation as the edges do not fall flush with each other, however the tilings formed by irregular pentagons are considered aggregations as there edges lay flush with each other. As regular pentagons do not tile Euclidian space, we cannot form aggregations without having holes, the holes in packings are not studied very much, and especially ones formed from aggregations.
Aggregating Pentagons
Aggregating Pentagons
Our goal is to find the algebraic properties of the holes formed when you aggregate pentagons in the plane, and possibly find a value for the expected density of the packing acquired for a random aggregation. We may start by considering some notation, we can uniquely describe a pentagon (all pentagons are assumed to be regular and of unit side length) by a pair for some point , this pair encodes the geometric centroid of the pentagon as well as its angle of rotation (radians) θ, this notation is very convenient as instead of having to describe all the vertices, one may simply use a pair of a point and an angle. We may start by constructing a function that will adjoin a pentagon to some seed pentagon at a specific side (We adopt the standard side convention of naming Side1: Vertex1->Vertex2,..., Side5: Vertex5->Vertex 1, where Vertex1 is the bottom left vertex of the pentagon when θ=0). We may do this by calculating the geometric centroid of the pentagon based off the two vertices of the edge that it is attached to.
(p,θ)
p
p
Adjoins a pentagon onto the nth side of an existing one, and returns its geometric centroid along with its angle of rotation.
In[]:=
adjoinPentagon[GeometricCentroidX_,GeometricCentroidY_,θ_,n_]:={{GeometricCentroidX+2/(2Tan[Pi/5])*Sin[(2*(n-1)*Pi)/5+θ],GeometricCentroidY-2/(2Tan[Pi/5])*Cos[(2*(n-1)*Pi)/5+θ]}, Pi+(2*(n-1)*Pi)/5+θ}
We may then find the vertices of this new pentagon, and graph each case of adjoining a pentagon,
Returns the vertices of the adjoined pentagon instead of returning its centroid along with angle of rotation.
In[]:=
adjoinPentagonVertices[GeometricCentroidX_,GeometricCentoidY_,θ_,n_]:=rotVertices[adjoinPentagon[GeometricCentroidX,GeometricCentoidY,θ,n][[1,1]],adjoinPentagon[GeometricCentroidX,GeometricCentoidY,θ,n][[1,2]],adjoinPentagon[GeometricCentroidX,GeometricCentoidY,θ,n][[2]]]
In[]:=
adjoinedPentagons
Out[]=
,
,
,
,
In[]:=
Now that we can adjoin pentagons to each other, we need some way to check if an edge is being shared by two pentagons. We can do this by looking for pairs of equal points in the list of all the vertices, however we may do this much more efficiently by only looking at if the norms of the points are within a specific distance (10^-8 was chosen for accuracy) from each other.
Checks if a two pentagons are sharing a side and returns a truth value based off of that.
In[]:=
edgeShareQ[pentagon1_List,pentagon2_List]:=Module[{v1=rotVertices[pentagon1[[1,1]],pentagon1[[1,2]],pentagon1[[2]]],v2=rotVertices[pentagon2[[1,1]],pentagon2[[1,2]],pentagon2[[2]]],v1n,v2n,pairs,matches},v1n=N[v1];v2n=N[v2];pairs=Flatten[Table[If[Norm[v1n[[i]]-v2n[[j]]]<10^-8,{v1[[i]]},{}],{i,Length[v1]},{j,Length[v2]}],1];matches=Select[pairs,Length[#]>0&];{Length[matches]>=2,matches}]
From this, we are almost able to make our final aggregation function, however we need a a function to find the open edges in a space of pentagons, as well as a test to see if two pentagons are intersecting. We may form our open edges function by searching the list of vertices in the seed pentagon with the list of vertices in the list of existing pentagons (the seed pentagons cannot be in the list of existing pentagons) and if there is a non-zero intersection we pass those sides through our side index function and return the complement of the output (as to get a list of the open sides).
Checks for the sides of a base pentagon that are not being occupied by any other pentagon in the space and returns a list of the open sides.
In[]:=
openEdges[seedPentagon_List,existingPentagons_List]:=Module[{seedV=rotVertices[seedPentagon[[1,1]],seedPentagon[[1,2]],seedPentagon[[2]]],matchesPerPentagon,sameQ,closedQ},sameQ[p1_,p2_]:=Norm[N[p1-p2]]<10^-8;matchesPerPentagon=Table[Flatten[edgeShareQ[seedPentagon,existingPentagons[[k]]][[2]],1],{k,Length[existingPentagons]}];closedQ[i_]:=AnyTrue[matchesPerPentagon,AnyTrue[#,sameQ[#,seedV[[i]]]&]&&AnyTrue[#,sameQ[#,seedV[[Mod[i,5]+1]]]&]&];Select[Range[5],!closedQ[#]&]]
We now may move on to our intersection function, we can construct this function by looking at the dimension of the intersection of pentagons (we do this as to make it return false when the pentagons are simply adjoined at the edges), and if the dimension is more that zero we have an intersection.
Checks if any pentagons in a space intersect each other and returns a truth value based off that along with the set of intersecting pentagons.
In[]:=
pentagonIntersectionQ[pentagons_List]:=Module[{n=Length[pentagons],intersectingPairs},intersectingPairs=Select[Flatten[Table[If[i<j,If[RegionDimension[RegionIntersection[Polygon[N[rotVertices[pentagons[[i,1,1]],pentagons[[i,1,2]],pentagons[[i,2]]]]],Polygon[N[rotVertices[pentagons[[j,1,1]],pentagons[[j,1,2]],pentagons[[j,2]]]]]]]>=2,{{pentagons[[i]],pentagons[[j]]}},{}],{}],{i,1,n},{j,1,n}],2],Length[#]>0&];If[Length[intersectingPairs]>0,{True,intersectingPairs},{False,{}}]]
Now that we have these tests, we can finally create our aggregation function. Our aggregation function should take the output of adjoinPentagon[] and add it to a list of pentagons in the space, it should then choose from that list at random and choose from the edges in that list at random and check if that edge is open and if it we to adjoin a pentagon to that edge if it would intersect any other pentagons, if either of those fail it should throw that list into a list of edges that are “closed” as to never check it again, it should then repeat this process until it finds an edge that will work, then after adjoining a pentagon it should repeat this process times. We may then graph the result for 50 pentagons (with the red pentagon always being the starting place),
n
Chooses a random side from a list of open sides, and if that is a valid place for a new pentagon it places one there and repeats, if it is not it throws that side into a list of bad sides as to not check it again, it then repeats until there is n+1 total pentagons (counting the initial pentagon).
In[]:=
aggregatePentagons[pentagon_,n_]:=Module[{allPentagons={pentagon},blockedEdges={{}},successCount=0,available,edgeChoice,candidate,testList,intersectResult,candidatesWithOpenEdges,chosenIndex},While[successCount<n,candidatesWithOpenEdges=Table[If[Length[Complement[openEdges[allPentagons[[i]],Delete[allPentagons,i]],blockedEdges[[i]]]]>0,i,Nothing],{i,Length[allPentagons]}];If[candidatesWithOpenEdges==={},Break[] ];chosenIndex=RandomChoice[candidatesWithOpenEdges];available=Complement[openEdges[allPentagons[[chosenIndex]],Delete[allPentagons,chosenIndex]],blockedEdges[[chosenIndex]]];If[Length[available]==0,Continue[]];edgeChoice=RandomChoice[available];candidate=adjoinPentagon[allPentagons[[chosenIndex,1,1]],allPentagons[[chosenIndex,1,2]],allPentagons[[chosenIndex,2]],edgeChoice];testList=Append[allPentagons,candidate];intersectResult=pentagonIntersectionQ[testList];If[intersectResult[[1]],blockedEdges[[chosenIndex]]=Append[blockedEdges[[chosenIndex]],edgeChoice],AppendTo[allPentagons,candidate];AppendTo[blockedEdges,{}];successCount++];];If[successCount<n,Message[aggregatePentagons::incomplete,successCount,n]];allPentagons]aggregatePentagonsGraph[n_]:=Module[{p},p=aggregatePentagons[{{0,0},0},n];Graphics[Table[{If[i==1,Red,ColorData[97][i]],Polygon[rotVertices[p[[i,1,1]],p[[i,1,2]],p[[i,2]]]]},{i,1,Length[p]}]]]
We may also look at the order in which the pentagons are placed,
If we instead of searching the list of sides randomly, we search it in order of creation, we get an aggregation that resembles a periodic Penrose tiling,
Repeats the same process of checking sides, except that if a side is bad, it does not randomly choose a new side, it chooses the earliest placed side.
The Uniqueness and Classification of Holes
The Uniqueness and Classification of Holes
Now that we can aggregate pentagons we may start to study the holes that are formed when we do this, we may start by noticing that the entire tile set of the Penrose P1 tiling will be holes that are formed at some point (this is because the Penrose P1 tiling is similar to aggregating pentagons and filling in the holes after), thus we may start by considering those tiles,
However one can see that there are other holes formed as well that are combinations of these four holes, such as this hole which is a combination of two crowns
One may beg the question, can we uniquely identify each hole simply based upon a pair of the number of vertices and the number of edges, and sadly we cannot. We may start at looking at the following hole formed by 5 pentagons (this hole can be found in the numbered 40 pentagon aggregation),
One may notice that this hole is really a configuration of the following holes,
Thus we may add these to our space of prime holes, however one may notice that the 4 sided shape can be constructed by two of the following triangle (3:3),
Thus it is not a prime hole. However one may also see that there are three holes prime that can be labeled as 3 thus our unique factorization fails (it was guessed that this would happen however it is nice to have a concrete example. One can also see that if we forcefully reduce our set of Penrose P1 prototiles using our new prime tiles we may remove the Star, and Rhombus, using the (3:1) Triangle, and remove the Crown using the (3:3) and (3:1) triangle, however for the sake of generality, we will not consider the fully reduced set as of now. We may now consider the following theorem,
Now that we have proven Theorem 1. (See Proof of Theorem 1.), we may see that this is our final set of holes,
One may notice a lot of seemingly out of place rotations, however this is a byproduct of how multiplication in this system functions. We may construct any hole by consulting the following table,
Then we may choose triangles that form our hole (however we must be careful how we construct the multiplications as they are very non-trivial), for example we may construct our 2 composite holes from earlier,
However this is not a problem and one can simply choose to use the simplest one.
Properties of the Algebra Containing Holes
Properties of the Algebra Containing Holes
This is nice, however the only actually useful table for word length two is the following much smaller table,
The Proportion Of Holes Of Specific Types
The Proportion Of Holes Of Specific Types
We may instead however look at what percentage of the total holes each one takes up (this is for 20,000 pentagons [in reality it is for 100 different random aggregations of 200 pentagons, however it will produce the same result as 20,000 pentagons]),
As we predicted, the rhombus’ dominate taking up 64% of the holes with crowns taking up 20%, and double crowns taking up 3%.
An Approximation For The Expected Density Of The Packing Formed
An Approximation For The Expected Density Of The Packing Formed
Let us now turn our attention to a more packing problem viewpoint. Our aggregations will form a packing, however as one may guess, this packing is not very efficient. We would like to find the expected density of the packings formed from our aggregation, however this is a very non-trivial task as the pentagons are packed very irregularly. Let us start by showing that if we can construct some Aperiodic Mesh Tiling from the set of prime holes along with the regular pentagon, that we can find any aggregation of pentagons within that tiling. This however is also a very non-trivial problem, thus we may simplify it one more time to get the following theorem.
Now that we have proven Theorem 2 (See Proof of Theorem 2) we may from a much more powerful theorem based off this one along with a very important Corollary,
However one may guess that this will not be a problem for an infinite aggregation and thus form the following two statements.
Let us now look at the actual average densities of for some given number of pentagons. We may do this by using the following functions,
Finds the density of an aggregation and returns the density along with the aggregation the calculation was based off.
And we may notice that it does match our guess of being near but slightly above 0.25 on average with each one being around 0.33.
Further Generalizations
Further Generalizations
We have looked at aggregating regular pentagons in a Euclidean space, however there are several possible generalizations.
Battling Aggregations
Battling Aggregations
One very simple generalizations is to simply start two (or more) aggregations at different points and have them “compete” with each other. As the aggregations are completely separate at the initial state, there is no guarantee that they will connect, however one may guess that at some point in an battle of infinite aggregations that they will connect at one point. If two aggregations are guaranteed to connect one may simply approximate the density via the methods outlined in Section 4. (See Section 4.), however if one could construct a battle where a connection could never form any connections (this is theoretically possible, as one could reason that there is only a finite number of rotated states that a pentagon formed from the aggregation can be in, thus one could rotate the initial pentagon of the second aggregation by some constant that causes the rotations between each to be misaligned at every point), one could guess that the density will be more efficient, as the pentagons will not be restricted to being flush with one another and instead may form tighter packings. One may also look at battles of more than two aggregations and one may, however one may guess that as the number of battling aggregations increase, unless some of them connect, the packing density will become less efficient. This is because as the number of misaligned rotations increase, the less configurations that minimize space can exist as they will quickly become to incompatible with each other and not be able to form tight configurations. However, one may also guess that globally the packing density should stay the same as a single aggregation, as the “battleground” sections of the final aggregations will only take up a negligible region of the total aggregation (for a large enough aggregation), and one may form the naive argument (for an aggregation of sufficient size) that for every pocket of inefficient density, there will be a similarly sized pocket of super-efficient density and thus the global density should stay approximately the same.
Non-Euclidian Generalizations and Other Spatial Generalizations
Non-Euclidian Generalizations and Other Spatial Generalizations
Aggregations Using Other Tiles and Poly-Tile Aggregations
Aggregations Using Other Tiles and Poly-Tile Aggregations
Aggregations Using Other Regular Tiles
Aggregations Using Other Regular Tiles
It is a well known fact that any regular polygon with seven or more sides along with the regular pentagon cannot tile space, and thus if we aggregate these shapes they will form holes for increasing complexity. The aggregations themselves will also become much more complex, as there will be many more sides to adjoin the next pentagon to. Computation will be extremely hindered as the list of open sides will increase astronomically. One may consider the limit of this process, that being aggregating circles by placing the point (0,1) onto any point onto any point on another circle, the holes formed from this process could theoretically be viewed as a free product over hyperbolic spaces, however it does not have much of an application.
Aggregations Using Irregular Tiles
Aggregations Using Irregular Tiles
Poly-Tile Aggregations
Poly-Tile Aggregations
Strategic Aggregations
Strategic Aggregations
So far we have mostly considered random aggregations, with the exception of our flower like aggregation. It is easily seen that said aggregation optimizes the density (this is because it is only comprised of the smallest composite hole), thus we may say that the strategy it uses (checking the list of edges in the order they were placed) optimizes density. Where as we may say that our random aggregation has no strategy. We may consider some strategies, such as trying to maximize the distance from the seed tile (note that this strategy is equivalent to trying to minimize the density of the packing formed), this strategy is trivial (just makes a single large tower) for regular tiles that have an even number of sides, however for regular tiles with an odd number of sides the structure that forms is a branching curved spire (irregular tiles will also produce some non-trivial patterns however we will only consider regular tiles). Another strategy is maximizing the distance from the last tile placed, and it is again trivial for an even sided tile, but will produce several curved spires for an odd sided shape (this is because of the lack of reflectional symmetry). There are many more strategies that one could consider, however they follow similar formats.
Battle Strategies
Battle Strategies
We have seen that given we give our aggregation function a goal or a strategy we may form new patterns that most likely would never occur within a random aggregation. However things get much more interesting when we introduce a second (any number in general) aggregation with a strategy of it’s own. When we introduce more aggregations, we gain new strategies that we can could give to our aggregators, such as trying to maximize the number of sides that it connects to from a different aggregations, and trying to minimize the number of connections to a different aggregation (these aggregations require the rotations to line coincide with each other), if we give one each of these strategies to an aggregator and the other one to an opposing aggregator we will get a much more interesting battle then if they both have no strategy. We may even give both the same strategy and still get extremely interesting battles, such as having them both try to get as close as possible to each others seed pentagon while trying to keep other aggregations as far away from there own.
Intelligent Battle Strategies
Intelligent Battle Strategies
We may also look at battle strategies that have an oracle which knows the other aggregators strategies and tries to predict there moves. For example, we may again consider the case where both aggregators have to try to get as close as possible to each others seed pentagon while trying to keep other aggregations as far away from there own, the first aggregators oracle will know that the second team will attack and thus will start to defend itself by building a wall (we must limit how far into the future the oracle can look into as to prevent logical loops from forming). We may add oracles to each aggregator that can predict what the oracle below them is thinking and so on.
Conclusion
Conclusion
We have seen that we can express the holes formed from aggregating pentagons as algebraic expressions, and that the space of all the holes has a notion of prime holes and composite holes. We have also seen that we can use tools from tessellations to find lower (finite aggregations) and upper bounds (infinite aggregations) for the expected density of the packings formed from aggregations which are 0.25 and 0.75 respectively. We have shown an example of an aggregation with a strategy versus a random aggregation and shown that these strategies can lead to very intricate patterns. We have seen some underlying statistics surrounding these holes, with the main one being the likelihood (this is the same as the percent of the total holes that a specific hole takes up in an aggregation) of a hole forming, however we have also seen some statistics specific to the aggregation such as it’s density. We have explored the algebraic properties of the monoid that contains the composite holes formed in an aggregation and showed that it has some very nice decompositions into other algebraic structures and that it has a large amount of symmetry restricted to specific words (this is due to the finite part of the automorphism group being so large). We have also explored some further generalizations and other paths that could be explored. In conclusion, the holes formed from aggregating regular pentagons form a rich algebraic structure that merges geometry and group theory.
References
References
Acknowledgements
Acknowledgements
I would first like to give much thanks to my mentor Lusine Sukiasyan, she provided so much help and support, I would also like to acknowledge the contributions from Dugan Hammock and Dr. Stephen Wolfram as Mr. Hammock had already worked some in the field of my project, as had Dr. Wolfram and there advances within this field greatly aided this project. I would like to again thank Lusine Sukiasyan as my advocate, she got to know me as best she could and made sure the project I received was specialized to my line of focus. I would like to thank Megan and the other directors of the Wolfram Summer Research Program for creating such a welcoming and educational environment and making my time at the program extremely enjoyable. Finally, I would like to thank Dr. Wolfram once again for his mentorship and help with my project, as well as assigning me such a specialized and unique project.
CITE THIS NOTEBOOK
CITE THIS NOTEBOOK
The topology of pentagon aggregation and resultant void shapes
by James Butterfield
Wolfram Community, STAFF PICKS, July 9, 2026
https://community.wolfram.com/groups/-/m/t/3749929
by James Butterfield
Wolfram Community, STAFF PICKS, July 9, 2026
https://community.wolfram.com/groups/-/m/t/3749929