# Mark Newbold's POV-Ray Kaleidoscopes

These ray-traced kaleidoscope images were made using POV-Ray.
Click on a "thumbnail" picture to view a larger version of the same picture.

#### Spherical Kaleidoscopes (All 36-60-90 degrees):

Note the icosahedral symmetry of the images -- there are points which have 2-fold, 3-fold and 5-fold rotational symmetry (compare to the edge-centers, face-centers and vertices of an icosahedron).

(53,728 bytes)

(51,735 bytes)

(48,215 bytes)

(49,669 bytes)

#### Plane Kaleidoscopes:

Each Plane Kaleidoscope webpage consists only of a kaleidoscopic background and a "HOME" button.

Plane Kaleidoscope (30-60-90 degrees)

Plane Kaleidoscope (60-60-60 degrees)

#### Making a Kaleidoscope Using POV-Ray:

Each of the above images is made using 3 mirrors. I use a fully-reflective plane to make a mirror in POV-Ray. For a kaleidoscope effect, the angle of intersection between any pair of mirrors must divide evenly into 180 degrees. That causes a reflected image to exactly coincide with the original object after some number of reflections.

#### Making a Plane Kaleidoscope:

To make a plane kaleidoscope, I map an image onto a plane using an "image_map". I place three mirrors perpendicular to that plane, forming a triangular column. The part of the image which is inside the triangle gets reflected kaleidoscopically when the scene is rendered. (I had to increase the "global_settings" max_trace_level to accommodate the large number of reflections.) The following triangles produce plane kaleidoscopes: 60-60-60, 30-60-90, 45-45-90 (degrees). These are the only possible triangles whose angles all divide evenly into 180 degrees (taking into account the well-known fact that the sum of the three angles of a plane triangle is 180 degrees).

#### Making a Spherical Kaleidoscope:

To make a spherical kaleidoscope, I map an image onto a sphere using an "image_map". I place three mirrors so that they intersect at the center of the sphere (two mirrors intersect in a line, the third intersects that line at a single point). The three mirrors form a triangular wedge. The part of the image which is inside the wedge gets reflected kaleidoscopically over the surface of the sphere when the scene is rendered.

The only rule is that the angle of intersection between any pair of mirrors must divide evenly into 180 degrees. The "great circles" where the mirrors intersect with the sphere form a "spherical triangle" on the surface of the sphere. The angles of the spherical triangle are the same as the angles between pairs of mirrors so they must divide evenly into 180 degrees. The following spherical triangles produce spherical kaleidoscopes: 90-90-x (where x is a sub-multiple of 180 degrees), 60-60-90, 45-60-90 and 36-60-90 (degrees). These are the only possibilities (taking into account the fact that the sum of the three angles of a spherical triangle is always greater than 180 degrees).

These spherical kaleidoscopes have polyhedral symmetry plus reflection symmetry. (90-90-x = dihedral, 60-60-90 = tetrahedral, 45-60-90 = octahedral, 36-60-90 = icosahedral.)

#### Some POV-Ray Code (30-60-90 Degree Plane Kaleidoscope, shown above):

POV-Ray code for some other types is available on another page.
If you make any POV-Ray kaleidoscopes and put them on a web page, please send me the URL.

```  global_settings { assumed_gamma 2.2 }
global_settings { max_trace_level 24 }

camera {
location <0, 0, -4>
look_at <0, 0, 0>
right x
}

#declare myimage=pigment {
image_map {
gif "input\oak01.gif"
once
}
}

#declare Mirrors = union {
plane { <-1,0,0>, .5 }
plane { <0,-1,0>, .5 * tan(pi/6) }
plane { <sin(pi/6),cos(pi/6),0>, 0 }
finish {
reflection 1
ambient 0
specular 0
}
}

union {
plane { <0, 0, 1>, 0
pigment {myimage}
translate <-.5,-.5,0>
finish { ambient 1.4 }
}
object {
Mirrors
}
translate <1, tan(pi/6), 0> / 6
rotate 1*z
}
```

The final "translate" moves the whole thing so that the camera line-of-sight is in the center of the triangle of mirrors. The final "rotate" prevents some POV-Ray glitches that may occur due to mirrors being aligned exactly horizontally and vertically. The input image "oak01.gif" is a square non-interlaced GIF (mine was 300 x 300 pixels). Render with a square output image resolution (I added 300x300, 400x400, etc. to my RENDERER\QUICKRES.INI file).