University of Connecticut College of Liberal Arts and Sciences
Department of Mathematics
HOME SEARCH ABOUT US CONTACT INFO PEOPLE NEWS   WEB MAIL PRINTABLE VERSION

Exploring the Platonic Solids

Copyright: Kevin Marinelli, Department of Mathematics, University of Connecticut

This work was inspired from the book: Polehedron Models by Magnus J. Wenninger
All of the images have been created using the POV (Persistence of vision) ray tracer. Each of the models shown, is designed after the corresponding model as noted from the book. Construction details obviously differ because of the differences between using paper construction and the mathematical notation required by the rendering software. The POV source code for the geometry of each of the models is provided with each image shown. These are the precise model definitions used for the rendering in each scene.

Models for the five platonic solids (tetrahedron, cube, octahedron, icosahedron and dodecahedron) were obtained from the file "solids2.inc" which is provided with POV. The models for the Cube and Octahedron in POV were unnecessairily cumbersome, so I have provided simpler models for them here. In general, the platonic solids provided with POV are well designed and well thought out. The relationships of each model with its dual work out precisely so that the intermediate models are straight forward to compute, as can be seen from the source code provided with each scene.


The Tetrahedron and Its Dual, the upside down Tetrahedron

Tetrahedron


Tetrahedron.inc:

#declare Tetrahedron =
 intersection
  {plane {-y,1}
   plane {-z,1 rotate <19.47,    0, 0>}
   plane {-z,1 rotate <19.47, -120, 0>}
   plane {-z,1 rotate <19.47,  120, 0>}
   scale <0.5,0.5,0.5>
  }

Truncated Tetrahedron


TruncatedTetrahedron.inc:

#include "Tetrahedron.inc"
#declare TruncatedTetrahedron=
   intersection{
      object{Tetrahedron rotate < 0, 180, 0> }
      object{Tetrahedron scale <1.5,1.5,1.5>}
   }

Inverted Tetrahedron (Dual to Tetrahedron)


Tetrahedron2.inc

#declare Tetrahedron2 =
 intersection
  {plane {-y,1}
   plane {-z,1 rotate <19.47,    0, 0>}
   plane {-z,1 rotate <19.47, -120, 0>}
   plane {-z,1 rotate <19.47,  120, 0>}
   scale <0.5,0.5,0.5>
   rotate <0, 180, 0>
  }


The Cube and Its Dual, the Octahedron

Cube


Cube.inc

#declare Cube =
 intersection
  {
   plane { y,1}
   plane {-y,1}
   plane { x,1 }
   plane {-x,1 }
   plane { z,1 }
   plane {-z,1 }
  }

Truncated Cube


TruncatedCube.inc:

#include "Octahedron.inc"
#include "Cube.inc"
#declare TruncatedCube=
   intersection{
      object{Cube}
      object{ Octahedron scale <1.4, 1.4, 1.4>}    
   }

Cuboctahedron


CubOctahedron.inc:

#include "Octahedron.inc"
#include "Cube.inc"
#declare CubOctahedron=
   intersection{
      object{Cube}
      object{ Octahedron scale <1.173, 1.173, 1.173>}    
   }

Truncated Octahedron


TruncatedOctahedron.inc:

#include "Octahedron.inc"
#include "Cube.inc"
#declare TruncatedOctahedron=
   intersection{
      object{ Octahedron }
      object{Cube scale <1.15,1.15,1.15>}
   }

Octahedron


Octahedron.inc

#declare Octahedron =
 intersection
  {
   plane { <-1,-1,-1> 1}
   plane { <-1, 1,-1> 1}
   plane { < 1, 1,-1> 1}
   plane { < 1,-1,-1> 1}


   plane { <-1,-1, 1> 1}
   plane { <-1, 1, 1> 1}
   plane { < 1, 1, 1> 1}
   plane { < 1,-1, 1> 1}
}


The Icosahedron and Its Dual, the Dodecahedron

Icosahedron


Icosahedron.inc:

#declare Icosahedron = 
 intersection 
  {plane {-z, 1 rotate <52.6625,    0, 0>}
   plane {-z, 1 rotate <52.6625,  -72, 0>}
   plane {-z, 1 rotate <52.6625, -144, 0>}
   plane {-z, 1 rotate <52.6625, -216, 0>}
   plane {-z, 1 rotate <52.6625, -288, 0>}
   
   plane {-z, 1 rotate <10.8125,    0, 0>}
   plane {-z, 1 rotate <10.8125,  -72, 0>}
   plane {-z, 1 rotate <10.8125, -144, 0>}
   plane {-z, 1 rotate <10.8125, -216, 0>}
   plane {-z, 1 rotate <10.8125, -288, 0>}
   
   plane {-z, 1 rotate <-52.6625,  -36, 0>}
   plane {-z, 1 rotate <-52.6625, -108, 0>}
   plane {-z, 1 rotate <-52.6625, -180, 0>}
   plane {-z, 1 rotate <-52.6625, -252, 0>}
   plane {-z, 1 rotate <-52.6625, -324, 0>}
   
   plane {-z, 1 rotate <-10.8125,  -36, 0>}
   plane {-z, 1 rotate <-10.8125, -108, 0>}
   plane {-z, 1 rotate <-10.8125, -180, 0>}
   plane {-z, 1 rotate <-10.8125, -252, 0>}
   plane {-z, 1 rotate <-10.8125, -324, 0>}
  }

