Polyhedra in Polyhedra

Contribute

Found a smaller container, want a new category tracked, or have a different polyhedra-in-polyhedra construction? Submissions go through public GitHub issues, so every check and every review is visible to everyone.

Check and submit a packing

Paste a packing below. Your browser checks it in floating point: every vertex inside the container, every pair of pieces separated by a plane. When it passes, Submit on GitHub opens a pre-filled issue. A GitHub Action then runs the same exact certifier that proves every record on this site and posts the result on the issue, usually within a few minutes.

You need a GitHub account to submit. The check on this page runs entirely in your browser and sends nothing anywhere.

Results appear here after you check a packing.

What happens after you submit

  1. The issue is labelled submission and the submission workflow starts. It runs the floating-point check (verify_general.py) and the exact certifier (certify_general.py), compares the size with the current record, and comments with the result.
  2. A maintainer reviews it. Certified packings that beat the record, or fill a case with no record, are accepted by adding the accepted label.
  3. The workflow then writes the record file with your credit, its exact certificate and float check, and rebuilds this site. The issue is closed with a link to the new record.

A packing has to be strictly valid, not just touching: the certifier needs a positive clearance between pieces and from the walls. Spread the centres by about 10−7 and round s up before you submit; src/claim.py does exactly that for the packings here.

Propose a new category

New categories are new (piece, container) problems: a solid that is not in the library yet, a different container, mixed pieces, or a different measure. Describe it and it becomes a GitHub issue where it can be discussed and, if adopted, added to the search.

Share another construction

Any packing of polyhedra inside a polyhedron is welcome here, even if it does not fit a tracked category: a beautiful symmetric arrangement, a proof of optimality for small n, a lattice construction, a lower bound, a physical model.

Improve the code or add a solid

Pull requests are welcome; CONTRIBUTING.md has the details. Adding a solid takes four steps:

  1. Define it in polyhedra.py (high-precision vertices; faces are derived from the hull and checked) and run it to regenerate src/solids.json, including the r-rounding cores used by the soft shapes.
  2. Give its number field in scripts/exact_solids.py and run it; it finds exact coordinates and proves them right, writing src/solids_exact.json.
  3. Add the problem id to scripts/engine.py (AB, the family lists) and start the search with scripts/run_forever.sh.
  4. Publish with python3 scripts/publish.py: record files, certificates and this site are rebuilt from the archive.

Format of a packing

The same JSON as the record files. Pieces are copies of the canonical piece solid of src/solids.json (50-digit coordinates in src/solids_hp.json, exact ones in src/solids_exact.json), each rotated by a scalar-first quaternion and then moved to its centre. The container is s_full times the canonical container solid, centred at the origin (or at container_center) in its canonical orientation.

{
  "piece": "truncated_octahedron",
  "container": "truncated_octahedron",
  "n": 2,
  "s_full": 2.0000001,
  "pieces": [
    [x, y, z, qw, qx, qy, qz],
    [x, y, z, qw, qx, qy, qz]
  ]
}

Canonical solids have unit edges (Platonic and Archimedean solids, prisms, antiprisms). A Catalan solid is the canonical dual of the unit-edge Archimedean solid, reflected in their common midsphere, and its s is a ratio of sizes of that same solid. Names are the keys of src/solids.json: .