diff --git a/app-proto/src/components/test_assembly_chooser.rs b/app-proto/src/components/test_assembly_chooser.rs index 85f30b0..581aa6f 100644 --- a/app-proto/src/components/test_assembly_chooser.rs +++ b/app-proto/src/components/test_assembly_chooser.rs @@ -824,41 +824,41 @@ const_array!(ACRON554_COMMON: (&str, [f64; 3], bool, usize, &str) = [ ("A_NW", [-0.5, 0.5, 0.], P, 0, ""), ("A_SE", [ 0.5, -0.5, 0.], P, 0, ""), ("A_SW", [-0.5, -0.5, 0.], P, 0, ""), - ("Z_E", [ 0.229, -0.002, 0.821], F, 1, "A_NE,A_SE"), - ("Z_S", [ 0.002, -0.229, 0.821], F, 1, "A_SE,A_SW"), + ("Z_E", [ 0.229, -0.002, 0.822], F, 1, "A_NE,A_SE"), + ("Z_S", [ 0.002, -0.229, 0.822], F, 1, "A_SE,A_SW"), ("B_NE", [ HPHI, HPHI, RTHPHI], P, 2, "Z_E"), ("B_NW", [-HPHI, HPHI, RTHPHI], P, 2, ""), ("B_SW", [-HPHI, -HPHI, RTHPHI], P, 2, "Z_S"), - ("B_SE", [ 0.812, -0.812, 0.89], F, 2, "A_SE,Z_E,Z_S"), - ("Y_NE", [ 0.11, 0.103, 1.019], F, 3, "B_NE"), - ("Y_NW", [-0.103, 0.103, 1.02], F, 3, "B_NW"), - ("Y_SE", [ 0.11, -0.11, 1.017], F, 3, "B_SE"), - ("Y_SW", [-0.103, -0.11, 1.019], F, 3, "B_SW"), + ("B_SE", [ 0.812, -0.812, 0.897], F, 2, "A_SE,Z_E,Z_S"), + ("Y_NE", [ 0.11, 0.104, 1.019], F, 3, "B_NE"), + ("Y_NW", [-0.104, 0.104, 1.019], F, 3, "B_NW"), + ("Y_SE", [ 0.11, -0.11, 1.018], F, 3, "B_SE"), + ("Y_SW", [-0.104, -0.11, 1.019], F, 3, "B_SW"), ("C_N", [ 0., 1., RTPHIPH], P, 4, "Y_NE,Y_NW"), ("C_W", [-1., 0., RTPHIPH], P, 4, "Y_NW,Y_SW"), - ("C_E", [ 1.006, -0.006, 1.45], F, 4, "B_NE,B_SE,Y_NE,Y_SE"), - ("C_S", [ 0.006, -1.006, 1.45], F, 4, "B_SE,B_SW,Y_SE,Y_SW"), - ("D_NE", [ 0.2, 0.181, 2.011], F, 5, "Y_NE,C_N,C_E"), - ("D_NW", [-0.181, 0.181, 2.014], F, 5, "Y_NW,C_N,C_W"), - ("D_SE", [ 0.2, -0.2, 2.009], F, 5, "Y_SE,C_E,C_S"), - ("D_SW", [-0.181, -0.2, 2.011], F, 5, "Y_SW,C_W,C_S"), - ("E_N", [ 0.012, 1.055, 2.46], F, 6, "C_N,D_NE,D_NW"), - ("E_W", [-1.055, -0.012, 2.46], F, 6, "C_W,D_NW,D_SW"), - ("E_E", [ 1.079, -0.012, 2.447], F, 6, "C_E,D_NE,D_SE"), - ("E_S", [ 0.012, -1.079, 2.447], F, 6, "C_S,D_SE,D_SW"), - ("F_NE", [ 0.296, 0.265, 3.003], F, 7, "D_NE,E_N,E_E"), - ("F_NW", [-0.265, 0.265, 3.007], F, 7, "D_NW,E_N,E_W"), - ("F_SE", [ 0.296, -0.296, 3.0], F, 7, "D_SE,E_E,E_S"), - ("F_SW", [-0.265, -0.296, 3.003], F, 7, "D_SW,E_W,E_S"), + ("C_E", [ 1.003, -0.003, 1.454], F, 4, "B_NE,B_SE,Y_NE,Y_SE"), + ("C_S", [ 0.003, -1.003, 1.454], F, 4, "B_SE,B_SW,Y_SE,Y_SW"), + ("D_NE", [ 0.195, 0.186, 2.012], F, 5, "Y_NE,C_N,C_E"), + ("D_NW", [-0.186, 0.186, 2.012], F, 5, "Y_NW,C_N,C_W"), + ("D_SE", [ 0.195, -0.195, 2.011], F, 5, "Y_SE,C_E,C_S"), + ("D_SW", [-0.186, -0.195, 2.012], F, 5, "Y_SW,C_W,C_S"), + ("E_N", [ 0.005, 1.062, 2.455], F, 6, "C_N,D_NE,D_NW"), + ("E_W", [-1.063, -0.005, 2.455], F, 6, "C_W,D_NW,D_SW"), + ("E_E", [ 1.072, -0.005, 2.452], F, 6, "C_E,D_NE,D_SE"), + ("E_S", [ 0.005, -1.072, 2.452], F, 6, "C_S,D_SE,D_SW"), + ("F_NE", [ 0.286, 0.275, 3.003], F, 7, "D_NE,E_N,E_E"), + ("F_NW", [-0.275, 0.275, 3.004], F, 7, "D_NW,E_N,E_W"), + ("F_SE", [ 0.286, -0.286, 3.003], F, 7, "D_SE,E_E,E_S"), + ("F_SW", [-0.275, -0.286, 3.003], F, 7, "D_SW,E_W,E_S"), // The following must be in order around the octagon (in some orientation) - ("G_1", [ 0.517, 1.19, 3.312], F, 8, "E_N,F_NE"), - ("G_2", [ 1.224, 0.483, 3.304], F, 8, "E_E,F_NE"), - ("G_4", [ 1.224, -0.517, 3.298], F, 8, "E_E,F_SE"), - ("G_5", [ 0.517, -1.224, 3.298], F, 8, "E_S,F_SE"), - ("G_7", [-0.483, -1.224, 3.304], F, 8, "E_S,F_SW"), - ("G_8", [-1.19, -0.517, 3.312], F, 8, "E_W,F_SW"), - ("G_10", [-1.19, 0.483, 3.318], F, 8, "E_W,F_NW"), - ("G_11", [-0.483, 1.19, 3.318], F, 8, "E_N,F_NW"), + ("G_1", [ 0.506, 1.201, 3.309], F, 8, "E_N,F_NE"), + ("G_2", [ 1.213, 0.494, 3.307], F, 8, "E_E,F_NE"), + ("G_4", [ 1.213, -0.506, 3.306], F, 8, "E_E,F_SE"), + ("G_5", [ 0.506, -1.213, 3.306], F, 8, "E_S,F_SE"), + ("G_7", [-0.494, -1.213, 3.307], F, 8, "E_S,F_SW"), + ("G_8", [-1.201, -0.506, 3.309], F, 8, "E_W,F_SW"), + ("G_10", [-1.201, 0.494, 3.311], F, 8, "E_W,F_NW"), + ("G_11", [-0.494, 1.201, 3.311], F, 8, "E_N,F_NW"), ]); const_array!(LEVEL_COLORS: ElementColor = [ @@ -871,6 +871,9 @@ const_array!(LEVEL_COLORS: ElementColor = [ [0.25, 0.75, 0.], [0., 0.5, 0.75], [0.25, 0., 1.], + [0.6, 0.15, 0.6], + [0.9, 0.5, 0.6], + [0.85, 0.15, 0.35] ]); fn load_554aug2(assembly: &Assembly) { @@ -961,6 +964,37 @@ fn load_554aug2(assembly: &Assembly) { } } +const_array!(ACRON554_DOME: (&str, [f64; 3], bool, usize, &str) = [ + // id, coordinates, Pin/Free, level, earlier neighbor IDs. + ("H_E", [ 0.359, -0.006, 3.161], F, 9, "G_2,G_4"), + ("H_N", [ 0.005, 0.348, 3.158], F, 9, "G_1,G_11"), + ("H_S", [ 0.006, 0.359, 3.159], F, 9, "G_5,G_7"), + ("H_W", [-0.347, -0.005, 3.163], F, 9, "G_8,G_10"), + ("I_NE", [ 0.507, 0.493, 4.015], F, 10, "G_1,G_2,H_E,H_N"), + ("I_NW", [-0.493, 0.493, 4.013], F, 10, "G_10,G_11,H_N,H_W"), + ("I_SE", [ 0.507, -0.507, 4.012], F, 10, "G_4,G_5,H_E,H_S"), + ("I_SW", [-0.493, -0.507, 4.015], F, 10, "G_7,G_8,H_S,H_W"), + ("J", [ 0.004, -0.010, 3.303], F, 11, "I_NE,I_NW,I_SE,I_SW"), +]); + +fn load_554domed(assembly: &Assembly) { + load_554aug2(assembly); + // Now process the additional data + for (id, v, _pinned, l, neighbors) in ACRON554_DOME { + let pt = Point::new(id, id, LEVEL_COLORS[l], point(v[0], v[1], v[2])); + assembly.try_insert_element(pt); + let pt_rc = assembly.find_element(id); + // Add any specified neighbors + for id in neighbors.split(",") { + if id.len() == 0 { continue; } + let strut = InversiveDistanceRegulator::new( + [assembly.find_element(id), pt_rc.clone()]); + strut.set_to(-0.5); + assembly.insert_regulator(Rc::new(strut)); + } + } +} + // --- chooser --- /* DEBUG */ @@ -998,6 +1032,7 @@ pub fn TestAssemblyChooser() -> View { "radius-ratio" => load_radius_ratio(assembly), "irisawa-hexlet" => load_irisawa_hexlet(assembly), "aug554" => load_554aug2(assembly), + "domed554" => load_554domed(assembly), _ => (), }; }); @@ -1018,6 +1053,7 @@ pub fn TestAssemblyChooser() -> View { option(value = "radius-ratio") { "Radius ratio" } option(value = "irisawa-hexlet") { "Irisawa hexlet" } option(value = "aug554") { "McNeill acron 554" } + option(value = "domed554") { "Domed acron 554" } option(value = "empty") { "Empty" } } } diff --git a/data554/pinnedDomed1.txt b/data554/pinnedDomed1.txt new file mode 100644 index 0000000..cd0fbd1 --- /dev/null +++ b/data554/pinnedDomed1.txt @@ -0,0 +1,422 @@ +A_NE: + ┌ ┐ + │ 0.5 │ + │ 0.5 │ + │ 0 │ + │ 0.5 │ + │ 0.25 │ + └ ┘ + +A_NW: + ┌ ┐ + │ -0.5 │ + │ 0.5 │ + │ 0 │ + │ 0.5 │ + │ 0.25 │ + └ ┘ + +A_SE: + ┌ ┐ + │ 0.5 │ + │ -0.5 │ + │ 0 │ + │ 0.5 │ + │ 0.25 │ + └ ┘ + +A_SW: + ┌ ┐ + │ -0.5 │ + │ -0.5 │ + │ 0 │ + │ 0.5 │ + │ 0.25 │ + └ ┘ + +Z_E: + ┌ ┐ + │ 0.226403187618189 │ + │ -0.0000011852849153538265 │ + │ 0.8216719444221399 │ + │ 0.5 │ + │ 0.36320159380866957 │ + └ ┘ + +Z_S: + ┌ ┐ + │ 0.0000012064271737704876 │ + │ -0.22640322646306607 │ + │ 0.8216719573565728 │ + │ 0.5 │ + │ 0.36320161323110667 │ + └ ┘ + +B_NE: + ┌ ┐ + │ 0.8090169943749475 │ + │ 0.8090169943749475 │ + │ 0.8994537199739336 │ + │ 0.5 │ + │ 1.0590169943749475 │ + └ ┘ + +B_NW: + ┌ ┐ + │ -0.8090169943749475 │ + │ 0.8090169943749475 │ + │ 0.8994537199739336 │ + │ 0.5 │ + │ 1.0590169943749475 │ + └ ┘ + +B_SW: + ┌ ┐ + │ -0.8090169943749475 │ + │ -0.8090169943749475 │ + │ 0.8994537199739336 │ + │ 0.5 │ + │ 1.0590169943749475 │ + └ ┘ + +B_SE: + ┌ ┐ + │ 0.8090190229759617 │ + │ -0.8090188141637347 │ + │ 0.899451950040933 │ + │ 0.5 │ + │ 1.059018649731349 │ + └ ┘ + +Y_NE: + ┌ ┐ + │ 0.10639264310226318 │ + │ 0.10730337799321536 │ + │ 1.0174285282252145 │ + │ 0.5 │ + │ 0.5289971090900759 │ + └ ┘ + +Y_NW: + ┌ ┐ + │ -0.10692454007698927 │ + │ 0.10692454007699025 │ + │ 1.0183290894713781 │ + │ 0.5 │ + │ 0.5299299245035725 │ + └ ┘ + +Y_SE: + ┌ ┐ + │ 0.10619251333984216 │ + │ -0.10758965782463996 │ + │ 1.0179033510994517 │ + │ 0.5 │ + │ 0.5294898085465076 │ + └ ┘ + +Y_SW: + ┌ ┐ + │ -0.1067218861162948 │ + │ -0.10720833408227096 │ + │ 1.018815416393646 │ + │ 0.5 │ + │ 0.5304340206102979 │ + └ ┘ + +C_N: + ┌ ┐ + │ 0 │ + │ 1 │ + │ 1.4553466902253547 │ + │ 0.5 │ + │ 1.5590169943749472 │ + └ ┘ + +C_W: + ┌ ┐ + │ -1 │ + │ 0 │ + │ 1.4553466902253547 │ + │ 0.5 │ + │ 1.5590169943749472 │ + └ ┘ + +C_E: + ┌ ┐ + │ 0.9987752175493758 │ + │ -0.0000014991453936079486 │ + │ 1.4557639853989686 │ + │ 0.5 │ + │ 1.558400358790791 │ + └ ┘ + +C_S: + ┌ ┐ + │ 0.0000016241779451142522 │ + │ -1.0006558417024733 │ + │ 1.4551187604443314 │ + │ 0.5 │ + │ 1.5593413623171548 │ + └ ┘ + +D_NE: + ┌ ┐ + │ 0.18880014858596228 │ + │ 0.1900242678455326 │ + │ 2.0105891402812603 │ + │ 0.5 │ + │ 2.057111349663646 │ + └ ┘ + +D_NW: + ┌ ┐ + │ -0.19098138154171115 │ + │ 0.19098137963576622 │ + │ 2.0112375319589524 │ + │ 0.5 │ + │ 2.0590124438119553 │ + └ ┘ + +D_SE: + ┌ ┐ + │ 0.18930742120763205 │ + │ -0.19118865645940125 │ + │ 2.0109297224500113 │ + │ 0.5 │ + │ 2.0581147310902232 │ + └ ┘ + +D_SW: + ┌ ┐ + │ -0.19150073518747784 │ + │ -0.19215789298794494 │ + │ 2.011588230853374 │ + │ 0.5 │ + │ 2.060041842611764 │ + └ ┘ + +E_N: + ┌ ┐ + │ 0.0018705386847266854 │ + │ 1.067093230632768 │ + │ 2.4530916457713374 │ + │ 0.5 │ + │ 3.5781750425903667 │ + └ ┘ + +E_W: + ┌ ┐ + │ -1.0677431983248686 │ + │ 0.0010069929693730891 │ + │ 2.453048970298719 │ + │ 0.5 │ + │ 3.578762902144111 │ + └ ┘ + +E_E: + ┌ ┐ + │ 1.0651802756853244 │ + │ 0.0009763264191362732 │ + │ 2.4535562533844497 │ + │ 0.5 │ + │ 3.5772741307914204 │ + └ ┘ + +E_S: + ┌ ┐ + │ 0.0019014550057512374 │ + │ -1.0684657533845878 │ + │ 2.4528152065600635 │ + │ 0.5 │ + │ 3.5789625604223154 │ + └ ┘ + +F_NE: + ┌ ┐ + │ 0.2768627273275836 │ + │ 0.27828736361573514 │ + │ 3.0027865275597208 │ + │ 0.5 │ + │ 4.58541185017254 │ + └ ┘ + +F_NW: + ┌ ┐ + │ -0.28103002630311136 │ + │ 0.2812882756471644 │ + │ 3.0030716277259866 │ + │ 0.5 │ + │ 4.588270112066947 │ + └ ┘ + +F_SE: + ┌ ┐ + │ 0.2784445942560668 │ + │ -0.28049951604978735 │ + │ 3.002936318943545 │ + │ 0.5 │ + │ 4.586918980412344 │ + └ ┘ + +F_SW: + ┌ ┐ + │ -0.28267553068657514 │ + │ -0.2835640963165625 │ + │ 3.0032197706602255 │ + │ 0.5 │ + │ 4.58982149472019 │ + └ ┘ + +G_1: + ┌ ┐ + │ 0.49499953176717715 │ + │ 1.2038466206487632 │ + │ 3.3122320493386623 │ + │ 0.5 │ + │ 6.332576199448855 │ + └ ┘ + +G_2: + ┌ ┐ + │ 1.202713808441931 │ + │ 0.49734958577973293 │ + │ 3.3107015388161924 │ + │ 0.5 │ + │ 6.327310911161432 │ + └ ┘ + +G_4: + ┌ ┐ + │ 1.205139169495155 │ + │ -0.5026367636047644 │ + │ 3.3060733731956917 │ + │ 0.5 │ + │ 6.3175626265818385 │ + └ ┘ + +G_5: + ┌ ┐ + │ 0.49496884524644963 │ + │ -1.2066437505221832 │ + │ 3.3117630879125723 │ + │ 0.5 │ + │ 6.334379009718901 │ + └ ┘ + +G_7: + ┌ ┐ + │ -0.5049809193563459 │ + │ -1.2113397181531034 │ + │ 3.3029076805907547 │ + │ 0.5 │ + │ 6.315774407531318 │ + └ ┘ + +G_8: + ┌ ┐ + │ -1.2105141090163352 │ + │ -0.502666189603216 │ + │ 3.305064063797819 │ + │ 0.5 │ + │ 6.320733099502539 │ + └ ┘ + +G_10: + ┌ ┐ + │ -1.2079897553472638 │ + │ 0.49731945797605365 │ + │ 3.309789835947903 │ + │ 0.5 │ + │ 6.330637311024589 │ + └ ┘ + +G_11: + ┌ ┐ + │ -0.5049515565196006 │ + │ 1.2084435744379876 │ + │ 3.303474805253526 │ + │ 0.5 │ + │ 6.314128853476387 │ + └ ┘ + +H_E: + ┌ ┐ + │ 0.3493418610082748 │ + │ -0.004066882149056481 │ + │ 3.1680910206723154 │ + │ 0.5 │ + │ 5.079428493907433 │ + └ ┘ + +H_N: + ┌ ┐ + │ -0.007700036653444471 │ + │ 0.35115095882911657 │ + │ 3.1700941994675693 │ + │ 0.5 │ + │ 5.086431758305634 │ + └ ┘ + +H_S: + ┌ ┐ + │ -0.007865804611166411 │ + │ -0.3529429622292672 │ + │ 3.176292181037656 │ + │ 0.5 │ + │ 5.10673131179707 │ + └ ┘ + +H_W: + ┌ ┐ + │ -0.35269124233601623 │ + │ -0.004232365263278458 │ + │ 3.179750192542026 │ + │ 0.5 │ + │ 5.117610155394313 │ + └ ┘ + +I_NE: + ┌ ┐ + │ 0.49805064236295854 │ + │ 0.4976522130513484 │ + │ 4.020243412022774 │ + │ 0.5 │ + │ 8.329034633323353 │ + └ ┘ + +I_NW: + ┌ ┐ + │ -0.5060555022841527 │ + │ 0.5128022974270082 │ + │ 4.021863319771454 │ + │ 0.5 │ + │ 8.34722145884986 │ + └ ┘ + +I_SE: + ┌ ┐ + │ 0.5060495556329386 │ + │ -0.5018683273402639 │ + │ 4.021107068324604 │ + │ 0.5 │ + │ 8.338630006433696 │ + └ ┘ + +I_SW: + ┌ ┐ + │ -0.5143110146278468 │ + │ -0.5172754412791255 │ + │ 4.0227602162137135 │ + │ 0.5 │ + │ 8.357344731885544 │ + └ ┘ + +J: + ┌ ┐ + │ -0.012852519748535315 │ + │ -0.006830373978588703 │ + │ 3.3242009136904245 │ + │ 0.5 │ + │ 5.525261774194571 │ + └ ┘ diff --git a/data554/processDomed.py b/data554/processDomed.py new file mode 100644 index 0000000..b2fe7b8 --- /dev/null +++ b/data554/processDomed.py @@ -0,0 +1,95 @@ +from math import fabs, nan, sqrt +import sys +vertices = {} +current_id = "" +for line in sys.stdin: + text = line.strip() + if text.endswith(":"): + new_id = text.strip(":") + vertices[new_id] = [] + if current_id: print(current_id, vertices[current_id]) + current_id = new_id + continue + remainder = text.strip("┌ ┐└┘│") + if len(remainder): vertices[current_id].append(float(remainder)) +print(len(vertices), "vertices found") + +P = True +F = False +HPHI = nan +RTHPHI = nan +RTPHIPH = nan +# Taken verbatim from test_assembly_chooser.rs +acron_data = [ + ("A_NE", [ 0.5, 0.5, 0.], P, 0, ""), + ("A_NW", [-0.5, 0.5, 0.], P, 0, ""), + ("A_SE", [ 0.5, -0.5, 0.], P, 0, ""), + ("A_SW", [-0.5, -0.5, 0.], P, 0, ""), + ("Z_E", [ 0.229, -0.002, 0.821], F, 1, "A_NE,A_SE"), + ("Z_S", [ 0.002, -0.229, 0.821], F, 1, "A_SE,A_SW"), + ("B_NE", [ HPHI, HPHI, RTHPHI], P, 2, "Z_E"), + ("B_NW", [-HPHI, HPHI, RTHPHI], P, 2, ""), + ("B_SW", [-HPHI, -HPHI, RTHPHI], P, 2, "Z_S"), + ("B_SE", [ 0.812, -0.812, 0.89], F, 2, "A_SE,Z_E,Z_S"), + ("Y_NE", [ 0.11, 0.103, 1.019], F, 3, "B_NE"), + ("Y_NW", [-0.103, 0.103, 1.02], F, 3, "B_NW"), + ("Y_SE", [ 0.11, -0.11, 1.017], F, 3, "B_SE"), + ("Y_SW", [-0.103, -0.11, 1.019], F, 3, "B_SW"), + ("C_N", [ 0., 1., RTPHIPH], P, 4, "Y_NE,Y_NW"), + ("C_W", [-1., 0., RTPHIPH], P, 4, "Y_NW,Y_SW"), + ("C_E", [ 1.006, -0.006, 1.45], F, 4, "B_NE,B_SE,Y_NE,Y_SE"), + ("C_S", [ 0.006, -1.006, 1.45], F, 4, "B_SE,B_SW,Y_SE,Y_SW"), + ("D_NE", [ 0.2, 0.181, 2.011], F, 5, "Y_NE,C_N,C_E"), + ("D_NW", [-0.181, 0.181, 2.014], F, 5, "Y_NW,C_N,C_W"), + ("D_SE", [ 0.2, -0.2, 2.009], F, 5, "Y_SE,C_E,C_S"), + ("D_SW", [-0.181, -0.2, 2.011], F, 5, "Y_SW,C_W,C_S"), + ("E_N", [ 0.012, 1.055, 2.46], F, 6, "C_N,D_NE,D_NW"), + ("E_W", [-1.055, -0.012, 2.46], F, 6, "C_W,D_NW,D_SW"), + ("E_E", [ 1.079, -0.012, 2.447], F, 6, "C_E,D_NE,D_SE"), + ("E_S", [ 0.012, -1.079, 2.447], F, 6, "C_S,D_SE,D_SW"), + ("F_NE", [ 0.296, 0.265, 3.003], F, 7, "D_NE,E_N,E_E"), + ("F_NW", [-0.265, 0.265, 3.007], F, 7, "D_NW,E_N,E_W"), + ("F_SE", [ 0.296, -0.296, 3.0], F, 7, "D_SE,E_E,E_S"), + ("F_SW", [-0.265, -0.296, 3.003], F, 7, "D_SW,E_W,E_S"), + # The following must be in order around the octagon (in some orientation) + ("G_1", [ 0.517, 1.19, 3.312], F, 8, "E_N,F_NE"), + ("G_2", [ 1.224, 0.483, 3.304], F, 8, "E_E,F_NE"), + ("G_4", [ 1.224, -0.517, 3.298], F, 8, "E_E,F_SE"), + ("G_5", [ 0.517, -1.224, 3.298], F, 8, "E_S,F_SE"), + ("G_7", [-0.483, -1.224, 3.304], F, 8, "E_S,F_SW"), + ("G_8", [-1.19, -0.517, 3.312], F, 8, "E_W,F_SW"), + ("G_10", [-1.19, 0.483, 3.318], F, 8, "E_W,F_NW"), + ("G_11", [-0.483, 1.19, 3.318], F, 8, "E_N,F_NW"), + # Additional data + ("H_E", [ 0.359, -0.006, 3.161], F, 9, "G_2,G_4"), + ("H_N", [ 0.005, 0.348, 3.158], F, 9, "G_1,G_11"), + ("H_S", [ 0.006, 0.359, 3.159], F, 9, "G_5,G_7"), + ("H_W", [-0.347, -0.005, 3.163], F, 9, "G_8,G_10"), + ("I_NE", [ 0.507, 0.493, 4.015], F, 10, "G_1,G_2,H_E,H_N"), + ("I_NW", [-0.493, 0.493, 4.013], F, 10, "G_10,G_11,H_N,H_W"), + ("I_SE", [ 0.507, -0.507, 4.012], F, 10, "G_4,G_5,H_E,H_S"), + ("I_SW", [-0.493, -0.507, 4.015], F, 10, "G_7,G_8,H_S,H_W"), + ("J", [ 0.004, -0.010, 3.303], F, 11, "I_NE,I_NW,I_SE,I_SW"), +] + +E = 0.0 +n_struts = 11 # for the pinned vertices, which all have length exactly 1 +for vi in range(0, len(acron_data)): + start_id = acron_data[vi][0] + start = vertices[start_id] + ends = acron_data[vi][4].split(",") + if acron_data[vi][3] == 8: + if start_id != "G_1": + ends.append(acron_data[vi-1][0]) + if vi+1 == len(acron_data) or not(acron_data[vi+1][0].startswith("G")): + ends.append("G_1") + for end_id in ends: + if not(end_id): continue + end = vertices[end_id] + dist = sqrt( + (end[0]-start[0])**2 + (end[1]-start[1])**2 + (end[2]-start[2])**2) + print(f"{start_id}-{end_id}: {dist} {dist-1}") + E += fabs(dist-1) + n_struts += 1 +print(n_struts, "unit edges") +print(f"----> Total distortion E={E}")