From 36d3eaff931fcd7d3d048192ad422798da3763ed Mon Sep 17 00:00:00 2001 From: Mike Lynch Date: Wed, 21 Jan 2026 14:39:30 +1100 Subject: [PATCH] More explorations of the 120-cell's 5-cells --- cellindex.js | 94 ++++++++++++++++++++++++++++++++++++++++++++++ explore_120cell.js | 71 +++++++++++++++++++++++----------- polytopes.js | 57 ++++++++++++++++++++++++++++ 3 files changed, 200 insertions(+), 22 deletions(-) diff --git a/cellindex.js b/cellindex.js index 0640a7a..115b25c 100644 --- a/cellindex.js +++ b/cellindex.js @@ -949,6 +949,100 @@ export const CELL120_CELL5 = { 541 ] }, + "some_cell5s": { + "1": [ + 27, + 28, + 264, + 309, + 275 + ], + "2": [ + 223, + 76, + 238, + 84, + 225 + ], + "3": [ + 253, + 44, + 283, + 304, + 42 + ], + "4": [ + 419, + 112, + 197, + 578, + 521 + ], + "5": [ + 339, + 14, + 384, + 382, + 337 + ], + "6": [ + 331, + 4, + 335, + 390, + 386 + ], + "7": [ + 427, + 160, + 551, + 146, + 557 + ], + "8": [ + 265, + 60, + 64, + 295, + 246 + ], + "9": [ + 473, + 100, + 495, + 213, + 462 + ], + "10": [ + 393, + 6, + 328, + 397, + 326 + ], + "11": [ + 539, + 164, + 439, + 561, + 142 + ], + "12": [ + 511, + 122, + 456, + 595, + 181 + ], + "13": [ + 555, + 154, + 152, + 545, + 429 + ] +} + }; diff --git a/explore_120cell.js b/explore_120cell.js index b88a891..3813dce 100644 --- a/explore_120cell.js +++ b/explore_120cell.js @@ -437,7 +437,7 @@ function coherent_5cells_r(cell120, all5, c5s, c50) { -function coherent_5cells(cell120, all5) { +function coherent_5cells(cell120, all5d) { // pick a starting point, collect coherent 5_cells, continue till // there aren't any new ones @@ -452,41 +452,68 @@ function coherent_5cells(cell120, all5) { +function coherent_all() { + const cell120 = POLYTOPES.cell120_inscribed(); + const all5 = gather_5cells(cell120); -const cell120 = POLYTOPES.cell120_inscribed(); -const all5 = gather_5cells(cell120); + const c5s = coherent_5cells(cell120, all5); -const c5s = coherent_5cells(cell120, all5); - -const celli = c5s.map((c5) => [ "1", "2", "3", "4", "5" ].map((l) => c5[l])); + const celli = c5s.map((c5) => [ "1", "2", "3", "4", "5" ].map((l) => c5[l])); -// check it because I don't believe it yet + // check it because I don't believe it yet -const vertex_check = {}; + const vertex_check = {}; -for( const c5 of celli ) { - for( const l in c5 ) { - const v = c5[l]; - if( v in vertex_check ) { - console.log(`Double count vertex ${v}`); + for( const c5 of celli ) { + for( const l in c5 ) { + const v = c5[l]; + if( v in vertex_check ) { + console.log(`Double count vertex ${v}`); + } + vertex_check[v] = 1; } - vertex_check[v] = 1; } -} -for( let i = 1; i < 601; i++ ) { - if( !vertex_check[i] ) { - console.log(`v ${i} missing`); + for( let i = 1; i < 601; i++ ) { + if( !vertex_check[i] ) { + console.log(`v ${i} missing`); + } } + + + const idict = {}; + for( let i = 1; i < 121; i++ ) { + idict[i] = celli[i - 1]; + } + + console.log(JSON.stringify(idict, null, 2)); } -const idict = {}; -for( let i = 1; i < 121; i++ ) { - idict[i] = celli[i - 1]; + +function coherent_one_set() { + + + const cell120 = POLYTOPES.cell120_inscribed(); + const all5 = gather_5cells(cell120); + + const c5ns = cell5_tetras(cell120, all5, all5[0]); + + + const celli = c5ns.map((c5) => [ "1", "2", "3", "4", "5" ].map((l) => c5[l])); + + + const idict = {}; + + for( let i = 0; i < celli.length; i++ ) { + idict[i + 1] = celli[i]; + } + + console.log(JSON.stringify(idict, null, 2)); } -console.log(JSON.stringify(idict, null, 2)); + +coherent_one_set(); diff --git a/polytopes.js b/polytopes.js index 8fc7669..e121fd4 100644 --- a/polytopes.js +++ b/polytopes.js @@ -498,6 +498,61 @@ export const cell120_inscribed_cell5 = () => { } +export const cell120_inscribe_cell5_subset = () => { + const nodes = make_120cell_vertices(); + const links = auto_detect_edges(nodes, 4); + + for( const cstr in CELLINDEX.INDEX120 ) { + label_nodes(nodes, CELLINDEX.INDEX120[cstr], Number(cstr)); + } + + links.map((l) => l.label = 0); + + const CELL5S = CELLINDEX.CELL120_CELL5.some_cell5s; + const link5s = []; + const nodes_subset = []; + + for( const c5 in CELL5S ) { + const nodes5 = nodes.filter((n) => CELL5S[c5].includes(n.id)); + const cell5links = auto_detect_edges(nodes5, 5); + cell5links.map((l) => l.label = 8); + link5s.push(...cell5links); + for( const n5 of nodes5 ) { + nodes_subset.push(n5); + } + } + + // now add the links of the inscribed 600-cells which have the + // node subset in them + + const link_subset = (l) => { + const source = nodes_subset.filter((n) => n.id === l.source); + const target = nodes_subset.filter((n) => n.id === l.target); + return source.length === 1 && target.length === 1; + }; + + for( const p of [ 1, 2, 3, 4, 5 ]) { + const nodes600 = nodes.filter((n) => n.label === p); + const links600 = auto_detect_edges(nodes600, 12); + links600.map((l) => l.label = p); + for( const link of links600 ) { + if( link_subset(link) ) { + link5s.push(link); + } + } + } + console.log(link5s); + + return { + name: '120-cell 5-cell subset', + nodes: nodes_subset, + links: link5s, + options: [ + { name: "none", links: [ 0, 1, 2, 3, 4, 5, 8 ]}, + ], + description: `Showing the subset of 5-cells in one icosahedron`, + } +} function partition_coord(i, coords, invert) { const j = invert ? -i : i; @@ -913,6 +968,8 @@ export const build_all = () => { cell600(), cell600_layered(), cell120_inscribed(), + cell120_inscribed_cell5(), + cell120_inscribe_cell5_subset(), cell120_layered() ]; }