Compare commits
2 Commits
7323935a1f
...
c883bd7406
Author | SHA1 | Date |
---|---|---|
Mike Lynch | c883bd7406 | |
Mike Lynch | 6f1c5a58e6 |
95
cellindex.js
95
cellindex.js
|
@ -45,57 +45,48 @@ export const INDEX = {
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
export const LAYERS = {
|
|
||||||
"0": [
|
export const LAYERS = {
|
||||||
1,317,221,217,313,341,465,417,469,421,37,165,161,269,33,513,113,
|
"0": [154,266,158,222,218,250,254,162,268,156,160,252,256,166,270,272,
|
||||||
117,517,365
|
164,220,224,168],
|
||||||
|
"1": [2,318,314,30,414,510,362,26,506,410,338,458,462,110,
|
||||||
|
106,6,350,346,34,482,418,474,330,442,450,98,90,14,
|
||||||
|
364,28,508,476,394,570,572,124,122,478,348,32,480,
|
||||||
|
512,396,576,574,126,128,8,352,38,422,486,334,454,
|
||||||
|
446,94,102,514,366,518,342,470,466,114,118,16,368,
|
||||||
|
36,484,516,398,580,578,130,132,412,316,420,332,452,
|
||||||
|
444,92,100,4,320,416,340,464,460,108,112,40,488,424,
|
||||||
|
336,448,456,104,96,520,400,582,584,136,134,344,468,472,120,116],
|
||||||
|
"2":[246,242,42,170,426,50,434,178,226,322,46,430,174,54,182,438,326,
|
||||||
|
230,78,558,526,62,494,542,590,142,74,554,386,300,298,202,290,206,
|
||||||
|
522,58,538,490,138,586,236,234,186,60,540,188,282,378,66,546,194,
|
||||||
|
68,196,548,382,286,498,82,562,530,146,594,76,556,204,80,208,560,
|
||||||
|
388,292,588,44,428,492,140,524,64,544,380,238,190,240,192,284,
|
||||||
|
592,496,432,48,528,144,70,198,550,72,552,200,288,384,502,534,566,
|
||||||
|
86,598,150,390,302,210,304,214,294,84,212,564,88,568,216,296,392,
|
||||||
|
596,500,436,52,532,148,324,244,172,248,180,228,176,56,440,184,232,
|
||||||
|
328,504,536,152,600],
|
||||||
|
"3":[369,273,275,371,17,353,257,261,357,9,401,305,306,402,21,307,308,
|
||||||
|
403,22,404,259,263,355,11,359,277,279,373,19,375,309,310,405,23,
|
||||||
|
406,258,262,354,10,358,274,276,370,18,372,356,260,264,360,12,407,
|
||||||
|
311,312,408,24,374,278,280,376,20],"4":[229,325,173,45,429,493,
|
||||||
|
141,525,589,289,385,557,77,205,201,137,521,553,73,585,285,381,
|
||||||
|
193,65,545,593,145,497,529,225,321,433,49,177,139,587,491,281,377,
|
||||||
|
539,59,187,283,379,189,61,541,197,287,199,237,239,191,293,389,213,
|
||||||
|
149,533,565,85,597,295,391,211,147,531,563,83,595,227,323,171,43,
|
||||||
|
427,523,151,503,535,231,327,439,55,183,599,383,551,71,87,215,567,
|
||||||
|
169,241,245,181,489,425,41,185,233,235,195,537,57,591,543,63,495,
|
||||||
|
143,549,69,501,179,499,435,51,175,431,47,527,203,291,387,555,75,
|
||||||
|
207,299,297,559,79,437,53,209,561,81,301,303,547,67,243,247],
|
||||||
|
"5":[457,337,461,105,109,469,341,465,117,113,89,97,441,449,329,93,445,
|
||||||
|
101,453,333,573,395,125,127,575,121,569,393,123,571,451,331,443,
|
||||||
|
99,91,129,577,131,579,397,107,459,111,339,463,95,447,335,103,455,
|
||||||
|
133,135,581,583,399,115,119,467,471,343
|
||||||
],
|
],
|
||||||
"1": [
|
"6":[1,417,313,409,413,317,421,5,475,345,473,481,349,483,33,513,507,
|
||||||
337,457,409,25,153,265,157,29,413,461,105,109,505,361,509,245,241,
|
13,363,511,7,487,351,485,37,517,15,519,367,515,3,423,319,415,39,
|
||||||
49,177,97,433,89,41,425,169,225,321,93,101,53,437,181,45,173,429,
|
25,505,509,477,29,411,27,479,347,31,365,419,35,315,361
|
||||||
325,229,251,255,485,351,453,477,445,347,7,333,249,253,271,163,167,
|
|
||||||
267,155,219,223,159,481,449,349,473,345,441,329,5,529,561,81,577,
|
|
||||||
129,65,545,497,145,593,533,565,389,373,277,279,375,19,581,133,85,
|
|
||||||
69,501,549,597,149,15,367,399,39,519,583,135,487,397,579,515,35,
|
|
||||||
483,131,303,301,209,293,213
|
|
||||||
],
|
],
|
||||||
"2":[
|
"7":[217,153,221,157,265,161,165,269,249,253,251,255,267,159,155,
|
||||||
521,553,385,557,525,273,275,369,17,371,569,121,73,57,489,537,585,
|
163,219,271,223,167]
|
||||||
137,13,363,393,27,507,571,123,475,573,125,395,575,511,31,479,127,
|
};
|
||||||
77,61,541,493,141,589,178,226,170,174,242,230,182,246,9,322,357,
|
|
||||||
498,434,50,530,146,353,257,185,261,193,233,11,355,359,263,259,189,
|
|
||||||
237,197,326,54,438,502,150,534,335,447,455,95,103,415,319,423,239,
|
|
||||||
71,199,551,383,287,419,315,411,331,443,451,99,91,3,343,471,467,115,
|
|
||||||
119,235,67,547,195,285,381,405,309,594,390,562,294,210,82,23,406,
|
|
||||||
595,310,211,83,566,86,214,598,407,311,24,408,312,599,87,215,567,
|
|
||||||
563,295,391
|
|
||||||
],
|
|
||||||
"3":[
|
|
||||||
297,201,299,205,289,42,426,490,138,522,494,430,46,526,142,63,543,
|
|
||||||
191,283,379,339,459,463,111,107,59,187,539,377,281,546,382,286,194,
|
|
||||||
66,114,118,466,342,470,384,288,550,70,198,503,439,55,535,151,51,435,
|
|
||||||
499,147,531,212,296,302,304,216
|
|
||||||
],
|
|
||||||
"4":[
|
|
||||||
386,554,290,74,202,586,401,305,558,78,590,206,307,403,21,402,306,
|
|
||||||
587,75,203,555,79,559,207,291,387,591,308,404,22,462,338,458,110,
|
|
||||||
106,2,410,314,418,98,90,450,58,186,442,330,234,282,378,538,62,190,
|
|
||||||
238,94,102,446,334,454,284,380,542,422,414,318,495,431,327,260,264,
|
|
||||||
356,12,360,47,527,143,200,192,240,43,427,323,247,243,171,227,179,491,
|
|
||||||
523,139,183,175,231,258,262,358,354,10,196,236,188,130,578,398,596,
|
|
||||||
548,132,580,84,514,34,482,148,68,500,582,518,400,366,16,134,486,38,
|
|
||||||
600,552,88,136,584,152,72,504,20,376,392,536,568,374,278,280,532,564
|
|
||||||
],
|
|
||||||
"5":[
|
|
||||||
570,394,298,300,506,14,362,396,574,510,122,474,26,204,208,292,126,
|
|
||||||
30,478,588,540,76,124,572,140,60,492,18,370,388,524,556,372,276,274,
|
|
||||||
592,144,80,528,560,544,64,496,222,218,154,266,158,162,270,166,6,346,
|
|
||||||
350,254,250,332,452,484,444,476,8,348,336,448,480,128,352,488,456,
|
|
||||||
252,256,328,232,432,176,48,440,56,184,104,96,324,228,172,428,44,
|
|
||||||
180,52,436,248,244,92,100,516,368,36,272,164,116,520,120,468,420,
|
|
||||||
40,168,472,424,344
|
|
||||||
],
|
|
||||||
"6":[364,268,508,28,156,576,512,108,112,32,160,460,412,464,340,416,
|
|
||||||
220,224,316,320,4
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ export const get_colours = (basis) => {
|
||||||
const hexbasis = basis.toString(16).padStart(6, "0");
|
const hexbasis = basis.toString(16).padStart(6, "0");
|
||||||
scheme.from_hex(hexbasis).scheme("tetrade").variation("hard").distance(0.5);
|
scheme.from_hex(hexbasis).scheme("tetrade").variation("hard").distance(0.5);
|
||||||
const colours = scheme.colors().map((cs) => parseInt('0x' + cs));
|
const colours = scheme.colors().map((cs) => parseInt('0x' + cs));
|
||||||
const set = colours.slice(1, 6);
|
const set = colours.slice(1, 9);
|
||||||
set.reverse();
|
set.reverse();
|
||||||
set.unshift(colours[0]);
|
set.unshift(colours[0]);
|
||||||
return set;
|
return set;
|
||||||
|
|
261
label120cell.js
261
label120cell.js
|
@ -530,6 +530,33 @@ function meridian(nodes, links, faces, startf, startn, dir=11, max=10) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function meridian_bump(nodes, links, faces, startf, startn, bumpdir=6) {
|
||||||
|
const o = face_plus_to_dodecahedron(faces, startf, startn);
|
||||||
|
const dir = 11;
|
||||||
|
const max = 10;
|
||||||
|
|
||||||
|
const colours = colour_dodecahedron_from_face(o, [ 1, 2, 3, 4, 5 ] );
|
||||||
|
|
||||||
|
const dds = follow_meridian(nodes, links, faces, colours, o, dir, max);
|
||||||
|
|
||||||
|
const dd4 = dds[4];
|
||||||
|
const nextf = dd4[bumpdir];
|
||||||
|
const bump = follow_face_to_dodeca(faces, dd4, nextf);
|
||||||
|
const ncolours = colour_next_dodeca_maybe(nodes, links, faces, colours, dd4, nextf, bump);
|
||||||
|
|
||||||
|
add_colours(colours, ncolours);
|
||||||
|
|
||||||
|
const labels = { 1: [], 2:[], 3:[], 4:[], 5:[] };
|
||||||
|
for( const vstr in colours ) {
|
||||||
|
labels[colours[vstr]].push(Number(vstr));
|
||||||
|
}
|
||||||
|
|
||||||
|
return { dodecahedra: dds, labels: labels };
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function all_meridians(nodes, links, faces, startf, startn) {
|
function all_meridians(nodes, links, faces, startf, startn) {
|
||||||
const o = face_plus_to_dodecahedron(faces, startf, startn);
|
const o = face_plus_to_dodecahedron(faces, startf, startn);
|
||||||
|
|
||||||
|
@ -674,7 +701,6 @@ function arctic(nodes, links, faces, startf, startn, max) {
|
||||||
export function label_120cell(nodes, links, faces, startf, startn) {
|
export function label_120cell(nodes, links, faces, startf, startn) {
|
||||||
const pole = face_plus_to_dodecahedron(faces, startf, startn);
|
const pole = face_plus_to_dodecahedron(faces, startf, startn);
|
||||||
const dds = [ pole ];
|
const dds = [ pole ];
|
||||||
const dd_families = { "0": [ pole ] }
|
|
||||||
|
|
||||||
const seen = {};
|
const seen = {};
|
||||||
seen[dd_fingerprint(pole)] = true;
|
seen[dd_fingerprint(pole)] = true;
|
||||||
|
@ -682,24 +708,15 @@ export function label_120cell(nodes, links, faces, startf, startn) {
|
||||||
const colours = colour_dodecahedron_from_face(dds[0], [ 1, 2, 3, 4, 5 ] );
|
const colours = colour_dodecahedron_from_face(dds[0], [ 1, 2, 3, 4, 5 ] );
|
||||||
const vs = dodecahedron_vertices(dds[0]);
|
const vs = dodecahedron_vertices(dds[0]);
|
||||||
|
|
||||||
dd_families["1"] = [];
|
|
||||||
|
|
||||||
for( const face of pole ) {
|
for( const face of pole ) {
|
||||||
const [ nextdd, ncolours ] = follow_and_colour(
|
const [ nextdd, ncolours ] = follow_and_colour(
|
||||||
nodes, links, faces, colours, pole, face
|
nodes, links, faces, colours, pole, face
|
||||||
);
|
);
|
||||||
add_colours(colours, ncolours);
|
add_colours(colours, ncolours);
|
||||||
dds.push(nextdd);
|
dds.push(nextdd);
|
||||||
dd_families["1"].push(nextdd);
|
|
||||||
seen[dd_fingerprint(nextdd)] = true;
|
seen[dd_fingerprint(nextdd)] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// go around all of the arctic circle and grow all faces
|
|
||||||
|
|
||||||
// 1, 12, 20, 12, 30 = 75
|
|
||||||
// 0 1 13, 33, 45
|
|
||||||
|
|
||||||
dd_families["2"] = [];
|
|
||||||
|
|
||||||
for( const a of dds.slice(1, 13) ) {
|
for( const a of dds.slice(1, 13) ) {
|
||||||
for( const i of [ 6, 7, 8, 9, 10 ] ) {
|
for( const i of [ 6, 7, 8, 9, 10 ] ) {
|
||||||
|
@ -710,7 +727,6 @@ export function label_120cell(nodes, links, faces, startf, startn) {
|
||||||
if( !(fp in seen) ) {
|
if( !(fp in seen) ) {
|
||||||
add_colours(colours, ncolours);
|
add_colours(colours, ncolours);
|
||||||
dds.push(nextdd);
|
dds.push(nextdd);
|
||||||
dd_families["2"].push(nextdd);
|
|
||||||
seen[fp] = true;
|
seen[fp] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -718,7 +734,6 @@ export function label_120cell(nodes, links, faces, startf, startn) {
|
||||||
|
|
||||||
// meridians = 45
|
// meridians = 45
|
||||||
|
|
||||||
dd_families["3"] = [];
|
|
||||||
for( const a of dds.slice(1, 13) ) {
|
for( const a of dds.slice(1, 13) ) {
|
||||||
const [ nextdd, ncolours ] = follow_and_colour(
|
const [ nextdd, ncolours ] = follow_and_colour(
|
||||||
nodes, links, faces, colours, a, a[11]
|
nodes, links, faces, colours, a, a[11]
|
||||||
|
@ -727,7 +742,6 @@ export function label_120cell(nodes, links, faces, startf, startn) {
|
||||||
if( !(fp in seen) ) {
|
if( !(fp in seen) ) {
|
||||||
add_colours(colours, ncolours);
|
add_colours(colours, ncolours);
|
||||||
dds.push(nextdd);
|
dds.push(nextdd);
|
||||||
dd_families["3"].push(nextdd);
|
|
||||||
seen[fp] = true;
|
seen[fp] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -735,8 +749,6 @@ export function label_120cell(nodes, links, faces, startf, startn) {
|
||||||
// the 30 equatorials?
|
// the 30 equatorials?
|
||||||
|
|
||||||
|
|
||||||
dd_families["4"] = [];
|
|
||||||
|
|
||||||
for( const a of dds.slice(13, 46) ) {
|
for( const a of dds.slice(13, 46) ) {
|
||||||
for( const i of [ 6, 7, 8, 9, 10 ] ) {
|
for( const i of [ 6, 7, 8, 9, 10 ] ) {
|
||||||
const [ nextdd, ncolours ] = follow_and_colour(
|
const [ nextdd, ncolours ] = follow_and_colour(
|
||||||
|
@ -745,15 +757,12 @@ export function label_120cell(nodes, links, faces, startf, startn) {
|
||||||
const fp = dd_fingerprint(nextdd);
|
const fp = dd_fingerprint(nextdd);
|
||||||
if( !(fp in seen) ) {
|
if( !(fp in seen) ) {
|
||||||
add_colours(colours, ncolours);
|
add_colours(colours, ncolours);
|
||||||
dd_families["4"].push(nextdd);
|
|
||||||
dds.push(nextdd);
|
dds.push(nextdd);
|
||||||
seen[fp] = true;
|
seen[fp] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dd_families["5"] = [];
|
|
||||||
|
|
||||||
for( const a of dds.slice(33, 76) ) {
|
for( const a of dds.slice(33, 76) ) {
|
||||||
for( const i of [ 6, 7, 8, 9, 10 ] ) {
|
for( const i of [ 6, 7, 8, 9, 10 ] ) {
|
||||||
const [ nextdd, ncolours ] = follow_and_colour(
|
const [ nextdd, ncolours ] = follow_and_colour(
|
||||||
|
@ -763,7 +772,6 @@ export function label_120cell(nodes, links, faces, startf, startn) {
|
||||||
if( !(fp in seen) ) {
|
if( !(fp in seen) ) {
|
||||||
add_colours(colours, ncolours);
|
add_colours(colours, ncolours);
|
||||||
dds.push(nextdd);
|
dds.push(nextdd);
|
||||||
dd_families["5"].push(nextdd);
|
|
||||||
seen[fp] = true;
|
seen[fp] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -772,8 +780,6 @@ export function label_120cell(nodes, links, faces, startf, startn) {
|
||||||
|
|
||||||
// this should get the rest or explode!
|
// this should get the rest or explode!
|
||||||
|
|
||||||
dd_families["6"] = [];
|
|
||||||
|
|
||||||
|
|
||||||
for( const a of dds ) {
|
for( const a of dds ) {
|
||||||
for( const i of [ 6, 7, 8, 9, 10 ] ) {
|
for( const i of [ 6, 7, 8, 9, 10 ] ) {
|
||||||
|
@ -783,7 +789,6 @@ export function label_120cell(nodes, links, faces, startf, startn) {
|
||||||
const fp = dd_fingerprint(nextdd);
|
const fp = dd_fingerprint(nextdd);
|
||||||
if( !(fp in seen) ) {
|
if( !(fp in seen) ) {
|
||||||
add_colours(colours, ncolours);
|
add_colours(colours, ncolours);
|
||||||
dd_families["6"].push(nextdd);
|
|
||||||
dds.push(nextdd);
|
dds.push(nextdd);
|
||||||
seen[fp] = true;
|
seen[fp] = true;
|
||||||
}
|
}
|
||||||
|
@ -797,6 +802,124 @@ export function label_120cell(nodes, links, faces, startf, startn) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return { dodecahedra: dds, labels: labels };
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export function cell120_layers(nodes, links, faces, startf, startn, max_layer) {
|
||||||
|
const pole = face_plus_to_dodecahedron(faces, startf, startn);
|
||||||
|
const dds = [ pole ];
|
||||||
|
const dd_families = { "0": [ pole ] }
|
||||||
|
|
||||||
|
const seen = {};
|
||||||
|
seen[dd_fingerprint(pole)] = true;
|
||||||
|
|
||||||
|
const colours = colour_dodecahedron_from_face(dds[0], [ 1, 2, 3, 4, 5 ] );
|
||||||
|
const vs = dodecahedron_vertices(dds[0]);
|
||||||
|
|
||||||
|
// arctic
|
||||||
|
|
||||||
|
if( max_layer > 0 ) {
|
||||||
|
dd_families["1"] = [];
|
||||||
|
|
||||||
|
for( const face of pole ) {
|
||||||
|
const [ nextdd, ncolours ] = follow_and_colour(
|
||||||
|
nodes, links, faces, colours, pole, face
|
||||||
|
);
|
||||||
|
add_colours(colours, ncolours);
|
||||||
|
dds.push(nextdd);
|
||||||
|
dd_families["1"].push(nextdd);
|
||||||
|
seen[dd_fingerprint(nextdd)] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// subarctic - interstitial
|
||||||
|
|
||||||
|
if( max_layer > 1 ) {
|
||||||
|
dd_families["2"] = [];
|
||||||
|
|
||||||
|
for( const a of dd_families["1"] ) {
|
||||||
|
for( const i of [ 6, 7, 8, 9, 10 ] ) {
|
||||||
|
const [ nextdd, ncolours ] = follow_and_colour(
|
||||||
|
nodes, links, faces, colours, a, a[i]
|
||||||
|
);
|
||||||
|
const fp = dd_fingerprint(nextdd);
|
||||||
|
if( !(fp in seen) ) {
|
||||||
|
add_colours(colours, ncolours);
|
||||||
|
dds.push(nextdd);
|
||||||
|
dd_families["2"].push(nextdd);
|
||||||
|
seen[fp] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// tropic of cancer
|
||||||
|
|
||||||
|
if( max_layer > 2 ) {
|
||||||
|
dd_families["3"] = [];
|
||||||
|
|
||||||
|
for( const a of dd_families["1"] ) {
|
||||||
|
const [ nextdd, ncolours ] = follow_and_colour(
|
||||||
|
nodes, links, faces, colours, a, a[11]
|
||||||
|
);
|
||||||
|
const fp = dd_fingerprint(nextdd);
|
||||||
|
if( !(fp in seen) ) {
|
||||||
|
add_colours(colours, ncolours);
|
||||||
|
dds.push(nextdd);
|
||||||
|
dd_families["3"].push(nextdd);
|
||||||
|
seen[fp] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( max_layer > 3 ) {
|
||||||
|
// equator
|
||||||
|
|
||||||
|
dd_families["4"] = [];
|
||||||
|
|
||||||
|
for( const a of dds.slice(13, 46) ) {
|
||||||
|
for( const i of [ 6, 7, 8, 9, 10 ] ) {
|
||||||
|
const [ nextdd, ncolours ] = follow_and_colour(
|
||||||
|
nodes, links, faces, colours, a, a[i]
|
||||||
|
);
|
||||||
|
const fp = dd_fingerprint(nextdd);
|
||||||
|
if( !(fp in seen) ) {
|
||||||
|
add_colours(colours, ncolours);
|
||||||
|
dd_families["4"].push(nextdd);
|
||||||
|
dds.push(nextdd);
|
||||||
|
seen[fp] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( max_layer > 4 ) {
|
||||||
|
dd_families["5"] = [];
|
||||||
|
|
||||||
|
for( const a of dd_families["4"] ) {
|
||||||
|
for( const i of [ 6, 7, 8, 9, 10 ] ) {
|
||||||
|
const [ nextdd, ncolours ] = follow_and_colour(
|
||||||
|
nodes, links, faces, colours, a, a[i]
|
||||||
|
);
|
||||||
|
const fp = dd_fingerprint(nextdd);
|
||||||
|
if( !(fp in seen) ) {
|
||||||
|
add_colours(colours, ncolours);
|
||||||
|
dds.push(nextdd);
|
||||||
|
dd_families["5"].push(nextdd);
|
||||||
|
seen[fp] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const labels = { 1: [], 2:[], 3:[], 4:[], 5:[] };
|
||||||
|
for( const vstr in colours ) {
|
||||||
|
labels[colours[vstr]].push(Number(vstr));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return { dodecahedra: dds, labels: labels, families: dd_families };
|
return { dodecahedra: dds, labels: labels, families: dd_families };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -919,7 +1042,7 @@ function meridian_label_120cell(nodes) {
|
||||||
//label_nodes(nodes, [313], 6);
|
//label_nodes(nodes, [313], 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1
|
||||||
function check_120cell_nodes(nodes) {
|
function check_120cell_nodes(nodes) {
|
||||||
nodes.map((n) => {
|
nodes.map((n) => {
|
||||||
const vs = find_adjacent_labels(nodes, links, n.id);
|
const vs = find_adjacent_labels(nodes, links, n.id);
|
||||||
|
@ -962,29 +1085,105 @@ export function make_labelled_120cell() {
|
||||||
return labelled;
|
return labelled;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function make_layered_120cell() {
|
// calculate the w-distance of a dodecahedron's centroid
|
||||||
const labelled = make_labelled_120cell();
|
|
||||||
|
|
||||||
// relabel by layer
|
export function dd_w_distance(nodes, dd) {
|
||||||
|
const vertices = new Set();
|
||||||
|
dd.map((f) => f.nodes.map((n) => vertices.add(n)));
|
||||||
|
|
||||||
|
let w = 0;
|
||||||
|
for( const nid of vertices ) {
|
||||||
|
const node = node_by_id(nodes, nid);
|
||||||
|
w += node.w;
|
||||||
|
}
|
||||||
|
return w / 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export function sort_dds_w(nodes, dds) {
|
||||||
|
dds.sort((a, b) => {
|
||||||
|
return dd_w_distance(nodes, a) - dd_w_distance(nodes, b)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export function find_antipode_dd(nodes, links, dd) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// notes because I'm too sick to continue working on this today
|
||||||
|
// the vertices which aren't counted by the layers are showing
|
||||||
|
// up in the visualisation because they are labelled "0" by default -
|
||||||
|
// for this to work better there needs to be a value which is never
|
||||||
|
// displayed.
|
||||||
|
|
||||||
|
// in the current layer algorithm, layer '5' (the one after the equator)
|
||||||
|
// is too greedy
|
||||||
|
|
||||||
|
export function make_layered_120cell(max_layer) {
|
||||||
|
const nodes = make_120cell_vertices();
|
||||||
|
const links = auto_detect_edges(nodes, 4);
|
||||||
|
const faces = auto_120cell_faces(links);
|
||||||
|
|
||||||
|
const labelled = label_120cell(nodes, links, faces, faces[628], 250, max_layer);
|
||||||
|
|
||||||
|
// get layers from sorted w-distance order
|
||||||
|
|
||||||
|
const dds = labelled.dodecahedra;
|
||||||
|
dds.sort((a, b) => dd_w_distance(nodes, b) - dd_w_distance(nodes, a));
|
||||||
|
|
||||||
|
const LAYERS = [
|
||||||
|
[ "0", 1 ],
|
||||||
|
[ "1", 12 ],
|
||||||
|
[ "2", 20 ],
|
||||||
|
[ "3", 12 ],
|
||||||
|
[ "4", 30 ],
|
||||||
|
[ "5", 12 ],
|
||||||
|
[ "6", 20 ],
|
||||||
|
[ "7", 12 ],
|
||||||
|
[ "8", 1]
|
||||||
|
];
|
||||||
|
|
||||||
const layer_dds = labelled["families"];
|
const layer_dds = labelled["families"];
|
||||||
const vertices_layers = {};
|
const vertices_layers = {};
|
||||||
const seen = {};
|
const seen = {};
|
||||||
|
let i = 0;
|
||||||
|
|
||||||
for( const layer of [ "0", "1", "2", "3", "4", "5", "6"] ) {
|
for( const layer of LAYERS ) {
|
||||||
vertices_layers[layer] = [];
|
const label = layer[0];
|
||||||
for( const dd of layer_dds[layer] ) {
|
const n = layer[1];
|
||||||
|
vertices_layers[label] = [];
|
||||||
|
console.log(`Layer ${label} starting at ${i}`);
|
||||||
|
for( const dd of dds.slice(i, i + n) ) {
|
||||||
|
console.log(dd_w_distance(nodes, dd));
|
||||||
for( const face of dd ) {
|
for( const face of dd ) {
|
||||||
for( const n of face.nodes ) {
|
for( const n of face.nodes ) {
|
||||||
if( !seen[n] ) {
|
if( !seen[n] ) {
|
||||||
vertices_layers[layer].push(n);
|
vertices_layers[label].push(n);
|
||||||
seen[n] = true;
|
seen[n] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
i += n;
|
||||||
}
|
}
|
||||||
return vertices_layers;
|
return JSON.stringify(vertices_layers);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function make_meridians(bumpdir) {
|
||||||
|
const nodes = make_120cell_vertices();
|
||||||
|
const links = auto_detect_edges(nodes, 4);
|
||||||
|
const faces = auto_120cell_faces(links);
|
||||||
|
|
||||||
|
const mbs ={}
|
||||||
|
for( const bumpdir of [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ] ) {
|
||||||
|
mbs[bumpdir] = meridian_bump(nodes, links, faces, faces[0], 341, bumpdir)
|
||||||
|
}
|
||||||
|
|
||||||
|
return mbs;
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
4
main.js
4
main.js
|
@ -23,10 +23,10 @@ scene.add(light);
|
||||||
const amblight = new THREE.AmbientLight(0xffffff, 0.5);
|
const amblight = new THREE.AmbientLight(0xffffff, 0.5);
|
||||||
scene.add(amblight);
|
scene.add(amblight);
|
||||||
|
|
||||||
camera.position.set(1, 1, 3);
|
camera.position.set(0, 0, 4);
|
||||||
|
|
||||||
camera.lookAt(0, 0, 0);
|
camera.lookAt(0, 0, 0);
|
||||||
camera.position.z = 4;
|
//camera.position.z = 4;
|
||||||
|
|
||||||
const renderer = new THREE.WebGLRenderer({antialias: true});
|
const renderer = new THREE.WebGLRenderer({antialias: true});
|
||||||
renderer.setSize( window.innerWidth, window.innerHeight );
|
renderer.setSize( window.innerWidth, window.innerHeight );
|
||||||
|
|
51
polytopes.js
51
polytopes.js
|
@ -348,43 +348,6 @@ function label_faces_120cell(nodes, faces, cfaces, label) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function basic_auto_label_120cell(nodes, links) {
|
|
||||||
|
|
||||||
const faces = auto_120cell_faces(links);
|
|
||||||
const dodecas = DODECAHEDRA.DODECAHEDRA;
|
|
||||||
//const cfaces = [ 1, 2, 4, 145, 169 ];
|
|
||||||
|
|
||||||
let colour = 1;
|
|
||||||
for( const dd of dodecas ) {
|
|
||||||
label_faces_120cell(nodes, faces, dd, colour);
|
|
||||||
colour++;
|
|
||||||
if( colour > 8 ) {
|
|
||||||
colour = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function label_120cell(nodes) {
|
|
||||||
|
|
||||||
for( const cstr in CELL120.INDEX ) {
|
|
||||||
label_nodes(nodes, CELL120.INDEX[cstr], Number(cstr));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function layered_120cell(nodes, max_layer) {
|
|
||||||
for (const cstr in CELL120.LAYERS ) {
|
|
||||||
label_nodes(nodes, CELL120.LAYERS[cstr], Number(cstr));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function link_labels(nodes, link) {
|
function link_labels(nodes, link) {
|
||||||
const n1 = nodes.filter((n) => n.id === link.source);
|
const n1 = nodes.filter((n) => n.id === link.source);
|
||||||
const n2 = nodes.filter((n) => n.id === link.target);
|
const n2 = nodes.filter((n) => n.id === link.target);
|
||||||
|
@ -399,7 +362,11 @@ export const cell120_layered = (max) => {
|
||||||
const nodes = make_120cell_vertices();
|
const nodes = make_120cell_vertices();
|
||||||
const links = auto_detect_edges(nodes, 4);
|
const links = auto_detect_edges(nodes, 4);
|
||||||
|
|
||||||
layered_120cell(nodes);
|
nodes.map((n) => n.label = 9); // make all invisible by default
|
||||||
|
|
||||||
|
for (const cstr in CELL120.LAYERS ) {
|
||||||
|
label_nodes(nodes, CELL120.LAYERS[cstr], Number(cstr));
|
||||||
|
}
|
||||||
|
|
||||||
links.map((l) => {
|
links.map((l) => {
|
||||||
const labels = link_labels(nodes, l);
|
const labels = link_labels(nodes, l);
|
||||||
|
@ -413,9 +380,9 @@ export const cell120_layered = (max) => {
|
||||||
const options = [];
|
const options = [];
|
||||||
const layers = [];
|
const layers = [];
|
||||||
|
|
||||||
for( const i of [ 0, 1, 2, 3, 4, 5, 6 ] ) {
|
for( const i of [ 0, 1, 2, 3, 4, 5, 6, 7 ] ) {
|
||||||
layers.push(i);
|
layers.push(i);
|
||||||
options.push({
|
options.unshift({
|
||||||
name: "Layer " + String(i),
|
name: "Layer " + String(i),
|
||||||
links: [...layers],
|
links: [...layers],
|
||||||
nodes: [...layers]
|
nodes: [...layers]
|
||||||
|
@ -441,7 +408,9 @@ export const cell120_inscribed = () => {
|
||||||
const nodes = make_120cell_vertices();
|
const nodes = make_120cell_vertices();
|
||||||
const links = auto_detect_edges(nodes, 4);
|
const links = auto_detect_edges(nodes, 4);
|
||||||
|
|
||||||
label_120cell(nodes);
|
for( const cstr in CELL120.INDEX ) {
|
||||||
|
label_nodes(nodes, CELL120.INDEX[cstr], Number(cstr));
|
||||||
|
}
|
||||||
|
|
||||||
links.map((l) => l.label = 0);
|
links.map((l) => l.label = 0);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue