Circle packings and ripple points
(Under construction)

In this page,  I discus some aspects of circle packings in more detail than on my main geometry page.

Ripple points
I use the word "Ripple points" for points on a surface that have negative intrinsic curvature, whose coordinates it's neighborhood are smooth functions, but that may nevertheless not qualify as C
2

These ripple points can in a region around the origin be described in polar coordinates (R,φ):
z = R2 cos(φ*N)
Below are a couple of plots:

So, the sectional curvature along a line through the origin, with angle (φ) is
d2z/dR2 = 2 cos(φ*N)

If  N = 2, we get a "normal" saddle point, with principle curvature lines  at φ=0,φ=π and = π/2,φ=3π/2.

If N=4, we get more than one set of lines of principle curvature.
So although the z-coordinate is a smooth function along any line in (x,y) though the ripple point, we cannot define the principle lines of curvature, so we do not have a well-defined mean curvature. We could still define a Gaussian curvature, as this is invariant under isometries: we could locally "iron out" the ripple point.

So Ripple points are pretty smooth, but still do not qualify as C2
The point is, that by allowing Ripple points, we can side-step Hilbert's theorem, and create surfaces of constant negative curvature!

Circle packings

There are a lot of cool pages on the web.
Here are a couple of links
Ken Stephenson Author of a book on circle packings and creator of the program 'Circlepack'
Science news online article about Descartes formula
David Gu
Gallery by Jos Leys
Univerty of Berlin Discrete Geometry Group

Rendering a packing with spheres.

Once you have computed the coordinates and radii of a packing, you can easilly render it using VRML. Just create an ASCII file, with the extension ".wrl", and your browser will open it in a VRML or X3D viewer. (If not , you need to install an appropriate free plug-in).
A sample ASCII code is shown below. If you open this in a VRML viewer, you would see 2 circles.
The 3 numbers after the word 'translation' are the coordinates of the sphere center.
The 3 numbers after the word 'diffusecolor' are the RGB values of the color.

#VRML V2.0 utf8
Transform {translation
-0.233475641291208  -0.233475641291208   0.606344887518922
children [Shape { geometry Sphere { radius  4.74575427128103E-03
} appearance Appearance { material Material { diffuseColor 0 0 0.6
transparency  0.01 }}}]}

Transform {translation
-2.90975547990388E-17  -0.291075073423207   0.601842589785694
children [Shape { geometry Sphere { radius  4.41228356341674E-02
} appearance Appearance { material Material { diffuseColor 0 0 0.6
transparency  0.01 }}}]}

Another way to render a surface is using the "IndexedFaceSet" node of VRML. You can see how that works by saving a VRML model such as this one, and opening it in a text editor.