Message Boards Message Boards


Weaire–Phelan structure in mathematica

Posted 8 years ago
7 Replies
5 Total Likes

Hello friends I hope you are well, I tell them the reason why today I write, after seeing a video where they explain some things about the Weaire–Phelan structure, I wonder, can be such a structure in mathematica?, I search on wolfram alpha on the Weaire–Phelan structure, but I got nothing, maybe introduced it evil in that search engine , if someone can tell me how to make that structure in mathematica is grateful, I intend to do something further along with this structure, greetings to all.

enter image description here

POSTED BY: Luis Ledesma
7 Replies
Posted 8 years ago

Udo Krause, thank you very much for the help you have given , particularly for the construction of Tetrakaidecahedron,I could not do much , I must clarify that I was doing in Mathematica 9 and the code that you shared , I can not run entirely due to differences between versions of Mathematica.

The solution that my colleagues and I proposed was , getting the structure in 3D and manipulate a bit in Mathematica ( rotate and scale ) .

I am currently involved in other things concerning text manipulation so I have little time to go into this, but when I have some time available , I will continue the steps that you have told me .

Thanks again,greetings

Luis Ledesma

POSTED BY: Luis Ledesma

How far did you proceed, Luis?

In case you want a job list, here it is. Co-ordinates come from the citation you gave Wearie-Phelan Bubbles

    (* Dodecahedron *)
    ddh = Partition[{3.1498, 0, 6.2996,
       -3.1498, 0, 6.2996,
       4.1997, 4.1997, 4.1997,
       0, 6.2996, 3.1498,
       -4.1997, 4.1997, 4.1997,
       -4.1997, -4.1997, 4.1997,
       0, -6.2996, 3.1498,
       4.1997, -4.1997, 4.1997,
       6.2996, 3.1498, 0,
       -6.2996, 3.1498, 0,
       -6.2996, -3.1498, 0,
       6.2996, -3.1498, 0,
       4.1997, 4.1997, -4.1997,
       0, 6.2996, -3.1498,
       -4.1997, 4.1997, -4.1997,
       -4.1997, -4.1997, -4.1997,
       0, -6.2996, -3.1498,
       4.1997, -4.1997, -4.1997,
       3.1498, 0, -6.2996,
       -3.1498, 0, -6.2996}, 3]

(* Tetrakaidecahedron *)
tkh = Partition[{3.14980, 3.70039, 5,
   -3.14980, 3.70039, 5,
   -5, 0, 5,
   -3.14980, -3.70039, 5,
   3.14980, -3.70039, 5,
   5, 0, 5,
   4.19974, 5.80026, 0.80026,
   -4.19974, 5.80026, 0.80026,
   -6.85020, 0, 1.29961,
   -4.19974, -5.80026, 0.80026,
   4.19974, -5.80026, 0.80026,
   6.85020, 0, 1.29961,
   5.80026, 4.19974, -0.80026,
   0, 6.85020, -1.29961,
   -5.80026, 4.19974, -0.80026,
   -5.80026, -4.19974, -0.80026,
   0, -6.85020, -1.29961,
   5.80026, -4.19974, -0.80026,
   3.70039, 3.14980, -5,
   0, 5, -5,
   -3.70039, 3.14980, -5,
   -3.70039, -3.14980, -5,
   0, -5, -5,
   3.70039, -3.14980, -5}, 3]

display them with


enter image description here

visit elements (2-faces, 1-faces (edges), 0-faces (points))

MeshCells[ConvexHullMesh[ddh], 2]
MeshCells[ConvexHullMesh[tkh], 1]


  • have list of faces of the ddh and a list of faces of tkh which fit together to make up the bubble
  • have a list of glueing faces of the bubble (face and what fits to it)
  • take one (a ddh or a tkh) as starting polyhedron of the bubble
  • select one of the glueing faces by random
  • use FindGeometricTransform to bring the next polyhedron (of the fitting type) into fitting position
  • update the list of glueing faces of the bubble
  • repeat the last three steps as long as it pleases you
  • don't forget to rotate the bubble (and the corresponding lists)
  • mind a bit about data structures (otherwise it can become rather painful)

Written that way it will possibly not flow like a movie because of the continous use of FindGeometricTransform, but that's it already. Later on you can replace FindGeometricTransform with a set of explicit translations and rotations for the cases at hand.

It will be quite a bit harder to let the next polyhedron fly from a store at a fixed place into fitting position on the rotating bubble.

POSTED BY: Udo Krause

Cannot you get somewhere the data on types of polyhedra and vertex coordinates and attempt to build it from scratch? Using built-in PolyhedronData for example:

x = PolyhedronData["Dodecahedron"]

enter image description here

and also just mesh primitives if you know all coordinates, like:

vertexes = N[x[[1, 1]]];
faces = x[[1, 2]];
MeshRegion[vertexes, faces]

enter image description here

and also shifts, rotations, etc. with RotationTransform function? It looks a bit tedious but the basic unit is not that big and there is no fundamental difficulty in building it.

If you ever do it please come back and post your result here, it would be great to have.

POSTED BY: Sam Carrettie
Posted 8 years ago

After trying to build the structure of weire and phelam following some steps that i invented based on the page that i shared earlier, I have to say clearly that I am not very happy with the results obtained, by which i went back to search again on the internet for some new idea and I was pleasantly surprised to see that the structure is made in grasshopper as you can see on the following link, weaire phelan using grasshopper

you will recall that there is a video where Cris Carlson shows that you can use Mathematica and grasshopper together, the problem is that I do not know if there is a file of grasshopper that contains information on how to make this structure and if someone can help me do that in Mathematica. Waiting for any kind of help on your part,

I say goodbye wishing him all an excellent day.

POSTED BY: Luis Ledesma
Posted 8 years ago

Hello again, researching on the internet about this structure, I found the following page that I am
using my own structure because I believe that it contains information that is useful for me,

Wearie-Phelan Bubbles

I share the link, i would like to take this opportunity to share the winners acoount video where it is possible to appreciate the structure of Phelam, don't know if you can do something similar in Mathematica,

greetings to all.

POSTED BY: Luis Ledesma

In a general form those structures should be the result of VoronoiMesh for the 3D case. The documentation ("Details and Options") says:

The cells will be intervals in 1D, convex polygons in 2D, and convex polyhedra in 3D.

Consequently the 3D case should be feasible, but I could not make that work. I defininitely would like to know how to do that.

Regards -- Henrik

POSTED BY: Henrik Schachner

Interesting I haven't realized before that an idealized foam of equal-sized bubbles has a name in geometry - namely the Weaire–Phelan structure. MathWorld has a note on this: Kelvin's Conjecture. Interesting to know that Beijing National Aquatics Center (built for the swimming competitions of the 2008 Summer Olympics) has the outer wall based on the Weaire–Phelan structure devised from the natural pattern of bubbles in soap lather. I agree it would be interesting to have this in Wolfram Language, perhaps as built in computable geometry structure.

enter image description here

POSTED BY: Sam Carrettie
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
or Discard

Group Abstract Group Abstract