/** * Copyright (c) 2005-2007 by Hank Dolben * Licensed under the Open Software License version 2.1 * http://opensource.org/licenses/osl-2.1.php */ package org.dolben.anim; import org.dolben.poly.ColoredFaces; import org.dolben.poly.TruncatedTetrahedron; import org.dolben.poly.TruncatedCube; import org.dolben.poly.TruncatedOctahedron; import org.dolben.poly.TruncatedDodecahedron; import org.dolben.poly.TruncatedIcosahedron; import org.dolben.poly.Cuboctahedron; import org.dolben.poly.Icosidodecahedron; import org.dolben.poly.TruncatedCuboctahedron; import org.dolben.poly.TruncatedIcosidodecahedron; import org.dolben.poly.Rhombicuboctahedron; import org.dolben.poly.Rhombicosidodecahedron; import org.dolben.poly.SnubCube; import org.dolben.poly.SnubDodecahedron; /** * An animated simulation of Archimedean solids bouncing around in a box.
                                   faces with n sides   n sides
                          vertices   3  4  5  6  8 10  at vertex
                                --  -- -- -- -- -- --  ---------
   TruncatedTetrahedron         12   4        4        3,6,6
   TruncatedCube                24   8           6     3,8,8
   TruncatedOctahedron          24      6     8        4,6,6
   TruncatedDodecahedron        60  20             12  3,10,10
   TruncatedIcosahedron         60        12 20        5,6,6
   Cuboctahedron                12   8  6              3,4,3,4
   Icosidodecahedron            30  20    12           3,5,3,5
   TruncatedCuboctahedron       48     12    8   6     4,6,8
   TruncatedIcosidodecahedron  120     30    20    12  4,6,10
   Rhombicuboctahedron          24   8 18              3,4,4,4
   Rhombicosidodecahedron       60  20 30 12           3,4,5,4
   SnubCube                     24  32  6              3,3,3,3,4
   SnubDodecahedron             60  80    12           3,3,3,3,5
 
*/ public class ArchimedeanGas extends Collidoscope { /** * Creates the bodies in the simulation. */ protected void createBodies( double[] limit ) { final int N = 13; // number of solids // make the radius so that the volume taken up is // about the same as the Platonics double volume = 1.0/(10*N); for ( int i = 0; i < 3; i++ ) { volume *= 2*limit[i]; } /* V = 4/3 ¹ r^3; r = 3/4/¹ V^(1/3) */ double radius = Math.pow((3/4.0)/Math.PI*volume,1/3.0); initBody(new ColoredFaces(new TruncatedTetrahedron ()),radius); initBody(new ColoredFaces(new TruncatedCube ()),radius); initBody(new ColoredFaces(new TruncatedOctahedron ()),radius); initBody(new ColoredFaces(new TruncatedDodecahedron ()),radius); initBody(new ColoredFaces(new TruncatedIcosahedron ()),radius); initBody(new ColoredFaces(new Cuboctahedron ()),radius); initBody(new ColoredFaces(new TruncatedCuboctahedron ()),radius); initBody(new ColoredFaces(new Rhombicuboctahedron ()),radius); initBody(new ColoredFaces(new Icosidodecahedron ()),radius); initBody(new ColoredFaces(new TruncatedIcosidodecahedron()),radius); initBody(new ColoredFaces(new Rhombicosidodecahedron ()),radius); initBody(new ColoredFaces(new SnubCube ()),radius); initBody(new ColoredFaces(new SnubDodecahedron ()),radius); } }