8 #ifndef INCLUDE_MOLASSEMBLER_SHAPES_CONSTEXPR_DATA_H
9 #define INCLUDE_MOLASSEMBLER_SHAPES_CONSTEXPR_DATA_H
19 namespace Molassembler {
43 static constexpr
PointGroup pointGroup = PointGroup::Cinfv;
44 static constexpr
unsigned size = 2;
45 static constexpr
char stringName[] =
"line";
46 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
53 static constexpr std::array<Temple::Vector, 2> coordinates {{
57 static constexpr std::array<
58 std::array<unsigned, 2>,
63 static constexpr std::array<
64 std::array<unsigned, 4>,
67 static constexpr std::array<unsigned, 0> mirror {};
83 static constexpr
PointGroup pointGroup = PointGroup::C2v;
84 static constexpr
unsigned size = 2;
85 static constexpr
char stringName[] =
"bent";
86 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
95 return Temple::Math::toRadians<double>(107);
97 static constexpr std::array<Temple::Vector, 2> coordinates {{
99 {-0.292372, 0.956305, 0.}
101 static constexpr std::array<
102 std::array<unsigned, 2>,
107 static constexpr std::array<
108 std::array<unsigned, 4>,
111 static constexpr std::array<unsigned, 0> mirror {};
133 static constexpr
PointGroup pointGroup = PointGroup::D3h;
134 static constexpr
unsigned size = 3;
135 static constexpr
char stringName[] =
"triangle";
136 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
141 return Temple::Math::toRadians<double>(120);
143 static constexpr std::array<Temple::Vector, 3> coordinates {{
148 static constexpr std::array<
149 std::array<unsigned, 3>,
155 static constexpr std::array<
156 std::array<unsigned, 4>,
159 static constexpr std::array<unsigned, 0> mirror {};
181 static constexpr
PointGroup pointGroup = PointGroup::C3v;
182 static constexpr
unsigned size = 3;
183 static constexpr
char stringName[] =
"vacant tetrahedron";
184 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
189 return Temple::Math::toRadians<double>(107.5);
191 static constexpr std::array<Temple::Vector, 3> coordinates {{
192 {0, -0.366501, 0.930418},
193 {0.805765, -0.366501, -0.465209},
194 {-0.805765, -0.366501, -0.465209}
196 static constexpr std::array<
197 std::array<unsigned, 3>,
202 static constexpr std::array<
203 std::array<unsigned, 4>,
208 static constexpr std::array<unsigned, 3> mirror {{0, 2, 1}};
224 static constexpr
PointGroup pointGroup = PointGroup::C2v;
225 static constexpr
unsigned size = 3;
226 static constexpr
char stringName[] =
"T-shaped";
227 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
232 if((a + b) % 2 == 1) {
238 static constexpr std::array<Temple::Vector, 3> coordinates {{
243 static constexpr std::array<
244 std::array<unsigned, 3>,
249 static constexpr std::array<
250 std::array<unsigned, 4>,
253 static constexpr std::array<unsigned, 0> mirror {};
273 static constexpr
PointGroup pointGroup = PointGroup::Td;
274 static constexpr
unsigned size = 4;
275 static constexpr
char stringName[] =
"tetrahedron";
276 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
281 return 2 * Temple::Math::atan(M_SQRT2);
283 static constexpr std::array<Temple::Vector, 4> coordinates {{
285 {0, -0.333807, 0.942641},
286 {0.816351, -0.333807, -0.471321},
287 {-0.816351, -0.333807, -0.471321}
289 static constexpr std::array<
290 std::array<unsigned, 4>,
298 static constexpr std::array<
299 std::array<unsigned, 4>,
304 static constexpr std::array<unsigned, 4> mirror {{0, 2, 1, 3}};
324 static constexpr
PointGroup pointGroup = PointGroup::D4h;
325 static constexpr
unsigned size = 4;
326 static constexpr
char stringName[] =
"square";
327 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
332 if((a + b) % 2 == 1) {
340 static constexpr std::array<Temple::Vector, 4> coordinates {{
346 static constexpr std::array<
347 std::array<unsigned, 4>,
354 static constexpr std::array<
355 std::array<unsigned, 4>,
358 static constexpr std::array<unsigned, 0> mirror {};
379 static constexpr
PointGroup pointGroup = PointGroup::C2v;
380 static constexpr
unsigned size = 4;
381 static constexpr
char stringName[] =
"seesaw";
382 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
387 const auto& smaller = std::min(a, b);
388 const auto& larger = std::max(a, b);
389 if(smaller == 0 && larger == 3) {
393 if(smaller == 1 && larger == 2) {
394 return Temple::Math::toRadians<double>(120);
399 static constexpr std::array<Temple::Vector, 4> coordinates {{
402 {-0.5, 0, -0.866025},
405 static constexpr std::array<
406 std::array<unsigned, 4>,
412 static constexpr std::array<
413 std::array<unsigned, 4>,
420 static constexpr std::array<unsigned, 4> mirror {{0, 2, 1, 3}};
446 static constexpr
PointGroup pointGroup = PointGroup::C3v;
447 static constexpr
unsigned size = 4;
448 static constexpr
char stringName[] =
"trigonal pyramid";
449 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
454 if(std::max(a, b) != 3) {
456 return Temple::Math::toRadians<double>(120);
462 static constexpr std::array<Temple::Vector, 4> coordinates {{
465 {-0.5, -0.866025, 0},
468 static constexpr std::array<
469 std::array<unsigned, 4>,
474 static constexpr std::array<
475 std::array<unsigned, 4>,
480 static constexpr std::array<unsigned, 4> mirror {{0, 2, 1, 3}};
499 static constexpr
PointGroup pointGroup = PointGroup::C4v;
500 static constexpr
unsigned size = 5;
501 static constexpr
char stringName[] =
"square pyramid";
502 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
507 if(a == 4 || b == 4) {
511 if((a + b) % 2 == 0) {
518 static constexpr std::array<Temple::Vector, 5> coordinates {{
525 static constexpr std::array<
526 std::array<unsigned, 5>,
532 static constexpr std::array<
533 std::array<unsigned, 4>,
542 static constexpr std::array<unsigned, 5> mirror {{1, 0, 3, 2, 4}};
565 static constexpr
PointGroup pointGroup = PointGroup::D3h;
566 static constexpr
unsigned size = 5;
567 static constexpr
char stringName[] =
"trigonal bipyramid";
568 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
573 const unsigned smaller = std::min(a, b);
574 const unsigned larger = std::max(a, b);
593 static constexpr std::array<Temple::Vector, 5> coordinates {{
596 {-0.5, -0.866025, 0},
600 static constexpr std::array<
601 std::array<unsigned, 5>,
609 static constexpr std::array<
610 std::array<unsigned, 4>,
616 static constexpr std::array<unsigned, 5> mirror {{0, 2, 1, 3, 4}};
636 static constexpr
PointGroup pointGroup = PointGroup::D5h;
637 static constexpr
unsigned size = 5;
638 static constexpr
char stringName[] =
"pentagon";
639 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
640 unsigned absDiff = std::min(a - b, b - a);
643 std::min(absDiff - 5, 5 - absDiff)
644 ) * Temple::Math::toRadians<double>(72);
646 static constexpr std::array<Temple::Vector, 5> coordinates {{
648 {0.309017, 0.951057, 0},
649 {-0.809017, 0.587785, 0},
650 {-0.809017, -0.587785, 0},
651 {0.309017, -0.951057, 0}
653 static constexpr std::array<
654 std::array<unsigned, 5>,
660 static constexpr std::array<
661 std::array<unsigned, 4>,
664 static constexpr std::array<unsigned, 0> mirror {};
689 static constexpr
PointGroup pointGroup = PointGroup::Oh;
690 static constexpr
unsigned size = 6;
691 static constexpr
char stringName[] =
"octahedron";
692 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
701 ) || std::min(a, b) == 4
708 static constexpr std::array<Temple::Vector, 6> coordinates {{
716 static constexpr std::array<
717 std::array<unsigned, 6>,
720 {{3, 0, 1, 2, 4, 5}},
721 {{0, 5, 2, 4, 1, 3}},
725 static constexpr std::array<
726 std::array<unsigned, 4>,
738 static constexpr std::array<unsigned, 6> mirror {{1, 0, 3, 2, 4, 5}};
761 static constexpr
PointGroup pointGroup = PointGroup::D3h;
762 static constexpr
unsigned size = 6;
763 static constexpr
char stringName[] =
"trigonal prism";
764 static constexpr std::array<Temple::Vector, 6> coordinates {{
765 { 0.755929, 0.000000, 0.654654},
766 {-0.377964, 0.654654, 0.654654},
767 {-0.377964, -0.654654, 0.654654},
768 { 0.755929, 0.000000, -0.654654},
769 {-0.377964, 0.654654, -0.654654},
770 {-0.377964, -0.654654, -0.654654}
773 Detail::makeArray<size>(coordinates)
775 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
780 return angleLookupTable.at(
785 static constexpr std::array<
786 std::array<unsigned, 6>,
789 {{2, 0, 1, 5, 3, 4}},
793 static constexpr std::array<
794 std::array<unsigned, 4>,
800 static constexpr std::array<unsigned, 6> mirror {{0, 2, 1, 3, 5, 4}};
822 static constexpr
PointGroup pointGroup = PointGroup::C5v;
823 static constexpr
unsigned size = 6;
824 static constexpr
char stringName[] =
"pentagonal pyramid";
825 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
830 if(a == 5 || b == 5) {
835 unsigned absDiff = std::min(a - b, b - a);
838 std::min(absDiff - 5, 5 - absDiff)
839 ) * Temple::Math::toRadians<double>(72);
841 static constexpr std::array<Temple::Vector, 6> coordinates {{
843 {0.309017, 0.951057, 0},
844 {-0.809017, 0.587785, 0},
845 {-0.809017, -0.587785, 0},
846 {0.309017, -0.951057, 0},
849 static constexpr std::array<
850 std::array<unsigned, 6>,
856 static constexpr std::array<
857 std::array<unsigned, 4>,
866 static constexpr std::array<unsigned, 6> mirror {{0, 4, 3, 2, 1, 5}};
874 static constexpr
PointGroup pointGroup = PointGroup::D6h;
875 static constexpr
unsigned size = 6;
876 static constexpr
char stringName[] =
"hexagon";
877 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
878 unsigned absDiff = std::min(a - b, b - a);
881 std::min(absDiff - 6, 6 - absDiff)
882 ) * Temple::Math::toRadians<double>(60);
884 static constexpr std::array<Temple::Vector, 6> coordinates {{
885 { 1.000000, 0.000000, 0.000000},
886 { 0.500000, 0.866025, 0.000000},
887 {-0.500000, 0.866025, 0.000000},
888 {-1.000000, 0.000000, 0.000000},
889 {-0.500000, -0.866025, 0.000000},
890 { 0.500000, -0.866025, 0.000000}
892 static constexpr std::array<
893 std::array<unsigned, 6>,
896 {{5, 0, 1, 2, 3, 4}},
900 static constexpr std::array<
901 std::array<unsigned, 4>,
904 static constexpr std::array<unsigned, 0> mirror {};
927 static constexpr
PointGroup pointGroup = PointGroup::D5h;
928 static constexpr
unsigned size = 7;
929 static constexpr
char stringName[] =
"pentagonal bipyramid";
930 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
939 if(Temple::Math::XOR(a > 4, b > 4)) {
944 unsigned absDiff = std::min(a - b, b - a);
947 std::min(absDiff - 5, 5 - absDiff)
948 ) * Temple::Math::toRadians<double>(72);
950 static constexpr std::array<Temple::Vector, 7> coordinates {{
952 {0.309017, 0.951057, 0},
953 {-0.809017, 0.587785, 0},
954 {-0.809017, -0.587785, 0},
955 {0.309017, -0.951057, 0},
959 static constexpr std::array<
960 std::array<unsigned, 7>,
963 {{4, 0, 1, 2, 3, 5, 6}},
964 {{1, 0, 4, 3, 2, 6, 5}}
967 static constexpr std::array<
968 std::array<unsigned, 4>,
982 static constexpr std::array<unsigned, 7> mirror {{0, 4, 3, 2, 1, 5, 6}};
993 static constexpr
PointGroup pointGroup = PointGroup::C3v;
994 static constexpr
unsigned size = 7;
995 static constexpr
char stringName[] =
"capped octahedron";
1003 { 0.000000, 0.000000, 1.000000},
1004 { 0.957729, 0.000000, 0.287673},
1005 {-0.478864, 0.829418, 0.287673},
1006 {-0.478864, -0.829418, 0.287673},
1007 { 0.389831, 0.675207, -0.626200},
1008 {-0.779662, 0.000000, -0.626200},
1009 { 0.389831, -0.675207, -0.626200}
1014 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1019 return angleLookupTable.at(
1024 static constexpr std::array<
1025 std::array<unsigned, 7>,
1028 {{0, 3, 1, 2, 6, 4, 5}}
1031 static constexpr std::array<
1032 std::array<unsigned, 4>,
1038 static constexpr std::array<unsigned, 7> mirror {{0, 3, 2, 1, 6, 5, 4}};
1048 static constexpr
PointGroup pointGroup = PointGroup::C2v;
1049 static constexpr
unsigned size = 7;
1050 static constexpr
char stringName[] =
"capped trigonal prism";
1056 { -0.000000, -0.000000, 1.000000},
1057 { 0.984798, -0.069552, 0.159173},
1058 { -0.069552, 0.984798, 0.159173},
1059 { -0.984798, 0.069552, 0.159173},
1060 { 0.069552, -0.984798, 0.159173},
1061 { 0.413726, 0.413726, -0.810964},
1062 { -0.413726, -0.413726, -0.810964}
1067 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1072 return angleLookupTable.at(
1077 static constexpr std::array<
1078 std::array<unsigned, 7>,
1081 {{0, 3, 4, 1, 2, 6, 5}}
1084 static constexpr std::array<
1085 std::array<unsigned, 4>,
1091 static constexpr std::array<unsigned, 7> mirror {{0, 2, 1, 4, 3, 5, 6}};
1123 static constexpr
PointGroup pointGroup = PointGroup::D4d;
1124 static constexpr
unsigned size = 8;
1125 static constexpr
char stringName[] =
"square antiprism";
1126 static constexpr std::array<Temple::Vector, 8> coordinates {{
1127 { 0.607781, 0.607781, 0.511081},
1128 {-0.607781, 0.607781, 0.511081},
1129 {-0.607781, -0.607781, 0.511081},
1130 { 0.607781, -0.607781, 0.511081},
1131 { 0.859533, 0.000000, -0.511081},
1132 { 0.000000, 0.859533, -0.511081},
1133 {-0.859533, 0.000000, -0.511081},
1134 {-0.000000, -0.859533, -0.511081}
1142 Detail::makeArray<size>(coordinates)
1145 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1155 static constexpr std::array<
1156 std::array<unsigned, 8>,
1159 {{3, 0, 1, 2, 7, 4, 5, 6}},
1177 {{5, 4, 7, 6, 1, 0, 3, 2}},
1180 static constexpr std::array<
1181 std::array<unsigned, 4>,
1189 static constexpr std::array<unsigned, 8> mirror {{2, 1, 0, 3, 5, 4, 7, 6}};
1197 static constexpr
PointGroup pointGroup = PointGroup::Oh;
1198 static constexpr
unsigned size = 8;
1199 static constexpr
char stringName[] =
"cube";
1202 { 0.577350, 0.577350, 0.577350},
1203 { 0.577350, -0.577350, 0.577350},
1204 { 0.577350, -0.577350, -0.577350},
1205 { 0.577350, 0.577350, -0.577350},
1206 { -0.577350, 0.577350, 0.577350},
1207 { -0.577350, -0.577350, 0.577350},
1208 { -0.577350, -0.577350, -0.577350},
1209 { -0.577350, 0.577350, -0.577350}
1214 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1219 return angleLookupTable.at(
1224 static constexpr std::array<
1225 std::array<unsigned, 8>,
1228 {{3, 0, 1, 2, 7, 4, 5, 6}},
1229 {{4, 5, 1, 0, 7, 6, 2, 3}}
1232 static constexpr std::array<
1233 std::array<unsigned, 4>,
1239 static constexpr std::array<unsigned, 8> mirror {{1, 0, 3, 2, 5, 4, 7, 6}};
1247 static constexpr
PointGroup pointGroup = PointGroup::D2d;
1248 static constexpr
unsigned size = 8;
1249 static constexpr
char stringName[] =
"trigonal dodecahedron";
1250 static constexpr std::array<Temple::Vector, 8> coordinates {{
1251 { 0.620913, 0.000000, -0.783880},
1252 { -0.620913, 0.000000, -0.783880},
1253 { 0.000000, 0.620913, 0.783880},
1254 { -0.000000, -0.620913, 0.783880},
1255 { 0.950273, 0.000000, 0.311417},
1256 { -0.950273, 0.000000, 0.311417},
1257 { 0.000000, 0.950273, -0.311417},
1258 { 0.000000, -0.950273, -0.311417}
1261 Detail::makeArray<size>(coordinates)
1263 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1268 return angleLookupTable.at(
1273 static constexpr std::array<
1274 std::array<unsigned, 8>,
1277 {1, 0, 3, 2, 5, 4, 7, 6},
1278 {2, 3, 0, 1, 6, 7, 4, 5}
1281 static constexpr std::array<
1282 std::array<unsigned, 4>,
1288 static constexpr std::array<unsigned, 8> mirror {{0, 1, 3, 2, 4, 5, 7, 6}};
1298 static constexpr
PointGroup pointGroup = PointGroup::D6h;
1299 static constexpr
unsigned size = 8;
1300 static constexpr
char stringName[] =
"hexagonal bipyramid";
1301 static constexpr std::array<Temple::Vector, 8> coordinates {{
1302 { 1.000000, 0.000000, 0.000000},
1303 { 0.500000, 0.866025, 0.000000},
1304 {-0.500000, 0.866025, 0.000000},
1305 {-1.000000, 0.000000, 0.000000},
1306 {-0.500000, -0.866025, 0.000000},
1307 { 0.500000, -0.866025, 0.000000},
1308 { 0.000000, 0.000000, 1.000000},
1309 { 0.000000, 0.000000, -1.000000}
1312 Detail::makeArray<size>(coordinates)
1314 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1319 return angleLookupTable.at(
1324 static constexpr std::array<
1325 std::array<unsigned, 8>,
1328 {5, 0, 1, 2, 3, 4, 6, 7},
1329 {0, 5, 4, 3, 2, 1, 7, 6}
1332 static constexpr std::array<
1333 std::array<unsigned, 4>,
1340 static constexpr std::array<unsigned, 8> mirror {{0, 5, 4, 3, 2, 1, 6, 7}};
1351 static constexpr
PointGroup pointGroup = PointGroup::D3h;
1352 static constexpr
unsigned size = 9;
1353 static constexpr
char stringName[] =
"tricapped trigonal prism";
1354 static constexpr std::array<Temple::Vector, 9> coordinates {{
1355 { 0.914109572223, -0.182781178690, -0.361931942064},
1356 { 0.293329304506, 0.734642489361, -0.611766566546},
1357 {-0.480176899428, -0.046026929940, 0.875963279468},
1358 {-0.705684904851, 0.704780196051, -0.072757750931},
1359 { 0.370605109670, 0.769162968265, 0.520615194684},
1360 {-0.904030464226, -0.412626217894, -0.111662545460},
1361 {-0.162180419233, -0.247163999394, -0.955304908927},
1362 { 0.063327560246, -0.997971078243, -0.006583851785},
1363 { 0.610701141906, -0.322016246902, 0.723429092590}
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, 9>,
1382 {7, 8, 3, 4, 2, 1, 0, 6, 5},
1383 {2, 5, 0, 6, 7, 1, 3, 4, 8}
1386 static constexpr std::array<
1387 std::array<unsigned, 4>,
1393 static constexpr std::array<unsigned, 9> mirror {{7, 5, 4, 3, 2, 1, 6, 0, 8}};
1403 static constexpr
PointGroup pointGroup = PointGroup::C4v;
1404 static constexpr
unsigned size = 9;
1405 static constexpr
char stringName[] =
"capped square antiprism";
1406 static constexpr std::array<Temple::Vector, 9> coordinates {{
1407 { -0.000000, 0.932111, 0.362172},
1408 { -0.000000, -0.932111, 0.362172},
1409 { 0.932111, -0.000000, 0.362172},
1410 { -0.932111, 0.000000, 0.362172},
1411 { 0.559626, 0.559626, -0.611258},
1412 { 0.559626, -0.559626, -0.611258},
1413 { -0.559626, 0.559626, -0.611258},
1414 { -0.559626, -0.559626, -0.611258},
1415 { 0.000000, 0.000000, 1.000000}
1418 Detail::makeArray<size>(coordinates)
1420 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1425 return angleLookupTable.at(
1430 static constexpr std::array<
1431 std::array<unsigned, 9>,
1434 {2, 3, 1, 0, 5, 7, 4, 6, 8}
1437 static constexpr std::array<
1438 std::array<unsigned, 4>,
1444 static constexpr std::array<unsigned, 9> mirror {{0, 1, 3, 2, 6, 7, 4, 5, 8}};
1452 static constexpr
PointGroup pointGroup = PointGroup::D7h;
1453 static constexpr
unsigned size = 9;
1454 static constexpr
char stringName[] =
"heptagonal bipyramid";
1455 static constexpr std::array<Temple::Vector, 9> coordinates {{
1456 { 1.000000, 0.000000, 0.000000},
1457 { 0.623490, 0.781831, 0.000000},
1458 {-0.222521, 0.974928, 0.000000},
1459 {-0.900969, 0.433884, 0.000000},
1460 {-0.900969, -0.433884, 0.000000},
1461 {-0.222521, -0.974928, 0.000000},
1462 { 0.623490, -0.781831, 0.000000},
1463 { 0.000000, 0.000000, 1.000000},
1464 { 0.000000, 0.000000, -1.000000}
1467 Detail::makeArray<size>(coordinates)
1469 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1474 return angleLookupTable.at(
1479 static constexpr std::array<
1480 std::array<unsigned, 9>,
1483 {6, 0, 1, 2, 3, 4, 5, 7, 8},
1484 {0, 6, 5, 4, 3, 2, 1, 8, 7}
1487 static constexpr std::array<
1488 std::array<unsigned, 4>,
1495 static constexpr std::array<unsigned, 9> mirror {{0, 6, 5, 4, 3, 2, 1, 7, 8}};
1505 static constexpr
PointGroup pointGroup = PointGroup::D4h;
1506 static constexpr
unsigned size = 10;
1507 static constexpr
char stringName[] =
"bicapped square antiprism";
1508 static constexpr std::array<Temple::Vector, 10> coordinates {{
1509 { 0.978696890330, 0.074682616274, 0.191245663177},
1510 { 0.537258145625, 0.448413180814, -0.714338368164},
1511 {-0.227939324473, -0.303819959434, -0.925060590777},
1512 { 0.274577116268, 0.833436432027, 0.479573895237},
1513 {-0.599426405232, 0.240685139624, 0.763386303437},
1514 {-0.424664555168, 0.830194107787, -0.361161679833},
1515 {-0.402701180119, -0.893328907767, 0.199487398294},
1516 { 0.552788606831, -0.770301636525, -0.317899583084},
1517 { 0.290107593166, -0.385278374104, 0.876012647646},
1518 {-0.978696887344, -0.074682599351, -0.191245685067}
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, 10>,
1537 {0, 7, 6, 1, 5, 2, 4, 8, 3, 9},
1538 {9, 5, 3, 2, 7, 1, 8, 4, 6, 0}
1541 static constexpr std::array<
1542 std::array<unsigned, 4>,
1549 static constexpr std::array<unsigned, 10> mirror {{0, 1, 5, 7, 6, 2, 4, 3, 8, 9}};
1560 static constexpr
PointGroup pointGroup = PointGroup::C2v;
1561 static constexpr
unsigned size = 11;
1562 static constexpr
char stringName[] =
"edge-contracted icosahedron";
1563 static constexpr std::array<Temple::Vector, 11> coordinates {{
1564 { 0.153486836562, -0.831354332797, 0.534127105044},
1565 { 0.092812115769, 0.691598091278, -0.716294626049},
1566 { 0.686120068086, 0.724987503180, 0.060269166267},
1567 { 0.101393837471, 0.257848797505, 0.960850293931},
1568 {-0.143059218646, -0.243142754178, -0.959382958495},
1569 {-0.909929380017, 0.200934944687, -0.362841110384},
1570 {-0.405338453688, 0.872713317547, 0.272162090194},
1571 { 0.896918545883, -0.184616420020, 0.401813264476},
1572 { 0.731466092268, -0.415052523977, -0.541007170195},
1573 {-0.439821168531, -0.864743799130, -0.242436592901},
1574 {-0.773718984882, -0.203685975092, 0.599892453681}
1577 Detail::makeArray<size>(coordinates)
1579 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1584 return angleLookupTable.at(
1589 static constexpr std::array<
1590 std::array<unsigned, 11>,
1593 {1, 0, 9, 5, 7, 3, 10, 4, 8, 2, 6}
1596 static constexpr std::array<
1597 std::array<unsigned, 4>,
1604 static constexpr std::array<unsigned, 11> mirror {{2, 9, 0, 3, 4, 5, 10, 7, 8, 1, 6}};
1612 static constexpr
PointGroup pointGroup = PointGroup::Ih;
1613 static constexpr
unsigned size = 12;
1614 static constexpr
char stringName[] =
"icosahedron";
1615 static constexpr std::array<Temple::Vector, 12> coordinates {{
1616 { 0.525731, 0.000000, 0.850651},
1617 { 0.525731, 0.000000, -0.850651},
1618 {-0.525731, 0.000000, 0.850651},
1619 {-0.525731, 0.000000, -0.850651},
1620 { 0.850651, 0.525731, 0.000000},
1621 { 0.850651, -0.525731, 0.000000},
1622 {-0.850651, 0.525731, 0.000000},
1623 {-0.850651, -0.525731, 0.000000},
1624 { 0.000000, 0.850651, 0.525731},
1625 { 0.000000, 0.850651, -0.525731},
1626 { 0.000000, -0.850651, 0.525731},
1627 { 0.000000, -0.850651, -0.525731}
1630 Detail::makeArray<size>(coordinates)
1632 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1637 return angleLookupTable.at(
1642 static constexpr std::array<
1643 std::array<unsigned, 12>,
1646 {0, 11, 8, 3, 5, 10, 9, 6, 4, 1, 2, 7},
1647 {8, 5, 6, 11, 4, 0, 3, 7, 9, 1, 2, 10},
1648 {2, 3, 0, 1, 7, 6, 5, 4, 10, 11, 8, 9}
1651 static constexpr std::array<
1652 std::array<unsigned, 4>,
1660 static constexpr std::array<unsigned, 12> mirror {{0, 1, 2, 3, 5, 4, 7, 6, 10, 11, 8, 9}};
1668 static constexpr
PointGroup pointGroup = PointGroup::Oh;
1669 static constexpr
unsigned size = 12;
1670 static constexpr
char stringName[] =
"cuboctahedron";
1671 static constexpr std::array<Temple::Vector, 12> coordinates {{
1672 { 0.707107, 0.000000, 0.707107},
1673 { 0.707107, 0.000000, -0.707107},
1674 {-0.707107, 0.000000, 0.707107},
1675 {-0.707107, 0.000000, -0.707107},
1676 { 0.707107, 0.707107, 0.000000},
1677 { 0.707107, -0.707107, 0.000000},
1678 {-0.707107, 0.707107, 0.000000},
1679 {-0.707107, -0.707107, 0.000000},
1680 { 0.000000, 0.707107, 0.707107},
1681 { 0.000000, 0.707107, -0.707107},
1682 { 0.000000, -0.707107, 0.707107},
1683 { 0.000000, -0.707107, -0.707107}
1686 Detail::makeArray<size>(coordinates)
1688 static constexpr
double angleFunction(
const unsigned a,
const unsigned b) {
1693 return angleLookupTable.at(
1698 static constexpr std::array<
1699 std::array<unsigned, 12>,
1702 {10, 11, 8, 9, 5, 7, 4, 6, 0, 1, 2, 3},
1703 {2, 0, 3, 1, 8, 10, 9, 11, 6, 4, 7, 5},
1704 {7, 6, 5, 4, 3, 2, 1, 0, 11, 9, 10, 8},
1707 static constexpr std::array<
1708 std::array<unsigned, 4>,
1716 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:322
See Data::TricappedTrigonalPrism.
Equilateral triangle shape (planar)
Definition: Data.h:131
constexpr UpperTriangularMatrix< ValueType, size > makeUpperTriangularMatrix(const ArrayType< ValueType, size > &data)
Helper constructing function that deduces the required type signature.
Definition: UpperTriangularMatrix.h:172
A regular tetrahedron shape.
Definition: Data.h:271
See Data::EquilateralTriangle.
See Data::BicappedSquareAntiprism.
A pentagon shape (planar)
Definition: Data.h:634
A pentagonal pyramid shape, the J2 solid.
Definition: Data.h:820
Trigonal dodecahedron, snub disphenoid shape, spherized J84 solid in D2d.
Definition: Data.h:1245
See Data::TrigonalPyramid.
See Data::PentagonalBipyramid.
Line shape.
Definition: Data.h:41
A regular cube.
Definition: Data.h:1195
Capped square antiprism shape, spherized J10 solid in C4v.
Definition: Data.h:1401
A trigonal bipyramid shape, the J12 solid.
Definition: Data.h:563
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:1751
Regular icosahedron shape.
Definition: Data.h:1610
static constexpr std::array< Temple::Vector, 8 > coordinates
[V(CO)7]+ in C2v
Definition: Data.h:1201
See Data::PentagonalPyramid.
PointGroup
Point groups.
Definition: PointGroups.h:20
A regular octahedron.
Definition: Data.h:687
A face-centered trigonal pyramid shape = trig. pl. + an axial ligand.
Definition: Data.h:444
A seesaw shape.
Definition: Data.h:377
A regular trigonal prism shape.
Definition: Data.h:759
Bent symmetry at 107°
Definition: Data.h:81
See Data::HexagonalBipyramid.
Tricapped trigonal prism, spherized J51 solid in D3h.
Definition: Data.h:1349
See Data::CappedTrigonalPrism.
Regular square antiprism shape.
Definition: Data.h:1121
Hexagon shape (planar)
Definition: Data.h:872
Provides type-level computations for types enumerated in a tuple.
Capped square antiprism shape, spherized J10 solid in C4v.
Definition: Data.h:1450
A square pyramid shape, the J1 solid (central position is square-face centered)
Definition: Data.h:497
See Data::HeptagonalBipyramid.
static constexpr std::array< Temple::Vector, 7 > coordinates
Definition: Data.h:1055
Mono-vacant tetrahedron shape.
Definition: Data.h:179
See Data::TrigonalDodecahedron.
See Data::EdgeContractedIcosahedron.
A capped octahedron shape.
Definition: Data.h:991
static constexpr std::array< Temple::Vector, 7 > coordinates
Definition: Data.h:1002
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:1046
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:23
See Data::CappedSquareAntiPrism.
Generate lookup table for a symmetry's angles.
A pentagonal bipyramid shape, the J13 solid.
Definition: Data.h:925
See Data::CappedOctahedron.
See Data::TrigonalBipyramid.
Bicapped square antiprism shape, spherized J17 shape in D4h.
Definition: Data.h:1503
Edge contracted icosahedron shape.
Definition: Data.h:1558
See Data::SquareAntiprism.
static constexpr auto angleLookupTable
Definition: Data.h:1141
Regular cuboctahedron shape with Oh symmetry.
Definition: Data.h:1666
Hexagonal bipyramid shape.
Definition: Data.h:1296
A T-shaped symmetry.
Definition: Data.h:222