<?xml version="1.0" encoding="UTF-8" standalone="yes"?><oembed><version><![CDATA[1.0]]></version><provider_name><![CDATA[Geometry and the imagination]]></provider_name><provider_url><![CDATA[https://lamington.wordpress.com]]></provider_url><author_name><![CDATA[Danny Calegari]]></author_name><author_url><![CDATA[https://lamington.wordpress.com/author/dannycaltech/]]></author_url><title><![CDATA[Circle packing &#8211; theory and&nbsp;practice]]></title><type><![CDATA[link]]></type><html><![CDATA[<p>I am spending a few months in Göttingen as a Courant Distinguished Visiting Professor, and talking a bit to Laurent Bartholdi about rational functions &#8212; i.e. holomorphic maps from the Riemann sphere <img src="https://s0.wp.com/latex.php?latex=%5Cwidehat%7B%5Cmathbb+C%7D&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="&#92;widehat{&#92;mathbb C}" title="&#92;widehat{&#92;mathbb C}" class="latex" /> to itself. A rational function is determined (up to multiplication by a constant) by its zeroes and poles, and can therefore generically be put in the form <img src="https://s0.wp.com/latex.php?latex=f%3Az+%5Cto+P%28z%29%2FQ%28z%29&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="f:z &#92;to P(z)/Q(z)" title="f:z &#92;to P(z)/Q(z)" class="latex" /> where P and Q are polynomials of degree <img src="https://s0.wp.com/latex.php?latex=d&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="d" title="d" class="latex" />. If <img src="https://s0.wp.com/latex.php?latex=d%3D1&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="d=1" title="d=1" class="latex" /> then <img src="https://s0.wp.com/latex.php?latex=f&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="f" title="f" class="latex" /> is invertible, and is called a <em>fractional linear transformation</em> (or, sometimes, a <em>Mobius transformation</em>). The critical points are the zeroes of <img src="https://s0.wp.com/latex.php?latex=P%27Q-Q%27P&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="P&#039;Q-Q&#039;P" title="P&#039;Q-Q&#039;P" class="latex" />; note that this is a polynomial of degree <img src="https://s0.wp.com/latex.php?latex=%5Cle+2d-2&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="&#92;le 2d-2" title="&#92;le 2d-2" class="latex" /> (not <img src="https://s0.wp.com/latex.php?latex=2d-1&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="2d-1" title="2d-1" class="latex" />) and the images of these points under <img src="https://s0.wp.com/latex.php?latex=f&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="f" title="f" class="latex" /> are the critical values. Again, generically, there will be <img src="https://s0.wp.com/latex.php?latex=2d-2&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="2d-2" title="2d-2" class="latex" /> critical values; let&#8217;s call them <img src="https://s0.wp.com/latex.php?latex=V&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="V" title="V" class="latex" />. Precomposing <img src="https://s0.wp.com/latex.php?latex=f&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="f" title="f" class="latex" /> with a fractional linear transformation will not change the set of critical values.</p>
<p>The map <img src="https://s0.wp.com/latex.php?latex=f&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="f" title="f" class="latex" /> cannot usually be recovered from <img src="https://s0.wp.com/latex.php?latex=V&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="V" title="V" class="latex" /> (even up to precomposition with a fractional linear transformation); one needs to specify some extra global topological information. If we let <img src="https://s0.wp.com/latex.php?latex=%5Coverline%7BC%7D&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="&#92;overline{C}" title="&#92;overline{C}" class="latex" /> denote the preimage of <img src="https://s0.wp.com/latex.php?latex=V&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="V" title="V" class="latex" /> under <img src="https://s0.wp.com/latex.php?latex=f&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="f" title="f" class="latex" />, and let <img src="https://s0.wp.com/latex.php?latex=C&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="C" title="C" class="latex" /> denote the subset consisting of critical points, then the restriction <img src="https://s0.wp.com/latex.php?latex=f%3A%5Cwidehat%7B%5Cmathbb+C%7D+-+%5Coverline%7BC%7D+%5Cto+%5Cwidehat%7B%5Cmathbb+C%7D+-+V&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="f:&#92;widehat{&#92;mathbb C} - &#92;overline{C} &#92;to &#92;widehat{&#92;mathbb C} - V" title="f:&#92;widehat{&#92;mathbb C} - &#92;overline{C} &#92;to &#92;widehat{&#92;mathbb C} - V" class="latex" /> is a covering map of degree <img src="https://s0.wp.com/latex.php?latex=d&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="d" title="d" class="latex" />, and to specify the rational map we must specify both <img src="https://s0.wp.com/latex.php?latex=V&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="V" title="V" class="latex" /> and the topological data of this covering. Let&#8217;s assume for convenience that 0 is not a critical value. To specify the rational map is to give both <img src="https://s0.wp.com/latex.php?latex=V&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="V" title="V" class="latex" /> and a representation <img src="https://s0.wp.com/latex.php?latex=%5Crho%3A%5Cpi_1%28%5Cwidehat%7B%5Cmathbb+C%7D+-+V%2C0%29+%5Cto+S_d&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="&#92;rho:&#92;pi_1(&#92;widehat{&#92;mathbb C} - V,0) &#92;to S_d" title="&#92;rho:&#92;pi_1(&#92;widehat{&#92;mathbb C} - V,0) &#92;to S_d" class="latex" /> (here <img src="https://s0.wp.com/latex.php?latex=S_d&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="S_d" title="S_d" class="latex" /> denotes the group of permutations of the set <img src="https://s0.wp.com/latex.php?latex=%5Clbrace+1%2C2%2C%5Ccdots%2Cd%5Crbrace&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="&#92;lbrace 1,2,&#92;cdots,d&#92;rbrace" title="&#92;lbrace 1,2,&#92;cdots,d&#92;rbrace" class="latex" />) which describes how the branches of <img src="https://s0.wp.com/latex.php?latex=f%5E%7B-1%7D&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="f^{-1}" title="f^{-1}" class="latex" /> are permuted by monodromy about <img src="https://s0.wp.com/latex.php?latex=V&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="V" title="V" class="latex" />. Such a representation is not arbitrary, of course; first of all it must be irreducible (i.e. not conjugate into <img src="https://s0.wp.com/latex.php?latex=S_e+%5Ctimes+S_%7Bd-e%7D&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="S_e &#92;times S_{d-e}" title="S_e &#92;times S_{d-e}" class="latex" /> for any <img src="https://s0.wp.com/latex.php?latex=1%5Cle+e+%5Cle+d-1&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="1&#92;le e &#92;le d-1" title="1&#92;le e &#92;le d-1" class="latex" />) so that the cover is connected. Second of all, the cover must be topologically a sphere. Let&#8217;s call the (branched) cover <img src="https://s0.wp.com/latex.php?latex=%5CSigma&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="&#92;Sigma" title="&#92;Sigma" class="latex" /> for the moment, before we know what it is. The Riemann-Hurwitz formula lets one compute the Euler characteristic of <img src="https://s0.wp.com/latex.php?latex=%5CSigma&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="&#92;Sigma" title="&#92;Sigma" class="latex" /> from the representation <img src="https://s0.wp.com/latex.php?latex=%5Crho&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="&#92;rho" title="&#92;rho" class="latex" />. A nice presentation for <img src="https://s0.wp.com/latex.php?latex=%5Cpi_1%28%5Cwidehat%7B%5Cmathbb+C%7D-V%2C0%29&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="&#92;pi_1(&#92;widehat{&#92;mathbb C}-V,0)" title="&#92;pi_1(&#92;widehat{&#92;mathbb C}-V,0)" class="latex" /> has generators <img src="https://s0.wp.com/latex.php?latex=e_i&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="e_i" title="e_i" class="latex" /> represented by small loops around the points <img src="https://s0.wp.com/latex.php?latex=v_i+%5Cin+V&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="v_i &#92;in V" title="v_i &#92;in V" class="latex" />, and the relation <img src="https://s0.wp.com/latex.php?latex=%5Cprod_%7Bi%3D1%7D%5E%7B%7CV%7C%7D+e_i+%3D+1&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="&#92;prod_{i=1}^{|V|} e_i = 1" title="&#92;prod_{i=1}^{|V|} e_i = 1" class="latex" />. For each <img src="https://s0.wp.com/latex.php?latex=e_i&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="e_i" title="e_i" class="latex" /> define <img src="https://s0.wp.com/latex.php?latex=o_i&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="o_i" title="o_i" class="latex" /> to be the number of orbits of <img src="https://s0.wp.com/latex.php?latex=%5Crho%28e_i%29&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="&#92;rho(e_i)" title="&#92;rho(e_i)" class="latex" /> on the set <img src="https://s0.wp.com/latex.php?latex=%5Clbrace+1%2C2%2C%5Ccdots%2Cd%5Crbrace&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="&#92;lbrace 1,2,&#92;cdots,d&#92;rbrace" title="&#92;lbrace 1,2,&#92;cdots,d&#92;rbrace" class="latex" />. Then</p>
<p style="padding-left:30px;"><img src="https://s0.wp.com/latex.php?latex=%5Cchi%28%5CSigma%29+%3D+d%5Cchi%28S%5E2%29+-+%5Csum_i+%28d-o_i%29&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="&#92;chi(&#92;Sigma) = d&#92;chi(S^2) - &#92;sum_i (d-o_i)" title="&#92;chi(&#92;Sigma) = d&#92;chi(S^2) - &#92;sum_i (d-o_i)" class="latex" /></p>
<p>If each <img src="https://s0.wp.com/latex.php?latex=%5Crho%28e_i%29&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="&#92;rho(e_i)" title="&#92;rho(e_i)" class="latex" /> is a transposition (i.e. in the generic case), then <img src="https://s0.wp.com/latex.php?latex=o_i%3Dd-1&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="o_i=d-1" title="o_i=d-1" class="latex" /> and we recover the fact that <img src="https://s0.wp.com/latex.php?latex=%7CV%7C%3D2d-2&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="|V|=2d-2" title="|V|=2d-2" class="latex" />.</p>
<p>This raises the following natural question:</p>
<p style="padding-left:30px;"><strong>Basic Question:</strong> Given a set of points <img src="https://s0.wp.com/latex.php?latex=V&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="V" title="V" class="latex" /> in the Riemann sphere, and an irreducible representation <img src="https://s0.wp.com/latex.php?latex=%5Crho%3A%5Cpi_1%28%5Cwidehat%7B%5Cmathbb+C%7D+-+V%2C0%29+%5Cto+S_d&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="&#92;rho:&#92;pi_1(&#92;widehat{&#92;mathbb C} - V,0) &#92;to S_d" title="&#92;rho:&#92;pi_1(&#92;widehat{&#92;mathbb C} - V,0) &#92;to S_d" class="latex" /> satisfying <img src="https://s0.wp.com/latex.php?latex=%5Csum_i+%28d-o_i%29+%3D+2d-2&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="&#92;sum_i (d-o_i) = 2d-2" title="&#92;sum_i (d-o_i) = 2d-2" class="latex" />, what are the coefficients of the rational function <img src="https://s0.wp.com/latex.php?latex=z+%5Cto+P%28z%29%2FQ%28z%29&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="z &#92;to P(z)/Q(z)" title="z &#92;to P(z)/Q(z)" class="latex" /> that they determine (up to precomposition by a fractional linear transformation)?</p>
<p><!--more--></p>
<p>Note that we would like to recover the coefficients <em>numerically</em> (i.e. as <a href="http://books.google.com/books?id=vwsAAAAAMBAJ&amp;pg=PA46&amp;lpg=PA46&amp;dq=ulam+%22numbers+with+decimal+points%22&amp;source=bl&amp;ots=1rzLaH_5u4&amp;sig=At9IR62HhN9axsQYIfIO5owi6_U&amp;hl=en&amp;sa=X&amp;ei=BM8gUM-bIMbdsgbFsICoBw&amp;redir_esc=y#v=onepage&amp;q=ulam%20%22numbers%20with%20decimal%20points%22&amp;f=false">numbers with decimal points</a>). And we are really interested in finding a <em>practical</em> algorithm, and then implementing it on computer. One obvious (and bad) idea is to just solve for the coefficients of P and Q subject to the constraint that the set of critical values is V (after normalizing so that three of the critical points are 0, 1 and infinity to remove the ambiguity of the precomposition). The problem is that the number of such solutions is exponential in the degree, and although Newton&#8217;s method will quickly find <em>some</em> solution, it is very, very unlikely to be the solution with the correct combinatorial data.</p>
<p>Another idea &#8212; and one that leads to the point of this blog post &#8212; is to try to build the branched cover <img src="https://s0.wp.com/latex.php?latex=%5CSigma&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="&#92;Sigma" title="&#92;Sigma" class="latex" /> directly as a Riemann surface together with a holomorphic map with the correct critical values and combinatorics, and then uniformize it as <img src="https://s0.wp.com/latex.php?latex=%5Cwidehat%7B%5Cmathbb+C%7D&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="&#92;widehat{&#92;mathbb C}" title="&#92;widehat{&#92;mathbb C}" class="latex" /> to determine the numerical location of the zeros and poles. This sounds more promising, since there is an obvious way to build <img src="https://s0.wp.com/latex.php?latex=%5CSigma&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="&#92;Sigma" title="&#92;Sigma" class="latex" /> piecewise from copies of regions in <img src="https://s0.wp.com/latex.php?latex=%5Cwidehat%7B%5Cmathbb+C%7D-+V&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="&#92;widehat{&#92;mathbb C}- V" title="&#92;widehat{&#92;mathbb C}- V" class="latex" /> glued together by very explicit maps. The problem is that (numerical) uniformization itself is very slow, at least if one wants any kind of accuracy. On the other hand, we do not need to know the values of the uniformization map everywhere, only the locations of the zeros and poles. So we can try to ask for a fast and approximate method of uniformization which gives sufficiently accurate values of these numbers, that they can then be adjusted quickly to very accurate values by Newton&#8217;s method.</p>
<p>One potential idea is to use the method of <em>circle packing</em>. A circle packing is a (rigid) configuration of round circles with disjoint interiors and prescribed combinatorial pattern of tangencies. Abstractly, the circle packing determines a triangulation, with one vertex for each circle, one edge for each tangency, and one triangle for each triple of mutually tangent circles. Implicitly, by using the term &#8220;round circle&#8221;, the domain in which the circles are packed should be a Riemann surface together with a complex projective structure; for example, the Riemann sphere, or the Euclidean or hyperbolic planes. Given a projective surface and a triangulation satisfying mild topological conditions, such a circle packing exists and is unique; this is known as the <a href="http://en.wikipedia.org/wiki/Circle_packing_theorem">Circle Packing Theorem</a> (aka the Koebe-Andreev-Thurston theorem). One can also solve for configurations of circles intersecting at prescribed angles; for instance, one can look for a configuration of round circles with prescribed combinatorics, and meeting always at right angles. Such a configuration in the Riemann sphere can be interpreted as the boundaries of a collection of geodesic planes in hyperbolic 3-space meeting in right angles, and cutting out a compact right-angled polyhedron. The existence of such a polyhedron is the base step in Thurston&#8217;s inductive proof of geometrization for Haken 3-manifolds.</p>
<p>One can also think of the circle packing as a discrete version of a conformal structure; at a talk at the conference in 1985 celebrating de Branges&#8217; proof of the Bieberbach conjecture, Thurston proposed using circle packings to approximate conformal mappings. One starts with a region U in the complex plane, and packs it nearly tightly with a hexagonal packing of small round circles. Together with the boundary of U one obtains a topological circle packing; the round circle packing with the same combinatorics can be thought of as a packing of the unit disk. One therefore obtains a coarse &#8220;map&#8221; from U to the disk, taking each round circle in the packing to a round circle in the disk, and one should think of this as a discrete version of a conformal map. As the mesh size goes to zero, Thurston conjectured these maps should converge to the uniformizing map. This conjecture was proved by <a href="http://www.ams.org/mathscinet-getitem?mr=906396">Rodin-Sullivan</a>.</p>
<p>In the context of our Basic Question we can try to find our desired rational map as follows. Starting with the collection of points V in the Riemann sphere, we build an (almost) round circle packing in such a way that one of the centers is at 0 and infinity and at each point of V. One should probably choose the mesh size quite small near these special points, since the derivative of <img src="https://s0.wp.com/latex.php?latex=f%5E%7B-1%7D&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="f^{-1}" title="f^{-1}" class="latex" /> is going to blow up near V. This determines a topological graph (the 1-skeleton of the triangulation described above). The branching data defines a new graph in an obvious way, and we can find the circle packing associated to that graph. The &#8220;preimages&#8221; of 0 and infinity are given as the centers of d circles in this new circle packing, and we can take these as our approximate zeros and poles for <img src="https://s0.wp.com/latex.php?latex=f&#038;bg=ffffff&#038;fg=000&#038;s=0" alt="f" title="f" class="latex" />.</p>
<p>Anyway, this is all preamble to explaining that I wrote a little code to perform circle packing with prescribed combinatorial data, and in case I don&#8217;t do anything else with it (which is quite likely) I thought it might be amusing to post the code and some of the pictures it produces. Note that very sophisticated and highly optimized code for circle packing is already available from many other places; for example, <a href="http://www.math.utk.edu/~kens/">Ken Stephenson</a> has an amazing collection of resources (both theoretical and computational) on his website.</p>
<p>The latest code is, and will continue to be, available at github here:</p>
<p style="padding-left:30px;"><a href="https://github.com/dannycalegari/circle_pack">(link to github repository)</a></p>
<p>Download the source as a zip file, then unzip and type &#8220;make&#8221; to make. The program is written in C++, and outputs graphics to the screen using Xlib, and to an .eps file. It can either be run interactively (without an argument) or non-interactively, taking a file name (containing a topological circle packing) as a parameter.</p>
<p>A topological circle packing is written in a (ASCII text) file with the following structure:</p>
<p style="padding-left:30px;">number of vertices</p>
<p style="padding-left:30px;">valence of vertex 0; list of adjacent vertices in circular order</p>
<p style="padding-left:30px;">valence of vertex 1; list of adjacent vertices in circular order (etc.)</p>
<p style="padding-left:30px;">valence of vertex n-1; list of adjacent vertices in circular order</p>
<p style="padding-left:30px;">initial radius of vertex 0</p>
<p style="padding-left:30px;">initial radius of vertex 1 (etc)</p>
<p style="padding-left:30px;">initial radius of vertex n-1.</p>
<p>By convention, vertex 0 is the &#8220;outer&#8221; circle (centered at infinity). The program doesn&#8217;t check that the adjacency data that it is given is consistent, or that it gives rise to a topological sphere.</p>
<p>If you try this out, please let me know what you think could be improved or fixed. Feel free to modify or change the code however you like (subject to the usual <a href="http://www.gnu.org/copyleft/gpl.html">GPL license</a> conditions). A wishlist would include to add the functionality I sketched above, i.e. to find approximate rational maps with prescribed critical values and branching data; any reader with some time on their hands is warmly invited to do this!</p>
<p>&nbsp;</p>
<p>Some screen shots of the X-windows output:<br />
<a href="https://lamington.files.wordpress.com/2012/08/packing_picture_11.png"><img data-attachment-id="1700" data-permalink="https://lamington.wordpress.com/2012/08/07/circle-packing-theory-and-practice/packing_picture_1-2/" data-orig-file="https://lamington.files.wordpress.com/2012/08/packing_picture_11.png" data-orig-size="632,654" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="packing_picture_1" data-image-description="" data-medium-file="https://lamington.files.wordpress.com/2012/08/packing_picture_11.png?w=290" data-large-file="https://lamington.files.wordpress.com/2012/08/packing_picture_11.png?w=632" class="alignnone size-medium wp-image-1700" title="packing_picture_1" src="https://lamington.files.wordpress.com/2012/08/packing_picture_11.png?w=289&#038;h=300" alt="" width="289" height="300" srcset="https://lamington.files.wordpress.com/2012/08/packing_picture_11.png?w=289&amp;h=300 289w, https://lamington.files.wordpress.com/2012/08/packing_picture_11.png?w=578&amp;h=598 578w, https://lamington.files.wordpress.com/2012/08/packing_picture_11.png?w=145&amp;h=150 145w" sizes="(max-width: 289px) 100vw, 289px" /></a><a href="https://lamington.files.wordpress.com/2012/08/packing_picture_21.png"><img data-attachment-id="1701" data-permalink="https://lamington.wordpress.com/2012/08/07/circle-packing-theory-and-practice/packing_picture_2-2/" data-orig-file="https://lamington.files.wordpress.com/2012/08/packing_picture_21.png" data-orig-size="614,636" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="packing_picture_2" data-image-description="" data-medium-file="https://lamington.files.wordpress.com/2012/08/packing_picture_21.png?w=290" data-large-file="https://lamington.files.wordpress.com/2012/08/packing_picture_21.png?w=614" class="alignnone size-medium wp-image-1701" title="packing_picture_2" src="https://lamington.files.wordpress.com/2012/08/packing_picture_21.png?w=289&#038;h=300" alt="" width="289" height="300" srcset="https://lamington.files.wordpress.com/2012/08/packing_picture_21.png?w=289&amp;h=300 289w, https://lamington.files.wordpress.com/2012/08/packing_picture_21.png?w=578&amp;h=600 578w, https://lamington.files.wordpress.com/2012/08/packing_picture_21.png?w=145&amp;h=150 145w" sizes="(max-width: 289px) 100vw, 289px" /></a><a href="https://lamington.files.wordpress.com/2012/08/circle_pack_figure.jpg"><img data-attachment-id="1725" data-permalink="https://lamington.wordpress.com/2012/08/07/circle-packing-theory-and-practice/circle_pack_figure/" data-orig-file="https://lamington.files.wordpress.com/2012/08/circle_pack_figure.jpg" data-orig-size="614,636" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="circle_pack_figure" data-image-description="" data-medium-file="https://lamington.files.wordpress.com/2012/08/circle_pack_figure.jpg?w=290" data-large-file="https://lamington.files.wordpress.com/2012/08/circle_pack_figure.jpg?w=614" class="alignnone size-medium wp-image-1725" title="circle_pack_figure" src="https://lamington.files.wordpress.com/2012/08/circle_pack_figure.jpg?w=289&#038;h=300" alt="" width="289" height="300" srcset="https://lamington.files.wordpress.com/2012/08/circle_pack_figure.jpg?w=289&amp;h=300 289w, https://lamington.files.wordpress.com/2012/08/circle_pack_figure.jpg?w=578&amp;h=600 578w, https://lamington.files.wordpress.com/2012/08/circle_pack_figure.jpg?w=145&amp;h=150 145w" sizes="(max-width: 289px) 100vw, 289px" /></a><a href="https://lamington.files.wordpress.com/2012/08/packing_picture_2.png"><br />
</a></p>
<p>and some sample .eps output (converted to .jpg for wordpress):</p>
<p><a href="https://lamington.files.wordpress.com/2012/08/output_circles41.jpg"><img data-attachment-id="1703" data-permalink="https://lamington.wordpress.com/2012/08/07/circle-packing-theory-and-practice/output_circles4-2/" data-orig-file="https://lamington.files.wordpress.com/2012/08/output_circles41.jpg?w=490&#038;h=490" data-orig-size="1041,1041" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="output_circles4" data-image-description="" data-medium-file="https://lamington.files.wordpress.com/2012/08/output_circles41.jpg?w=490&#038;h=490?w=300" data-large-file="https://lamington.files.wordpress.com/2012/08/output_circles41.jpg?w=490&#038;h=490?w=1024" class="alignnone size-full wp-image-1703" title="output_circles4" src="https://lamington.files.wordpress.com/2012/08/output_circles41.jpg?w=490&#038;h=490" alt="" width="490" height="490" srcset="https://lamington.files.wordpress.com/2012/08/output_circles41.jpg?w=490&amp;h=490 490w, https://lamington.files.wordpress.com/2012/08/output_circles41.jpg?w=980&amp;h=980 980w, https://lamington.files.wordpress.com/2012/08/output_circles41.jpg?w=150&amp;h=150 150w, https://lamington.files.wordpress.com/2012/08/output_circles41.jpg?w=300&amp;h=300 300w, https://lamington.files.wordpress.com/2012/08/output_circles41.jpg?w=768&amp;h=768 768w" sizes="(max-width: 490px) 100vw, 490px" /></a><a href="https://lamington.files.wordpress.com/2012/08/fbd31.jpg"><img data-attachment-id="1727" data-permalink="https://lamington.wordpress.com/2012/08/07/circle-packing-theory-and-practice/fbd3-2/" data-orig-file="https://lamington.files.wordpress.com/2012/08/fbd31.jpg?w=490&#038;h=490" data-orig-size="1041,1041" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="fbd3" data-image-description="" data-medium-file="https://lamington.files.wordpress.com/2012/08/fbd31.jpg?w=490&#038;h=490?w=300" data-large-file="https://lamington.files.wordpress.com/2012/08/fbd31.jpg?w=490&#038;h=490?w=1024" class="alignnone size-full wp-image-1727" title="fbd3" src="https://lamington.files.wordpress.com/2012/08/fbd31.jpg?w=490&#038;h=490" alt="" width="490" height="490" srcset="https://lamington.files.wordpress.com/2012/08/fbd31.jpg?w=490&amp;h=490 490w, https://lamington.files.wordpress.com/2012/08/fbd31.jpg?w=980&amp;h=980 980w, https://lamington.files.wordpress.com/2012/08/fbd31.jpg?w=150&amp;h=150 150w, https://lamington.files.wordpress.com/2012/08/fbd31.jpg?w=300&amp;h=300 300w, https://lamington.files.wordpress.com/2012/08/fbd31.jpg?w=768&amp;h=768 768w" sizes="(max-width: 490px) 100vw, 490px" /></a></p>
<p>The effect of taking a double branched cover over two circles:</p>
<p><a href="https://lamington.files.wordpress.com/2012/08/hexagonal_packing_with_two_marked_circles1.jpg"><img data-attachment-id="1723" data-permalink="https://lamington.wordpress.com/2012/08/07/circle-packing-theory-and-practice/hexagonal_packing_with_two_marked_circles-2/" data-orig-file="https://lamington.files.wordpress.com/2012/08/hexagonal_packing_with_two_marked_circles1.jpg" data-orig-size="1041,1041" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="hexagonal_packing_with_two_marked_circles" data-image-description="" data-medium-file="https://lamington.files.wordpress.com/2012/08/hexagonal_packing_with_two_marked_circles1.jpg?w=300&#038;h=300" data-large-file="https://lamington.files.wordpress.com/2012/08/hexagonal_packing_with_two_marked_circles1.jpg?w=1024" class="alignnone size-medium wp-image-1723" title="hexagonal_packing_with_two_marked_circles" src="https://lamington.files.wordpress.com/2012/08/hexagonal_packing_with_two_marked_circles1.jpg?w=300&#038;h=300" alt="" width="300" height="300" srcset="https://lamington.files.wordpress.com/2012/08/hexagonal_packing_with_two_marked_circles1.jpg?w=300&amp;h=300 300w, https://lamington.files.wordpress.com/2012/08/hexagonal_packing_with_two_marked_circles1.jpg?w=600&amp;h=600 600w, https://lamington.files.wordpress.com/2012/08/hexagonal_packing_with_two_marked_circles1.jpg?w=150&amp;h=150 150w" sizes="(max-width: 300px) 100vw, 300px" /></a><a href="https://lamington.files.wordpress.com/2012/08/double_cover_of_hexagonal_packing_over_two_marked_circles.jpg"><img data-attachment-id="1722" data-permalink="https://lamington.wordpress.com/2012/08/07/circle-packing-theory-and-practice/double_cover_of_hexagonal_packing_over_two_marked_circles/" data-orig-file="https://lamington.files.wordpress.com/2012/08/double_cover_of_hexagonal_packing_over_two_marked_circles.jpg" data-orig-size="1041,1041" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="double_cover_of_hexagonal_packing_over_two_marked_circles" data-image-description="" data-medium-file="https://lamington.files.wordpress.com/2012/08/double_cover_of_hexagonal_packing_over_two_marked_circles.jpg?w=300&#038;h=300" data-large-file="https://lamington.files.wordpress.com/2012/08/double_cover_of_hexagonal_packing_over_two_marked_circles.jpg?w=1024" class="alignnone size-medium wp-image-1722" title="double_cover_of_hexagonal_packing_over_two_marked_circles" src="https://lamington.files.wordpress.com/2012/08/double_cover_of_hexagonal_packing_over_two_marked_circles.jpg?w=300&#038;h=300" alt="" width="300" height="300" srcset="https://lamington.files.wordpress.com/2012/08/double_cover_of_hexagonal_packing_over_two_marked_circles.jpg?w=300&amp;h=300 300w, https://lamington.files.wordpress.com/2012/08/double_cover_of_hexagonal_packing_over_two_marked_circles.jpg?w=600&amp;h=600 600w, https://lamington.files.wordpress.com/2012/08/double_cover_of_hexagonal_packing_over_two_marked_circles.jpg?w=150&amp;h=150 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
]]></html><thumbnail_url><![CDATA[https://lamington.files.wordpress.com/2012/08/packing_picture_11.png?w=289&fit=440%2C330]]></thumbnail_url><thumbnail_width><![CDATA[289]]></thumbnail_width><thumbnail_height><![CDATA[299]]></thumbnail_height></oembed>