Skip to content

Latest commit

 

History

History
37 lines (19 loc) · 3.88 KB

README.md

File metadata and controls

37 lines (19 loc) · 3.88 KB

Visualizing circle-packing conformal maps

Check out the live demo at https://kwshi.github.io/thurston!

screenshot of the app, depicting a conformal mapping from a hand-drawn polygon to the unit disk

Riemann's mapping theorem states the following. Suppose 𝑈 is a non-empty, proper open subset of ℂ and that 𝑈 is simply-connected, and let 𝑧₀,𝑧₁∈𝑈. Then there exists a unique biholomorphism 𝜙: 𝑈→𝔻 (where 𝔻 denotes the unit disk), with the property that 𝜙(𝑧₀)=0, and 𝜙(𝑧₁) lands on the positive-real axis.

Thurston's conjecture (also sometimes known as the discrete/finite Riemann mapping theorem) provides an insightful (and pretty!) construction/visualization of the Riemann mapping theorem, proceeding roughly as follows:

  1. Given a (bounded) domain 𝑈, approximately triangulate 𝑈 via a hexagonal circle-packing of radius 𝜖.

  2. Carefully resize each circle to obtain a new packing with the same tangency structure that fits “maximally” within the unit disk; i.e., boundary circles end up tangent to the boundary of the disk. This results in a mapping from circles in the original domain 𝑈 to circles in 𝔻.

  3. Map each triangle in 𝑈 (as defined by the centers of three mutually-tangent circles) to the corresponding triangle in 𝔻 by a (uniquely-determined) affine map; gluing each piece together gives a map defined on the full triangulation.

  4. Apply a (Möbius) disk automorphism to send the image of 𝑧₀ to 0, and rotate the image of 𝑧₁ onto the real axis.

  5. As 𝜖 tends to zero, the map constructed in this manner gradually tends to the Riemann map 𝜙: 𝑈→𝔻.

This app is an interactive demonstration of this process. Check it out here: https://kwshi.github.io/thurston.

References

(Note: this list of references may be incomplete, because I haven't had the time to properly document each component of this app.)

  • Most of the mathematical content/know-how for this project came from taking Terry Tao's complex analysis course at UCLA (Math 246C, spring 2023) in the unit on circle-packings and quasiconformal maps. In fact, this project was created as an assigned final project for this course. Notes for this subject are publicly available on Terry Tao's blog.

  • The hexagonal circle-fitting algorithm (where, given an arbitrary polygon, the interior circle-packing/triangulation is computed) is a customization of the ray-casting algorithm used to solve the point in polygon problem.

  • The circle-packing algorithm is a simplified version of Collins & Stephenson's original algorithm based on local relaxation of radii and a "uniform neighbor model". Stephenson has a working Java implementation of this algorithm posted on his website; it contains many more in-depth explorations focused on circle packings.

  • Some inspiration for this project came from Beeker & Loustau's implementation of a similar app using C++ and Qt. In particular, this screenshot of their app looked really cool, and I wanted to recreate it, but I was dismayed to find that all of the download/installation links on their website were broken (at least, when I last checked), and I couldn't get their program to compile correctly. Plus, I figured, a version that runs on the web would ultimately end up being more accessible than a version that requires downloading and installing.

Disclaimer

This project is incomplete! I'm still working on polishing it, adding features, etc. If you have any suggestions, please feel free to create a GitHub issue.