Truncated Icosahedron


TruncatedIcosahedron.inc:

#include "Icosahedron.inc"
#include "Dodecahedron.inc"
#declare TruncatedIcosahedron=
   intersection{
      object{Icosahedron}
      object{ Dodecahedron  scale <1.0, 1.0, 1.0>}    
   }

Icosidodecahedron


IcosiDodecahedron.inc:

#include "Icosahedron.inc"
#include "Dodecahedron.inc"
#declare IcosiDodecahedron=
   intersection{
      object{Icosahedron}
      object{ Dodecahedron  scale <0.9,0.9,0.9>}
   }

Truncated Dodecahedron


TruncatedDodecahedron.inc:

#include "Icosahedron.inc"
#include "Dodecahedron.inc"
#declare TruncatedDodecahedron=
   intersection{
      object{ Dodecahedron  }
      object{Icosahedron scale <1.15,1.15,1.15>}
   }

Dodecahedron


Dodecahedron.inc:

#declare Dodecahedron = 
 intersection 
  {plane {-z, 1 rotate <-26.56505117708,    0, 0>}
   plane {-z, 1 rotate <-26.56505117708,  -72, 0>}
   plane {-z, 1 rotate <-26.56505117708, -144, 0>}
   plane {-z, 1 rotate <-26.56505117708, -216, 0>}
   plane {-z, 1 rotate <-26.56505117708, -288, 0>}
   
   plane {-z, 1 rotate <26.56505117708,  -36, 0>}
   plane {-z, 1 rotate <26.56505117708, -108, 0>}
   plane {-z, 1 rotate <26.56505117708, -180, 0>}
   plane {-z, 1 rotate <26.56505117708, -252, 0>}
   plane {-z, 1 rotate <26.56505117708, -324, 0>}
   
   plane { y, 1}
   plane {-y, 1}
  }

Interpenetrating Duals

Other Convex Solids

Rhombicuboctahedron


RhombiCubOctahedron.inc:

#include "Octahedron.inc"
#include "Cube.inc"
#declare RhombiCubCctahedron=
   intersection{
      object{Cube}
      object{Cube rotate <45 0 0>}
      object{Cube rotate <0 45 0>}
      object{Cube rotate <0 0 45>}
      object{ Octahedron scale <1.05, 1.05, 1.05>}    
   }

Rhombitruncatedcuboctahedron


RhombiTruncatedCubOctahedron.inc:

#include "Octahedron.inc"
#include "Cube.inc"
#declare RhombiTruncatedCubOctahedron=
   intersection{
      object{Cube}
      object{Cube scale <1.1,1.1,1.1> rotate <45 0 0>}
      object{Cube scale <1.1,1.1,1.1> rotate <0 45 0>}
      object{Cube scale <1.1,1.1,1.1> rotate <0 0 45>}
      object{ Octahedron scale <1.06,1.06,1.06> }
   }



Stellated Platonic Solids

Stellated Octahedron


StellatedOctahedron.inc:

#include "Tetrahedron.inc"
#declare StellatedOctahedron=
   union{
      object{Tetrahedron rotate <180, 0, 0> }
      object{Tetrahedron }
   }


Sample POV Scene: Cube

Below is a sample mode file: Cube.pov. It is the data file used for rendering the Cube scene above. Actually, it is a typical file that was used for all of the scenes above. All that is required for a different model is to change the name of the include file ane change the name of the object being rendered to the apropriate name of the included model. For instance, to render the truncated icosahedron, all that is required in the POV input file is to change all occurances of "Cube" to "TruncatedIcosahedron" and then run POV on the new input file.

Cube.pov

global_settings { assumed_gamma 2.2 }

#include "colors.inc"           // Standard POV colors library
#include "textures.inc"         // Standard POV Textures library
#include "Scene.inc"
#include "Cube.inc"

object{ Cube 
        finish{Shiny} 
        pigment{CadetBlue}
        translate <0,1,0>
        rotate <0,-20,0> 
}

Scene.inc

camera {
   location <8.0, 4, 0>
   direction <0.0, 0.0, 1.5>
   up  <0.0, 1.0, 0.0>
   right <4/3, 0.0, 0.0>
   look_at <0, 0, 0>
}

background {color SkyBlue}

light_source { <0, 300, 0> color White shadowless }
light_source { <20, 15 ,-4> color White shadowless}
light_source { <20, 15 , 4> color White }

plane{ 
   <0,1,0>,0
   texture{DMFWood6}
}

 
UConn The Web People
  
ACTUARIAL SCIENCE MATHEMATICS FINANCIAL MATHEMATICS