Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/neozhaoliang/Hyperbolic-Honeycombs

Visualize 3d/4d hyperbolic honeycombs and sphere packings.
https://github.com/neozhaoliang/Hyperbolic-Honeycombs

ball-packings circle-packing coxeter-groups fractals hyperbolic-geometry hyperbolic-space tilings

Last synced: about 2 months ago
JSON representation

Visualize 3d/4d hyperbolic honeycombs and sphere packings.

Awesome Lists containing this project

README

        

> **Requirement**: This repository is already included in the official release of [FragM](https://github.com/3Dickulus/FragM). You can run the examples by installing FragM and navigating to `examples >> neozhaoliang`.

In this project, We will visualize hyperbolic [Coxeter groups](https://en.wikipedia.org/wiki/Coxeter_group) of varying ranks 3/4/5 and levels 1/2/3. The scenes can be categorized into two types:

1. Tiling display: Show the tiling of hyperbolic honeycombs inside the space in the Poincaré ball and upper half-space models.
2. Sphere packing display: Show the sphere packing on the ideal boundary. The complement of this sphere packing is called the limit set.

The level of a Coxeter group $G$ is defined as the smallest non-negative integer $l$, such that after removing any $l$ vertices from its [Coxeter diagram](https://en.wikipedia.org/wiki/Coxeter%E2%80%93Dynkin_diagram), the remaining diagram is either finite or affine. As a result, finite (spherical) and affine (Euclidean) Coxeter groups have level 0.

It's proved in a paper by George Maxwell that Coxeter groups of level 1/2 are both hyperbolic. For level 1, the limit set is the ideal boundary and there is no sphere packing. For level 2, there is a maximal sphere packing on the ideal boundary, meaning the spheres do not intersect and fill the boundary. For levels higher than 2, the spheres still fill the boundary, but they will overlap. For further mathematical details, please refer to the paper by Chen and Labbé ([Chen and Labbé's paper](https://arxiv.org/abs/1310.8608)) on the connection between hyperbolic geometry and ball packings.

## 3D Euclidean tilings (rank = 4, level = 0)

[Shadertoy live](https://www.shadertoy.com/view/3tccWf)



## 2D hyperbolic tilings (rank = 3, level = 1, 2)

[Shadertoy live](https://www.shadertoy.com/view/7dcXDB)

From left to right: compact tiling, paracompact tiling (with ideal vertices on the boundary), non-compact tiling (with hyperideal vertices outside the space)

The level 2 case, shown in the rightmost image, appears less attractive. However, it can be observed that each cell, which is an unbounded triangle, intersects the ideal boundary at an arc. All these arcs pack the entire boundary circle. This phenomenon generalizes to three and four-dimensional spaces. If the group has level 2, each cell in the honeycomb will intersect the boundary at a disk or sphere, and these disks/spheres pack the entire boundary.

## 3D hyperbolic honeycombs (rank = 4, level = 1, 2)

(Images with Poincaré disks packing the boundary are of level 2)

| | |
|:---:|:---:|
| ![353-1000](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/3bd6f8ae-db6a-41a6-ab8e-5c8d8820c475)|![363-0100](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/bb08fcca-eab3-4df0-a685-6c4be9738c63)|
|![373-0101](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/3f893a0e-7f3c-4ff2-8442-c243681c837a)|![444-0011](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/b7458b11-11ee-4399-80b3-76c3f41d3915)|
|![445-0011](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/264196a0-5e77-4340-b2c0-384f7764c3a6)|![445-1100](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/dfdeab76-3859-44af-ab8c-618662730ff2)|
|![534-1000](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/442411c1-f880-4b4c-b9ed-d075b8334e15)|![535-1100](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/c47b5d88-6982-4a11-9508-0b199491f387)|
|![536-1100](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/63bf509d-79a0-453d-b5c7-04ae9c20d894)|![735-0011](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/90f1ee50-02c4-4a01-a91d-af39e4e731b5)|
|![522332-1010](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/9b57bca7-8dec-47db-b578-f500eb743a20)|![935-0011](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/3cc05c9a-1685-446c-bd0f-042b058590d7)|
|![532233](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/6ccfdf8b-b5d3-4794-92c5-6e75ae6c5464)|![365-1101](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/533b37a3-18ad-44b7-94ec-c7b4b4a45538)|
|![445-0100](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/2527448a-db7e-439f-8adf-0009e12f3e0e)|![454-1101(1)](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/a70de753-88a4-4b4b-8239-ef5b9f8ccf3b)|
![535-1000](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/ebeed494-72a4-4936-9aff-560172853136)|![522333](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/99742433-98e3-4e67-a50f-c0c63f750455)|

## 2D circle packings (rank = 4, level = 2)

[Shadertoy live](https://www.shadertoy.com/view/WdGBz3)

| | |
|:---:|:---:|
|![cp1](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/714b9bf8-7653-479e-b9a7-1a93b8a10554)|![cp2](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/564f0ce1-9ce8-47cd-8b6a-63696221170c) |
| | |


## 2D circles packings (rank = 4, level > 2)

In this case, there will be overlapping circles:



### Circle packings from platonic solids

In order (left to right, top to bottom): tetrahedron, cube, octahedron, dodecahedron, icosahedron.

[Shadertoy Live](https://www.shadertoy.com/view/7dcXWs)

### Non-reflective circle packings

These packings follow from [a preprint of Kapovich and Kontorovich](https://arxiv.org/abs/2104.13838). Level not defined.

Extended Bianchi groups. Left: [Bi23](https://www.shadertoy.com/view/NddSWn). Right: [Bi31](https://www.shadertoy.com/view/Nd3XzN).

Groups from [Mcleod's thesis](http://etheses.dur.ac.uk/7743/1/thesis31072013.pdf). Left: [Modified f(3,6)](https://www.shadertoy.com/view/sscSDr). Right: [f(3,14)](https://www.shadertoy.com/view/7scXWn).

## 2D slices of 3D ball packings (rank = 5, level = 2)

[Shadertoy live](https://www.shadertoy.com/view/NdK3zy)

## 3D ball packings (rank = 5, level >= 2)

These are the ball packings in the next section but shown in the Poincaré unit ball model.

| | | |
|:---:|:---:|:---:|
|![236-323-423-2](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/83d16468-fb49-4d04-b301-68160b3bf867)|![244-224-243-2](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/c8a58983-a578-4291-a17f-d5211dff14a9)|![244-232-425-2](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/85bda303-d67e-4c4f-ba18-237fe6a82faa)|

## Fractals from 3D ball clusters (rank = 5, level = 3)

Note some Coxeter diagrams for the rendered images below are missing (I forgot them).

| | |
|:---:|:---:|
|![4-4-inf-inf(2)(1)](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/af669f73-b3bc-44d7-91be-e1a990a94f17)|![4-4-inf-inf(1)](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/4c6df235-9a9e-4ef8-a6c0-ca6171969e9a)|
|![236-223-227-5](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/e544cc67-2c7e-4151-a896-a704347faee1)|![236-444-322-5](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/03fd4e61-50e0-43fd-a9a2-7a532b40c240)|
|![244-223-22inf-inf](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/f57346eb-d9f8-4f65-866d-0c54bd0bebe1)|![244-234-334-4](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/16b5c836-3ca6-44ea-8d22-2b8e127b7cf7)|
|![244-442-323-3](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/aef0a32b-9386-4903-a003-48f91ba8457c)|![244-327-327-4](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/a85eb266-f8fd-4949-9c88-07c65bc3cbe5)|
|![333-224-22inf-inf](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/f1d68ae6-0a7f-4018-a778-748a13aa760a)|![333-225-32inf-inf](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/9b62f444-974f-4fb3-990d-131f8c0c88ca)|
|![333-227-225-inf(inf=1 3)](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/5ea8b446-b2df-4a8d-a859-7d0ab05e688f)|![333-227-226-7](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/e07defd6-8c88-485f-82b1-26a9cd46c989)|
![333-433-224-2](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/93bcd53c-0154-4ab7-8159-faedf2585010)|![333-442-343-3(3D)](https://github.com/neozhaoliang/Hyperbolic-Honeycombs/assets/23307174/1f4e99f8-a7d8-46e9-98d4-d95ae4f8105a)|

# Authors

+ [Chen Hao](https://twitter.com/Chen_Hao)
+ [Zhao Liang](https://twitter.com/neozhaoliang)
+ [Abdelaziz Nait Merzouk](https://twitter.com/FfKnighty)

# License

The .frag code written for FragM in this repository is licensed under the [GPL License](./LICENSE). The images demonstrated by the authors in this project, including those uploaded by the authors on other platforms such as Twitter, are licensed under the [CC BY-NC-SA license](https://creativecommons.org/licenses/by-nc-sa/4.0/).