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
ConvexHullMesh[ddh]
ConvexHullMesh[tkh]
visit elements (2-faces, 1-faces (edges), 0-faces (points))
MeshCells[ConvexHullMesh[ddh], 2]
MeshCells[ConvexHullMesh[tkh], 1]
Now
- 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.