Contents

Home Home
Math Artwork Math Artwork
Gear Inventions and Artwork Gear Artwork
Physics Simulations and Artwork Physics
Simulations
Fluid Motion Simulations and Artwork Fluid Motion
Engineering Engineering
Hyperbolic Geometry Artwork Hyperbolic
Artwork
Fractals (not including hypercomplex fractals) Fractals
Hypercomplex Fractals Hypercomplex
Fractals
Minimal Surfaces Artwork Minimal
Surfaces
Rendered Artwork Rendered
Artwork
Hand-made Artwork Hand-made
Artwork
Bug Collection Bug
Collection
Programming Programming
High Voltage High
Voltage
Physics Experiments Physics
Experiments
The Bible The Bible
Links Links
Hyperbolic Geometry Artwork
Hyperbolic geometry can be very beautiful. Hyperbolic tilings are not technically fractals, but they appear as fractals when you look at them (because they must be projected into Euclidean space).

(12,4) Poincaré Ball - POV-Ray 3.6.1, 5/27/11
The Poincaré ball is the 3D analogy of the Poincaré disk. It is a projection of uniformly tiled hyperbolic polyhedrons from hyperbolic space into Euclidean space. This projection can be generated by recursively applying spherical inversions to the faces of a sphairahedron (a polyhedron with spherical faces). This is a (12,4) Poincaré ball, meaning that is was generated from a hyperbolic dodecahedron having 12 faces with 4 dodecahedrons meeting at each edge. You can purchase this as a poster here.
Here is the Poincaré ball viewed from the inside.

Links
article on 3D hyperbolic tilings - by Vladimir Bulatov
Hyperbolic Tesselations in 3D - by Jos Leys
Curved Spaces 3 - program for tiling spherical and hyperbolic 3D space, by Jeff Weeks
Hyperbolic Space Tiled by Dodecahedra - by Charlie Gunn
Convex Uniform Honeycombs in Hyperbolic Space - Wikipedia article
Icosahedral Honeycomb, Order-5 Cubic Honeycomb - by Claudio Rocchini

