|
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}
}
|