8 #ifndef INCLUDE_MOLASSEMBLER_SHAPES_CONSTEXPR_DATA_H
9 #define INCLUDE_MOLASSEMBLER_SHAPES_CONSTEXPR_DATA_H
20 namespace Molassembler {
44 static constexpr
PointGroup pointGroup = PointGroup::Cinfv;
45 static constexpr
unsigned size = 2;
46 static constexpr
char stringName[] =
"line";
47 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
54 static constexpr std::array<Temple::Vector, 2> coordinates {{
58 static constexpr std::array<
59 std::array<unsigned, 2>,
64 static constexpr std::array<
65 std::array<unsigned, 4>,
68 static constexpr std::array<unsigned, 0> mirror {};
84 static constexpr
PointGroup pointGroup = PointGroup::C2v;
85 static constexpr
unsigned size = 2;
86 static constexpr
char stringName[] =
"bent";
87 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
96 return Temple::Math::toRadians<double>(107);
98 static constexpr std::array<Temple::Vector, 2> coordinates {{
100 {-0.292372, 0.956305, 0.}
102 static constexpr std::array<
103 std::array<unsigned, 2>,
108 static constexpr std::array<
109 std::array<unsigned, 4>,
112 static constexpr std::array<unsigned, 0> mirror {};
134 static constexpr
PointGroup pointGroup = PointGroup::D3h;
135 static constexpr
unsigned size = 3;
136 static constexpr
char stringName[] =
"triangle";
137 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
142 return Temple::Math::toRadians<double>(120);
144 static constexpr std::array<Temple::Vector, 3> coordinates {{
149 static constexpr std::array<
150 std::array<unsigned, 3>,
156 static constexpr std::array<
157 std::array<unsigned, 4>,
160 static constexpr std::array<unsigned, 0> mirror {};
182 static constexpr
PointGroup pointGroup = PointGroup::C3v;
183 static constexpr
unsigned size = 3;
184 static constexpr
char stringName[] =
"vacant tetrahedron";
185 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
190 return Temple::Math::toRadians<double>(107.5);
192 static constexpr std::array<Temple::Vector, 3> coordinates {{
193 {0, -0.366501, 0.930418},
194 {0.805765, -0.366501, -0.465209},
195 {-0.805765, -0.366501, -0.465209}
197 static constexpr std::array<
198 std::array<unsigned, 3>,
203 static constexpr std::array<
204 std::array<unsigned, 4>,
209 static constexpr std::array<unsigned, 3> mirror {{0, 2, 1}};
225 static constexpr
PointGroup pointGroup = PointGroup::C2v;
226 static constexpr
unsigned size = 3;
227 static constexpr
char stringName[] =
"T-shaped";
228 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
233 if((a + b) % 2 == 1) {
239 static constexpr std::array<Temple::Vector, 3> coordinates {{
244 static constexpr std::array<
245 std::array<unsigned, 3>,
250 static constexpr std::array<
251 std::array<unsigned, 4>,
254 static constexpr std::array<unsigned, 0> mirror {};
274 static constexpr
PointGroup pointGroup = PointGroup::Td;
275 static constexpr
unsigned size = 4;
276 static constexpr
char stringName[] =
"tetrahedron";
277 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
282 return 2 * Temple::Math::atan(M_SQRT2);
284 static constexpr std::array<Temple::Vector, 4> coordinates {{
286 {0, -0.333807, 0.942641},
287 {0.816351, -0.333807, -0.471321},
288 {-0.816351, -0.333807, -0.471321}
290 static constexpr std::array<
291 std::array<unsigned, 4>,
299 static constexpr std::array<
300 std::array<unsigned, 4>,
305 static constexpr std::array<unsigned, 4> mirror {{0, 2, 1, 3}};
325 static constexpr
PointGroup pointGroup = PointGroup::D4h;
326 static constexpr
unsigned size = 4;
327 static constexpr
char stringName[] =
"square";
328 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
333 if((a + b) % 2 == 1) {
341 static constexpr std::array<Temple::Vector, 4> coordinates {{
347 static constexpr std::array<
348 std::array<unsigned, 4>,
355 static constexpr std::array<
356 std::array<unsigned, 4>,
359 static constexpr std::array<unsigned, 0> mirror {};
380 static constexpr
PointGroup pointGroup = PointGroup::C2v;
381 static constexpr
unsigned size = 4;
382 static constexpr
char stringName[] =
"seesaw";
383 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
388 const auto& smaller = std::min(a, b);
389 const auto& larger = std::max(a, b);
390 if(smaller == 0 && larger == 3) {
394 if(smaller == 1 && larger == 2) {
395 return Temple::Math::toRadians<double>(120);
400 static constexpr std::array<Temple::Vector, 4> coordinates {{
403 {-0.5, 0, -0.866025},
406 static constexpr std::array<
407 std::array<unsigned, 4>,
413 #ifdef USE_ALTERNATE_TETRAHEDRA
414 static constexpr std::array<
415 std::array<unsigned, 4>,
421 static constexpr std::array<
422 std::array<unsigned, 4>,
430 static constexpr std::array<unsigned, 4> mirror {{0, 2, 1, 3}};
455 static constexpr
PointGroup pointGroup = PointGroup::C3v;
456 static constexpr
unsigned size = 4;
457 static constexpr
char stringName[] =
"trigonal pyramid";
458 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
463 if(std::max(a, b) != 3) {
465 return Temple::Math::toRadians<double>(120);
471 static constexpr std::array<Temple::Vector, 4> coordinates {{
474 {-0.5, -0.866025, 0},
477 static constexpr std::array<
478 std::array<unsigned, 4>,
483 static constexpr std::array<
484 std::array<unsigned, 4>,
489 static constexpr std::array<unsigned, 4> mirror {{0, 2, 1, 3}};
508 static constexpr
PointGroup pointGroup = PointGroup::C4v;
509 static constexpr
unsigned size = 5;
510 static constexpr
char stringName[] =
"square pyramid";
511 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
516 if(a == 4 || b == 4) {
520 if((a + b) % 2 == 0) {
527 static constexpr std::array<Temple::Vector, 5> coordinates {{
534 static constexpr std::array<
535 std::array<unsigned, 5>,
541 #ifdef USE_ALTERNATE_TETRAHEDRA
542 static constexpr std::array<
543 std::array<unsigned, 4>,
550 static constexpr std::array<
551 std::array<unsigned, 4>,
561 static constexpr std::array<unsigned, 5> mirror {{1, 0, 3, 2, 4}};
584 static constexpr
PointGroup pointGroup = PointGroup::D3h;
585 static constexpr
unsigned size = 5;
586 static constexpr
char stringName[] =
"trigonal bipyramid";
587 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
592 unsigned smaller = std::min(a, b), larger = std::max(a, b);
611 static constexpr std::array<Temple::Vector, 5> coordinates {{
614 {-0.5, -0.866025, 0},
618 static constexpr std::array<
619 std::array<unsigned, 5>,
627 static constexpr std::array<
628 std::array<unsigned, 4>,
634 static constexpr std::array<unsigned, 5> mirror {{0, 2, 1, 3, 4}};
654 static constexpr
PointGroup pointGroup = PointGroup::D5h;
655 static constexpr
unsigned size = 5;
656 static constexpr
char stringName[] =
"pentagon";
657 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
658 unsigned absDiff = std::min(a - b, b - a);
661 std::min(absDiff - 5, 5 - absDiff)
662 ) * Temple::Math::toRadians<double>(72);
664 static constexpr std::array<Temple::Vector, 5> coordinates {{
666 {0.309017, 0.951057, 0},
667 {-0.809017, 0.587785, 0},
668 {-0.809017, -0.587785, 0},
669 {0.309017, -0.951057, 0}
671 static constexpr std::array<
672 std::array<unsigned, 5>,
678 static constexpr std::array<
679 std::array<unsigned, 4>,
682 static constexpr std::array<unsigned, 0> mirror {};
707 static constexpr
PointGroup pointGroup = PointGroup::Oh;
708 static constexpr
unsigned size = 6;
709 static constexpr
char stringName[] =
"octahedron";
710 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
719 ) || std::min(a, b) == 4
726 static constexpr std::array<Temple::Vector, 6> coordinates {{
734 static constexpr std::array<
735 std::array<unsigned, 6>,
738 {{3, 0, 1, 2, 4, 5}},
739 {{0, 5, 2, 4, 1, 3}},
743 #ifdef USE_ALTERNATE_TETRAHEDRA
744 static constexpr std::array<
745 std::array<unsigned, 4>,
754 static constexpr std::array<
755 std::array<unsigned, 4>,
768 static constexpr std::array<unsigned, 6> mirror {{1, 0, 3, 2, 4, 5}};
791 static constexpr
PointGroup pointGroup = PointGroup::D3h;
792 static constexpr
unsigned size = 6;
793 static constexpr
char stringName[] =
"trigonal prism";
794 static constexpr std::array<Temple::Vector, 6> coordinates {{
795 { 0.755929, 0.000000, 0.654654},
796 {-0.377964, 0.654654, 0.654654},
797 {-0.377964, -0.654654, 0.654654},
798 { 0.755929, 0.000000, -0.654654},
799 {-0.377964, 0.654654, -0.654654},
800 {-0.377964, -0.654654, -0.654654}
803 Detail::makeArray<size>(coordinates)
805 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
810 return angleLookupTable.at(
815 static constexpr std::array<
816 std::array<unsigned, 6>,
819 {{2, 0, 1, 5, 3, 4}},
823 static constexpr std::array<
824 std::array<unsigned, 4>,
830 static constexpr std::array<unsigned, 6> mirror {{0, 2, 1, 3, 5, 4}};
852 static constexpr
PointGroup pointGroup = PointGroup::C5v;
853 static constexpr
unsigned size = 6;
854 static constexpr
char stringName[] =
"pentagonal pyramid";
855 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
860 if(a == 5 || b == 5) {
865 unsigned absDiff = std::min(a - b, b - a);
868 std::min(absDiff - 5, 5 - absDiff)
869 ) * Temple::Math::toRadians<double>(72);
871 static constexpr std::array<Temple::Vector, 6> coordinates {{
873 {0.309017, 0.951057, 0},
874 {-0.809017, 0.587785, 0},
875 {-0.809017, -0.587785, 0},
876 {0.309017, -0.951057, 0},
879 static constexpr std::array<
880 std::array<unsigned, 6>,
886 #ifdef USE_ALTERNATE_TETRAHEDRA
887 static constexpr std::array<
888 std::array<unsigned, 4>,
896 static constexpr std::array<
897 std::array<unsigned, 4>,
907 static constexpr std::array<unsigned, 6> mirror {{0, 4, 3, 2, 1, 5}};
915 static constexpr
PointGroup pointGroup = PointGroup::D6h;
916 static constexpr
unsigned size = 6;
917 static constexpr
char stringName[] =
"hexagon";
918 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
919 unsigned absDiff = std::min(a - b, b - a);
922 std::min(absDiff - 6, 6 - absDiff)
923 ) * Temple::Math::toRadians<double>(60);
925 static constexpr std::array<Temple::Vector, 6> coordinates {{
926 { 1.000000, 0.000000, 0.000000},
927 { 0.500000, 0.866025, 0.000000},
928 {-0.500000, 0.866025, 0.000000},
929 {-1.000000, 0.000000, 0.000000},
930 {-0.500000, -0.866025, 0.000000},
931 { 0.500000, -0.866025, 0.000000}
933 static constexpr std::array<
934 std::array<unsigned, 6>,
937 {{5, 0, 1, 2, 3, 4}},
941 static constexpr std::array<
942 std::array<unsigned, 4>,
945 static constexpr std::array<unsigned, 0> mirror {};
968 static constexpr
PointGroup pointGroup = PointGroup::D5h;
969 static constexpr
unsigned size = 7;
970 static constexpr
char stringName[] =
"pentagonal bipyramid";
971 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
980 if(Temple::Math::XOR(a > 4, b > 4)) {
985 unsigned absDiff = std::min(a - b, b - a);
988 std::min(absDiff - 5, 5 - absDiff)
989 ) * Temple::Math::toRadians<double>(72);
991 static constexpr std::array<Temple::Vector, 7> coordinates {{
993 {0.309017, 0.951057, 0},
994 {-0.809017, 0.587785, 0},
995 {-0.809017, -0.587785, 0},
996 {0.309017, -0.951057, 0},
1000 static constexpr std::array<
1001 std::array<unsigned, 7>,
1004 {{4, 0, 1, 2, 3, 5, 6}},
1005 {{1, 0, 4, 3, 2, 6, 5}}
1008 #ifdef USE_ALTERNATE_TETRAHEDRA
1009 static constexpr std::array<
1010 std::array<unsigned, 4>,
1020 static constexpr std::array<
1021 std::array<unsigned, 4>,
1036 static constexpr std::array<unsigned, 7> mirror {{0, 4, 3, 2, 1, 5, 6}};
1047 static constexpr
PointGroup pointGroup = PointGroup::C3v;
1048 static constexpr
unsigned size = 7;
1049 static constexpr
char stringName[] =
"capped octahedron";
1057 { 0.000000, 0.000000, 1.000000},
1058 { 0.957729, 0.000000, 0.287673},
1059 {-0.478864, 0.829418, 0.287673},
1060 {-0.478864, -0.829418, 0.287673},
1061 { 0.389831, 0.675207, -0.626200},
1062 {-0.779662, 0.000000, -0.626200},
1063 { 0.389831, -0.675207, -0.626200}
1068 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1073 return angleLookupTable.at(
1078 static constexpr std::array<
1079 std::array<unsigned, 7>,
1082 {{0, 3, 1, 2, 6, 4, 5}}
1085 static constexpr std::array<
1086 std::array<unsigned, 4>,
1092 static constexpr std::array<unsigned, 7> mirror {{0, 3, 2, 1, 6, 5, 4}};
1102 static constexpr
PointGroup pointGroup = PointGroup::C2v;
1103 static constexpr
unsigned size = 7;
1104 static constexpr
char stringName[] =
"capped trigonal prism";
1110 { -0.000000, -0.000000, 1.000000},
1111 { 0.984798, -0.069552, 0.159173},
1112 { -0.069552, 0.984798, 0.159173},
1113 { -0.984798, 0.069552, 0.159173},
1114 { 0.069552, -0.984798, 0.159173},
1115 { 0.413726, 0.413726, -0.810964},
1116 { -0.413726, -0.413726, -0.810964}
1121 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1126 return angleLookupTable.at(
1131 static constexpr std::array<
1132 std::array<unsigned, 7>,
1135 {{0, 3, 4, 1, 2, 6, 5}}
1138 static constexpr std::array<
1139 std::array<unsigned, 4>,
1145 static constexpr std::array<unsigned, 7> mirror {{0, 2, 1, 4, 3, 5, 6}};
1177 static constexpr
PointGroup pointGroup = PointGroup::D4d;
1178 static constexpr
unsigned size = 8;
1179 static constexpr
char stringName[] =
"square antiprism";
1180 static constexpr std::array<Temple::Vector, 8> coordinates {{
1181 { 0.607781, 0.607781, 0.511081},
1182 {-0.607781, 0.607781, 0.511081},
1183 {-0.607781, -0.607781, 0.511081},
1184 { 0.607781, -0.607781, 0.511081},
1185 { 0.859533, 0.000000, -0.511081},
1186 { 0.000000, 0.859533, -0.511081},
1187 {-0.859533, 0.000000, -0.511081},
1188 {-0.000000, -0.859533, -0.511081}
1196 Detail::makeArray<size>(coordinates)
1199 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1209 static constexpr std::array<
1210 std::array<unsigned, 8>,
1213 {{3, 0, 1, 2, 7, 4, 5, 6}},
1231 {{5, 4, 7, 6, 1, 0, 3, 2}},
1234 static constexpr std::array<
1235 std::array<unsigned, 4>,
1243 static constexpr std::array<unsigned, 8> mirror {{2, 1, 0, 3, 5, 4, 7, 6}};
1251 static constexpr
PointGroup pointGroup = PointGroup::Oh;
1252 static constexpr
unsigned size = 8;
1253 static constexpr
char stringName[] =
"cube";
1256 { 0.577350, 0.577350, 0.577350},
1257 { 0.577350, -0.577350, 0.577350},
1258 { 0.577350, -0.577350, -0.577350},
1259 { 0.577350, 0.577350, -0.577350},
1260 { -0.577350, 0.577350, 0.577350},
1261 { -0.577350, -0.577350, 0.577350},
1262 { -0.577350, -0.577350, -0.577350},
1263 { -0.577350, 0.577350, -0.577350}
1268 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1273 return angleLookupTable.at(
1278 static constexpr std::array<
1279 std::array<unsigned, 8>,
1282 {{3, 0, 1, 2, 7, 4, 5, 6}},
1283 {{4, 5, 1, 0, 7, 6, 2, 3}}
1286 static constexpr std::array<
1287 std::array<unsigned, 4>,
1293 static constexpr std::array<unsigned, 8> mirror {{1, 0, 3, 2, 5, 4, 7, 6}};
1301 static constexpr
PointGroup pointGroup = PointGroup::D2d;
1302 static constexpr
unsigned size = 8;
1303 static constexpr
char stringName[] =
"trigonal dodecahedron";
1304 static constexpr std::array<Temple::Vector, 8> coordinates {{
1305 { 0.620913, 0.000000, -0.783880},
1306 { -0.620913, 0.000000, -0.783880},
1307 { 0.000000, 0.620913, 0.783880},
1308 { -0.000000, -0.620913, 0.783880},
1309 { 0.950273, 0.000000, 0.311417},
1310 { -0.950273, 0.000000, 0.311417},
1311 { 0.000000, 0.950273, -0.311417},
1312 { 0.000000, -0.950273, -0.311417}
1315 Detail::makeArray<size>(coordinates)
1317 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1322 return angleLookupTable.at(
1327 static constexpr std::array<
1328 std::array<unsigned, 8>,
1331 {1, 0, 3, 2, 5, 4, 7, 6},
1332 {2, 3, 0, 1, 6, 7, 4, 5}
1335 static constexpr std::array<
1336 std::array<unsigned, 4>,
1342 static constexpr std::array<unsigned, 8> mirror {{0, 1, 3, 2, 4, 5, 7, 6}};
1352 static constexpr
PointGroup pointGroup = PointGroup::D6h;
1353 static constexpr
unsigned size = 8;
1354 static constexpr
char stringName[] =
"hexagonal bipyramid";
1355 static constexpr std::array<Temple::Vector, 8> coordinates {{
1356 { 1.000000, 0.000000, 0.000000},
1357 { 0.500000, 0.866025, 0.000000},
1358 {-0.500000, 0.866025, 0.000000},
1359 {-1.000000, 0.000000, 0.000000},
1360 {-0.500000, -0.866025, 0.000000},
1361 { 0.500000, -0.866025, 0.000000},
1362 { 0.000000, 0.000000, 1.000000},
1363 { 0.000000, 0.000000, -1.000000}
1366 Detail::makeArray<size>(coordinates)
1368 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1373 return angleLookupTable.at(
1378 static constexpr std::array<
1379 std::array<unsigned, 8>,
1382 {5, 0, 1, 2, 3, 4, 6, 7},
1383 {0, 5, 4, 3, 2, 1, 7, 6}
1386 static constexpr std::array<
1387 std::array<unsigned, 4>,
1394 static constexpr std::array<unsigned, 8> mirror {{0, 5, 4, 3, 2, 1, 6, 7}};
1405 static constexpr
PointGroup pointGroup = PointGroup::D3h;
1406 static constexpr
unsigned size = 9;
1407 static constexpr
char stringName[] =
"tricapped trigonal prism";
1408 static constexpr std::array<Temple::Vector, 9> coordinates {{
1409 { 0.914109572223, -0.182781178690, -0.361931942064},
1410 { 0.293329304506, 0.734642489361, -0.611766566546},
1411 {-0.480176899428, -0.046026929940, 0.875963279468},
1412 {-0.705684904851, 0.704780196051, -0.072757750931},
1413 { 0.370605109670, 0.769162968265, 0.520615194684},
1414 {-0.904030464226, -0.412626217894, -0.111662545460},
1415 {-0.162180419233, -0.247163999394, -0.955304908927},
1416 { 0.063327560246, -0.997971078243, -0.006583851785},
1417 { 0.610701141906, -0.322016246902, 0.723429092590}
1420 Detail::makeArray<size>(coordinates)
1422 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1427 return angleLookupTable.at(
1432 static constexpr std::array<
1433 std::array<unsigned, 9>,
1436 {7, 8, 3, 4, 2, 1, 0, 6, 5},
1437 {2, 5, 0, 6, 7, 1, 3, 4, 8}
1440 static constexpr std::array<
1441 std::array<unsigned, 4>,
1447 static constexpr std::array<unsigned, 9> mirror {{7, 5, 4, 3, 2, 1, 6, 0, 8}};
1457 static constexpr
PointGroup pointGroup = PointGroup::C4v;
1458 static constexpr
unsigned size = 9;
1459 static constexpr
char stringName[] =
"capped square antiprism";
1460 static constexpr std::array<Temple::Vector, 9> coordinates {{
1461 { -0.000000, 0.932111, 0.362172},
1462 { -0.000000, -0.932111, 0.362172},
1463 { 0.932111, -0.000000, 0.362172},
1464 { -0.932111, 0.000000, 0.362172},
1465 { 0.559626, 0.559626, -0.611258},
1466 { 0.559626, -0.559626, -0.611258},
1467 { -0.559626, 0.559626, -0.611258},
1468 { -0.559626, -0.559626, -0.611258},
1469 { 0.000000, 0.000000, 1.000000}
1472 Detail::makeArray<size>(coordinates)
1474 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1479 return angleLookupTable.at(
1484 static constexpr std::array<
1485 std::array<unsigned, 9>,
1488 {2, 3, 1, 0, 5, 7, 4, 6, 8}
1491 static constexpr std::array<
1492 std::array<unsigned, 4>,
1498 static constexpr std::array<unsigned, 9> mirror {{0, 1, 3, 2, 6, 7, 4, 5, 8}};
1506 static constexpr
PointGroup pointGroup = PointGroup::D7h;
1507 static constexpr
unsigned size = 9;
1508 static constexpr
char stringName[] =
"heptagonal bipyramid";
1509 static constexpr std::array<Temple::Vector, 9> coordinates {{
1510 { 1.000000, 0.000000, 0.000000},
1511 { 0.623490, 0.781831, 0.000000},
1512 {-0.222521, 0.974928, 0.000000},
1513 {-0.900969, 0.433884, 0.000000},
1514 {-0.900969, -0.433884, 0.000000},
1515 {-0.222521, -0.974928, 0.000000},
1516 { 0.623490, -0.781831, 0.000000},
1517 { 0.000000, 0.000000, 1.000000},
1518 { 0.000000, 0.000000, -1.000000}
1521 Detail::makeArray<size>(coordinates)
1523 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1528 return angleLookupTable.at(
1533 static constexpr std::array<
1534 std::array<unsigned, 9>,
1537 {6, 0, 1, 2, 3, 4, 5, 7, 8},
1538 {0, 6, 5, 4, 3, 2, 1, 8, 7}
1541 static constexpr std::array<
1542 std::array<unsigned, 4>,
1549 static constexpr std::array<unsigned, 9> mirror {{0, 6, 5, 4, 3, 2, 1, 7, 8}};
1559 static constexpr
PointGroup pointGroup = PointGroup::D4h;
1560 static constexpr
unsigned size = 10;
1561 static constexpr
char stringName[] =
"bicapped square antiprism";
1562 static constexpr std::array<Temple::Vector, 10> coordinates {{
1563 { 0.978696890330, 0.074682616274, 0.191245663177},
1564 { 0.537258145625, 0.448413180814, -0.714338368164},
1565 {-0.227939324473, -0.303819959434, -0.925060590777},
1566 { 0.274577116268, 0.833436432027, 0.479573895237},
1567 {-0.599426405232, 0.240685139624, 0.763386303437},
1568 {-0.424664555168, 0.830194107787, -0.361161679833},
1569 {-0.402701180119, -0.893328907767, 0.199487398294},
1570 { 0.552788606831, -0.770301636525, -0.317899583084},
1571 { 0.290107593166, -0.385278374104, 0.876012647646},
1572 {-0.978696887344, -0.074682599351, -0.191245685067}
1575 Detail::makeArray<size>(coordinates)
1577 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1582 return angleLookupTable.at(
1587 static constexpr std::array<
1588 std::array<unsigned, 10>,
1591 {0, 7, 6, 1, 5, 2, 4, 8, 3, 9},
1592 {9, 5, 3, 2, 7, 1, 8, 4, 6, 0}
1595 static constexpr std::array<
1596 std::array<unsigned, 4>,
1603 static constexpr std::array<unsigned, 10> mirror {{0, 1, 5, 7, 6, 2, 4, 3, 8, 9}};
1614 static constexpr
PointGroup pointGroup = PointGroup::C2v;
1615 static constexpr
unsigned size = 11;
1616 static constexpr
char stringName[] =
"edge-contracted icosahedron";
1617 static constexpr std::array<Temple::Vector, 11> coordinates {{
1618 { 0.153486836562, -0.831354332797, 0.534127105044},
1619 { 0.092812115769, 0.691598091278, -0.716294626049},
1620 { 0.686120068086, 0.724987503180, 0.060269166267},
1621 { 0.101393837471, 0.257848797505, 0.960850293931},
1622 {-0.143059218646, -0.243142754178, -0.959382958495},
1623 {-0.909929380017, 0.200934944687, -0.362841110384},
1624 {-0.405338453688, 0.872713317547, 0.272162090194},
1625 { 0.896918545883, -0.184616420020, 0.401813264476},
1626 { 0.731466092268, -0.415052523977, -0.541007170195},
1627 {-0.439821168531, -0.864743799130, -0.242436592901},
1628 {-0.773718984882, -0.203685975092, 0.599892453681}
1631 Detail::makeArray<size>(coordinates)
1633 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1638 return angleLookupTable.at(
1643 static constexpr std::array<
1644 std::array<unsigned, 11>,
1647 {1, 0, 9, 5, 7, 3, 10, 4, 8, 2, 6}
1650 static constexpr std::array<
1651 std::array<unsigned, 4>,
1658 static constexpr std::array<unsigned, 11> mirror {{2, 9, 0, 3, 4, 5, 10, 7, 8, 1, 6}};
1666 static constexpr
PointGroup pointGroup = PointGroup::Ih;
1667 static constexpr
unsigned size = 12;
1668 static constexpr
char stringName[] =
"icosahedron";
1669 static constexpr std::array<Temple::Vector, 12> coordinates {{
1670 { 0.525731, 0.000000, 0.850651},
1671 { 0.525731, 0.000000, -0.850651},
1672 {-0.525731, 0.000000, 0.850651},
1673 {-0.525731, 0.000000, -0.850651},
1674 { 0.850651, 0.525731, 0.000000},
1675 { 0.850651, -0.525731, 0.000000},
1676 {-0.850651, 0.525731, 0.000000},
1677 {-0.850651, -0.525731, 0.000000},
1678 { 0.000000, 0.850651, 0.525731},
1679 { 0.000000, 0.850651, -0.525731},
1680 { 0.000000, -0.850651, 0.525731},
1681 { 0.000000, -0.850651, -0.525731}
1684 Detail::makeArray<size>(coordinates)
1686 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1691 return angleLookupTable.at(
1696 static constexpr std::array<
1697 std::array<unsigned, 12>,
1700 {0, 11, 8, 3, 5, 10, 9, 6, 4, 1, 2, 7},
1701 {8, 5, 6, 11, 4, 0, 3, 7, 9, 1, 2, 10},
1702 {2, 3, 0, 1, 7, 6, 5, 4, 10, 11, 8, 9}
1705 static constexpr std::array<
1706 std::array<unsigned, 4>,
1714 static constexpr std::array<unsigned, 12> mirror {{0, 1, 2, 3, 5, 4, 7, 6, 10, 11, 8, 9}};
1722 static constexpr
PointGroup pointGroup = PointGroup::Oh;
1723 static constexpr
unsigned size = 12;
1724 static constexpr
char stringName[] =
"cuboctahedron";
1725 static constexpr std::array<Temple::Vector, 12> coordinates {{
1726 { 0.707107, 0.000000, 0.707107},
1727 { 0.707107, 0.000000, -0.707107},
1728 {-0.707107, 0.000000, 0.707107},
1729 {-0.707107, 0.000000, -0.707107},
1730 { 0.707107, 0.707107, 0.000000},
1731 { 0.707107, -0.707107, 0.000000},
1732 {-0.707107, 0.707107, 0.000000},
1733 {-0.707107, -0.707107, 0.000000},
1734 { 0.000000, 0.707107, 0.707107},
1735 { 0.000000, 0.707107, -0.707107},
1736 { 0.000000, -0.707107, 0.707107},
1737 { 0.000000, -0.707107, -0.707107}
1740 Detail::makeArray<size>(coordinates)
1742 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1747 return angleLookupTable.at(
1752 static constexpr std::array<
1753 std::array<unsigned, 12>,
1756 {10, 11, 8, 9, 5, 7, 4, 6, 0, 1, 2, 3},
1757 {2, 0, 3, 1, 8, 10, 9, 11, 6, 4, 7, 5},
1758 {7, 6, 5, 4, 3, 2, 1, 0, 11, 9, 10, 8},
1761 static constexpr std::array<
1762 std::array<unsigned, 4>,
1770 static constexpr std::array<unsigned, 12> mirror {{8, 9, 10, 11, 4, 6, 5, 7, 0, 1, 2, 3}};
A square planar symmetry.
Definition: Data.h:323
See Data::TricappedTrigonalPrism.
Equilateral triangle shape (planar)
Definition: Data.h:132
constexpr UpperTriangularMatrix< ValueType, size > makeUpperTriangularMatrix(const ArrayType< ValueType, size > &data)
Helper constructing function that deduces the required type signature.
Definition: UpperTriangularMatrix.h:176
A regular tetrahedron shape.
Definition: Data.h:272
See Data::EquilateralTriangle.
See Data::BicappedSquareAntiprism.
A pentagon shape (planar)
Definition: Data.h:652
A pentagonal pyramid shape, the J2 solid.
Definition: Data.h:850
Trigonal dodecahedron, snub disphenoid shape, spherized J84 solid in D2d.
Definition: Data.h:1299
See Data::TrigonalPyramid.
See Data::PentagonalBipyramid.
Line shape.
Definition: Data.h:42
A regular cube.
Definition: Data.h:1249
Capped square antiprism shape, spherized J10 solid in C4v.
Definition: Data.h:1455
A trigonal bipyramid shape, the J12 solid.
Definition: Data.h:582
Preprocessor definitions to alter library compilation behavior.
std::tuple< Line, Bent, EquilateralTriangle, VacantTetrahedron, T, Tetrahedron, Square, Seesaw, TrigonalPyramid, SquarePyramid, TrigonalBipyramid, Pentagon, Octahedron, TrigonalPrism, PentagonalPyramid, Hexagon, PentagonalBipyramid, CappedOctahedron, CappedTrigonalPrism, SquareAntiprism, Cube, TrigonalDodecahedron, HexagonalBipyramid, TricappedTrigonalPrism, CappedSquareAntiprism, HeptagonalBipyramid, BicappedSquareAntiprism, EdgeContractedIcosahedron, Icosahedron, Cuboctahedron > allShapeDataTypes
Type collecting all types of the Symmetry classes.
Definition: Data.h:1805
Regular icosahedron shape.
Definition: Data.h:1664
static constexpr std::array< Temple::Vector, 8 > coordinates
[V(CO)7]+ in C2v
Definition: Data.h:1255
See Data::PentagonalPyramid.
PointGroup
Point groups.
Definition: PointGroups.h:20
A regular octahedron.
Definition: Data.h:705
A face-centered trigonal pyramid shape = trig. pl. + an axial ligand.
Definition: Data.h:453
A seesaw shape.
Definition: Data.h:378
A regular trigonal prism shape.
Definition: Data.h:789
Bent symmetry at 107°
Definition: Data.h:82
See Data::HexagonalBipyramid.
Tricapped trigonal prism, spherized J51 solid in D3h.
Definition: Data.h:1403
See Data::CappedTrigonalPrism.
Regular square antiprism shape.
Definition: Data.h:1175
Hexagon shape (planar)
Definition: Data.h:913
Provides type-level computations for types enumerated in a tuple.
Capped square antiprism shape, spherized J10 solid in C4v.
Definition: Data.h:1504
A square pyramid shape, the J1 solid (central position is square-face centered)
Definition: Data.h:506
See Data::HeptagonalBipyramid.
static constexpr std::array< Temple::Vector, 7 > coordinates
Definition: Data.h:1109
Mono-vacant tetrahedron shape.
Definition: Data.h:180
See Data::TrigonalDodecahedron.
See Data::EdgeContractedIcosahedron.
A capped octahedron shape.
Definition: Data.h:1045
static constexpr std::array< Temple::Vector, 7 > coordinates
Definition: Data.h:1056
3D Vector class with some operations defined
See Data::VacantTetrahedron.
Line top: 0 ≅ IA << IB = IC.
Defines symmetry names and total count.
A capped trigonal prism shape, spherized J49 solid in C2v.
Definition: Data.h:1100
Shape
Enumeration of all contained symmetry names.
Definition: Shapes.h:28
constexpr unsigned ORIGIN_PLACEHOLDER
A placeholder value for constexpr tetrahedra specification of origin.
Definition: Data.h:24
See Data::CappedSquareAntiPrism.
Generate lookup table for a symmetry's angles.
A pentagonal bipyramid shape, the J13 solid.
Definition: Data.h:966
See Data::CappedOctahedron.
See Data::TrigonalBipyramid.
Bicapped square antiprism shape, spherized J17 shape in D4h.
Definition: Data.h:1557
Edge contracted icosahedron shape.
Definition: Data.h:1612
See Data::SquareAntiprism.
static constexpr auto angleLookupTable
Definition: Data.h:1195
Regular cuboctahedron shape with Oh symmetry.
Definition: Data.h:1720
Hexagonal bipyramid shape.
Definition: Data.h:1350
A T-shaped symmetry.
Definition: Data.h:223