(7,3) Poincaré Hyperbolic Tiling - AutoLisp, POV-Ray 3.6.1, 4/28/11
These are (7,3) Poincaré hyperbolic tilings, meaning that each tile is a 7-sided polygon, and 3 polygons meet at each vertex. In real life (that is to say, in Euclidean space), it would be impossible to cover a plane with 7-sided polygons, but in hyperbolic space this is possible. These tilings were generated using a series of reflections called anti-homographies. I learned about homographies while participating at the Experimental Geometry Lab at the University of Maryland. Here is some Mathematica code:
(* runtime: 2 seconds *)
n = 7; m = 3; dt = 2Pi/n; dtm = 2Pi/m;r = 1.0/(1 - Sin[dt/2]/Cos[dtm/2]); R = r Cos[(dt + dtm)/2]/Cos[dtm/2];
ToMatrix[z_, r_] := (I/r) {{z, r^2 - z Conjugate[z]}, {1, -Conjugate[z]}};
alist = Table[ToMatrix[r Exp[I t],r - 1], {t, dt/2, 2 Pi, dt}]; Tlist = Join[{IdentityMatrix[2]}, alist];
homography[{{a_, b_}, {c_, d_}}, z_] := (a z + b)/(c z + d);
FindT[T0_, Tlist_] := MemberQ[Tlist, T_ /; Abs[homography[T, 0] - homography[T0, 0]] < 1.0*^-3];
i2 = 1; Do[i1 = i2 + 1; i2 = Length[Tlist]; Do[Scan[(T = Tlist[[i]].#; If[! FindT[T, Tlist], Tlist = Append[Tlist, T]]) &, alist], {i,i1, i2}], {3}];
Show[Graphics[Map[Line[Table[z = homography[#, R Exp[I t]]; {Re[z], Im[z]}, {t, 0, 2 Pi, dt}]] &, Tlist], AspectRatio -> Automatic]]

The left image uses a knotted surface pattern that was inspired after Bathsheba Grossman’s beautiful Quin Pendant Lamp, with permission from Bathsheba. Knotted surfaces like this can be extended to cover all kinds of arbitrary surfaces.
Hyperbolic tilings can also be visualized using circles. The left picture shows the (7,3) Poincaré hyperbolic tiling rendered using bubbles (an idea which Roger Bagula suggested to me). This is only possible using tilings with 3 polygons meeting at each vertex because bubble intersections must always meet at exactly 120° angles. Here is some Mathematica code to make a Poincaré tiling of tangent circles (you must run the above code before you can run this code):
(* runtime: 3 seconds *)
abs[z_] := Sqrt[z Conjugate[z]];
ReflectCircle[T_, {z_, r_}] := Module[{z1 = homography[T, z + r], z2 =homography[T, z + I r], z3 = homography[T, z - r], z0, r0}, {z0, r0} /. Solve[{abs[z1 - z0] == abs[z2 - z0] == abs[z3 - z0] == r0}, {r0, z0}][[1]]];
Show[Graphics[Map[({z, r} = ReflectCircle[#, {0, 1}]; Circle[{Re[z], Im[z]}, r]) &, Tlist], AspectRatio -> Automatic]]
I am selling mousepads using these designs here. Please email me if you are interested in purchasing this design on other formats (rugs, door mats, placemats, handbags, etc.)

Hyperbolic Links
Hyperbolic Java applet - by Don Hatch
HypEngine - 3D real-time hyperbolic maze by Bernie Freidin
MagicTile - program demonstrating hyperbolic variation of the Rubik's Cube, by Roice Nelson
Ruffled or Lettuce Sea Slug - hyperbolic surface in nature
Mathematica code - for animated Poincaré grid, by Matthew Cook
C# code for AutoCAD - by Kean Walmsley
Circle Limit III and Circle Limit IV - famous hyperbolic tessellations by M.C. Esher
“Escher Fish” - Mathematica version by Silvio Levy
Kangaroo Tiling - hyperbolic tessellation by Guy Cousineau, et. all

Conformal Mappings of the Poincaré (7,3) Hyperbolic Tiling - AutoLisp, POV-Ray 3.6.1, 5/10/11
There are many ways to distort an image, but conformal mapping is the only method that preserves angles. Poincaré disks are especially great for conformal mapping, because they represent a conformal projection from hyperbolic space to Euclidean space. Here are some examples of conformal mappings to multi-curl (or "murl" as described by Zueuk), rings, squares, regular polygons, and hearts. The images with a knotted surface pattern were inspired after Bathsheba Grossman’s beautiful Quin Pendant Lamp. See also my recursive Poincaré fractal.

Conformal Mapping Links
Ringworld - French article on hyperbolic ring tilings, by Jos Leys, see also his gallery
Sporogenesis, Blooming - beautiful multi-curl Poincaré tessellations, by Zueuk
Schwarz-Christoffel Mapping - method for mapping arbitray shapes
Conformal map for regular polygon in circle - Physics Forums discussion
Peirce's Quincuncial Map - maps to a square
Kaleidoscopes - includes some hexagon and square mappings of the Poincaré disk, by Vladimir Bulatov, see also his Google+ posts
Smarties: Pointy Heart - by Gadl

Conformal Mappings of the Poincaré (6,4) Hyperbolic Tiling - C#, 5/16/11
Here are some more complicated conformal mappings of the Poincaré disk. Click here for a more detailed explanation.

Conformal Mapping Links
Drost Effect - article by Jos Leys

Hyperbolic Dodecahedron - POV-Ray 3.6.1, 2/15/07
Hyperbolic polyhedrons can be visualized in Euclidean space using sphairahedrons (polyhedrons with spheres for each face). This pictures shows a hyperbolic dodecahedron composed of 12 spherical faces. This image was featured on the cover of McGraw-Hill's 2012 & 2013 Geometry textbooks. Click here to download some POV-Ray code for the hyperbolic dodecahedron.
<< Graphics`Polyhedra`; Show[Graphics3D[Polyhedron[Dodecahedron][[1]]]]

Links
Ideal Hyperbolic Polyhedra - POV-Ray renderings by Matthias Weber
Dodecahedral Machinery - by Ramiro Perez
Spikey - Mathematica’s cover image dodecahedron
Megaminx - dodecahedron-shaped Rubik's Cube
George Hart - polyhedra artist

Inside the Mirrored Hyperbolic Dodecahedron - POV-Ray 3.6.1, 2/15/07
This is what the dodecahedron would look like viewed from the inside with spherical mirrored walls. At certain dihedral angles, this resembles the inside of the Poincaré ball (although not exactly). Notice that when the space becomes elliptic, a black “hole” opens up in the center. This is because the space loops around on itself causing objects beyond the “maximum distance” to appear larger because they are actually closer. Weird huh?

Links
Hyperbolic Chamber - explantion and visuals Legos, by Jos Leys
Platonic Solids Kaleidoscope - by Laszlo Bardos

Inside the Mirrored Flat (Euclidean) Dodecahedron - POV-Ray 3.6.1, 2/12/07
Here is a dodecahedron viewed from the inside with flat mirrored walls.

Links
N-Light Membrane - amazing breathing cube with one-way mirrors, by Numen/ For Use
Simplicity to Complexity - Maya article by Duncan Brinsmead

Breather Pseudosphere - new version: POV-Ray 3.6.1, 6/21/06
old version: Mathematica 4.2, MathGL3d, POV-Ray 3.6.1, 9/30/04
A sphere is an elliptic surface with constant positive curvature. A pseudosphere is a hyperbolic surface with constant negative curvature. This pseudosphere is called a Breather. The animation shows how the surface changes from Kuen's surface into a breather with many ribs when the parameter is changed. Click here to download some POV-Ray code for this image and here for some AutoLisp code. Here is some Mathematica code:
(* runtime: 6 seconds *)
a = 0.498888; vmax = 47.1232; w = Sqrt[1 - a^2];
Breather[u_, v_] := Module[{d = a((w Cosh[a u])^2 + (a Sin[w v])^2)}, x = -u + 2w^2 Cosh[a u]Sinh[a u]/d; y = 2w Cosh[a u](-w Cos[v]Cos[w v] - Sin[v]Sin[w v])/d; z = 2w Cosh[a u](-w Sin[v]Cos[w v] +Cos[v]Sin[w v])/d; {x, y, z, {EdgeForm[], SurfaceColor[Hue[v/vmax]]}}];
ParametricPlot3D[Breather[u, v], {u, -10, 10}, {v, 0, vmax}, PlotPoints -> {49, 79}, Compiled -> False]

Links
Virtual Math Museum - beautiful rendition of this surface by Luc Benard, winning entry on cover of Science Magazine’s 2006 Visualization Challenge
POV-Ray Code - by Mike Williams, param.inc
Cooling Air Towers - also have a hyperbolic shape

Poincaré Hyperbolic Tessellation - AutoCAD 2000, AutoLisp, C#, Adobe Photoshop 5.0, 5/24/11
Technically, it is impossible to map a regular Euclidean tiling to the hyperbolic plane but it can still be done with some distortion. This (6,4) tiling of my Dinosaur tessellation was conformally mapped from a hexagon to a hyperbolic hexagon using a Hypergeometric function.


(3,∞) Poincaré Hyperbolic Tiling - Mathematica 4.2, 3/17/05
The area inside this circle represents a hyperbolic plane filled with “ideal triangles”. Notice that all the angles inside these triangles go to zero at the edge of the circle. The right animation shows how a single homography can transform the upper half plane into the Poincaré disk.

Links
Reducing Lizards - upper half plane tessellation by M.C. Escher

Hyperbolic Texture Mapping - left image: C#, POV-Ray 3.6.1, 6/21/11; right image: Mathematica 4.2, C++, 6/22/05
The Poincaré hyperbolic disk can be conformally mapped to the surface of a sphere. In this mapping, it almost looks like circles are preserved, but not quite. This makes me wonder whether it is possible to conformally map Poincaré disks onto other 3D surfaces. In the left image, the texture was precomputed using forward transformations (this is called the “push forward” method), and then it was mapped to the sphere. In the right image, the the texture was simultaneously calculated using inverse transformations (this is called the “pull back” method) while the sphere was being ray traced. Click here to download a Mathematica notebook for this image. Also, here is some C++ source code for this image.


(3,∞) Poincaré Hyperbolic Tiling - POV-Ray 3.6.1, 6/22/05
Click here to download some POV-Ray code for this image. Here is some Mathematica code:
(* runtime: 0.02 second *)
R = Sqrt[3]; Tiles = {Map[1.0 I{{#, R^2 - # Conjugate[#]}, {1, -Conjugate[#]}}/R &, {R + I, -R + I, -2I}]};
Tiles = Append[Tiles, Flatten[Table[Map[Tiles[[1, i]].Conjugate[Tiles[[1, #]]].Tiles[[1, i]] &, DeleteCases[{1, 2, 3}, i]], {i, 1, 3}], 1]];
Do[Tiles = Append[Tiles, Flatten[Table[Map[Tiles[[g, i]].Conjugate[#].Tiles[[g, i]] &, {Tiles[[g - 1, Ceiling[i/2]]], Tiles[[g, 2Ceiling[i/2] - Mod[i + 1,2]]]}], {i, 1, 32^(g - 1)}], 1]], {g, 2, 5}];
Tiles = Flatten[Tiles, 1]; n = Length[Tiles];
ToDisk[{{a_, b_}, {c_, d_}}] := Disk[{Re[a/c], Im[a/c]}, Abs[I/c]];
Show[Graphics[{Hue[0], Disk[{0, 0}, 1], Table[{Hue[Sqrt[i/n]], ToDisk[Tiles[[i]]]}, {i,1, n}]}, AspectRatio -> 1, PlotRange -> {{-1, 1}, {-1, 1}}]]

Hyperboloid - POV-Ray 3.6.1, 6/22/05
Click here to download some POV-Ray code for this image. You can also make hyperboloids quickly in POV-Ray using the quadric command:
camera{location <0,10,0> look_at <0,0,0>}
light_source{<0,10,0>,1}
quadric{<1,1,-1>,<0,0,0>,<0,0,0>,1 pigment{rgb 1}}

Link: Gallery of Algebraic Surfaces - by Xiao Gang

3,4,5 Quasi-Homogeneous Domain - C++ version: 8/24/06, Mathematica version: 8/22/06
This was adapted from Anton Lukyanenko’s C++ code. Here is some Mathematica code:
(* runtime: 0.2 second *)
p = 3; q = 4; r = 5; d = 1.0; s = Sin[Pi/p]; c = Cos[Pi/p]; s2 = Sin[2Pi/p];c2 = Cos[2Pi/p];
p = Inverse[{{-s, c - d, s d}, {s, 3 (c - d), -s d}, {(-3 + 4 c d) s,3 c - (1 + 2 c2) d, -s d}}].{1, 2Cos[2Pi/q], 2Cos[2Pi/r] + 1};
R1 = {{1, 0, 0}, {0, -1, 0}, {0, 0, 1}}; R2 = {{c2, s2, 0}, {s2, -c2, 0}, {0, 0, 1}}; T = {{d, c, p[[1]]}, {0, s, p[[2]]}, {1, 1, p[[3]]}}; R3 = T.{{1, 0, 0}, {0, 1,0}, {0, 0, -1}}.Inverse[T];
Reflect[tile_, R_] := R.# & /@ tile; Children[tile_] := Reflect[tile, #] & /@ {R1, R2, R3};
tiles = {{{0, 0, 1}, {d, 0, 1}, {c, s, 1}}}; Do[tiles = Flatten[Children /@ tiles, 1], {7}];
Show[Graphics[Table[Polygon[Map[{#[[1]], #[[2]]}/#[[3]] &, tiles[[i]]]], {i, 1, Length[tiles]}], AspectRatio -> 1]]

Links
Anton Lukyanenko’s Google+ posts