63 const RealType HGR = (sqrt(5.0) + 1.0) / 4.0;
65 Basis.push_back(Vector3d(HGR, 0.0, 0.5));
66 Basis.push_back(Vector3d(HGR, 0.0, -0.5));
67 Basis.push_back(Vector3d(0.5, HGR, 0.0));
68 Basis.push_back(Vector3d(-0.5, HGR, 0.0));
69 Basis.push_back(Vector3d(0.0, 0.5, HGR));
70 Basis.push_back(Vector3d(0.0, -0.5, HGR));
71 Basis.push_back(Vector3d(0.5, -HGR, 0.0));
72 Basis.push_back(Vector3d(0.0, 0.5, -HGR));
73 Basis.push_back(Vector3d(-HGR, 0.0, 0.5));
74 Basis.push_back(Vector3d(0.0, -0.5, -HGR));
75 Basis.push_back(Vector3d(-HGR, 0.0, -0.5));
76 Basis.push_back(Vector3d(-0.5, -HGR, 0.0));
82 Edges.push_back(std::make_pair(0, 1));
83 Edges.push_back(std::make_pair(0, 2));
84 Edges.push_back(std::make_pair(0, 4));
85 Edges.push_back(std::make_pair(0, 5));
86 Edges.push_back(std::make_pair(0, 6));
88 Edges.push_back(std::make_pair(10, 3));
89 Edges.push_back(std::make_pair(10, 7));
90 Edges.push_back(std::make_pair(10, 8));
91 Edges.push_back(std::make_pair(10, 9));
92 Edges.push_back(std::make_pair(10, 11));
94 Edges.push_back(std::make_pair(1, 2));
95 Edges.push_back(std::make_pair(1, 6));
96 Edges.push_back(std::make_pair(1, 7));
97 Edges.push_back(std::make_pair(1, 9));
99 Edges.push_back(std::make_pair(8, 3));
100 Edges.push_back(std::make_pair(8, 4));
101 Edges.push_back(std::make_pair(8, 5));
102 Edges.push_back(std::make_pair(8, 11));
104 Edges.push_back(std::make_pair(2, 3));
105 Edges.push_back(std::make_pair(2, 4));
106 Edges.push_back(std::make_pair(2, 7));
108 Edges.push_back(std::make_pair(11, 5));
109 Edges.push_back(std::make_pair(11, 6));
110 Edges.push_back(std::make_pair(11, 9));
112 Edges.push_back(std::make_pair(6, 5));
113 Edges.push_back(std::make_pair(6, 9));
115 Edges.push_back(std::make_pair(3, 4));
116 Edges.push_back(std::make_pair(3, 7));
118 Edges.push_back(std::make_pair(7, 9));
120 Edges.push_back(std::make_pair(5, 4));
125 Facets.push_back(std::make_tuple(0, 1, 2));
126 Facets.push_back(std::make_tuple(0, 2, 4));
127 Facets.push_back(std::make_tuple(0, 4, 5));
128 Facets.push_back(std::make_tuple(0, 5, 6));
129 Facets.push_back(std::make_tuple(0, 1, 6));
131 Facets.push_back(std::make_tuple(10, 3, 7));
132 Facets.push_back(std::make_tuple(10, 3, 8));
133 Facets.push_back(std::make_tuple(10, 8, 11));
134 Facets.push_back(std::make_tuple(10, 9, 11));
135 Facets.push_back(std::make_tuple(10, 7, 9));
137 Facets.push_back(std::make_tuple(1, 2, 7));
138 Facets.push_back(std::make_tuple(1, 7, 9));
139 Facets.push_back(std::make_tuple(1, 6, 9));
141 Facets.push_back(std::make_tuple(8, 5, 11));
142 Facets.push_back(std::make_tuple(8, 4, 5));
143 Facets.push_back(std::make_tuple(8, 3, 4));
145 Facets.push_back(std::make_tuple(2, 3, 7));
146 Facets.push_back(std::make_tuple(2, 3, 4));
148 Facets.push_back(std::make_tuple(11, 5, 6));
149 Facets.push_back(std::make_tuple(11, 6, 9));
171 if (n < 0)
return Points;
176 Points.push_back(Vector3d(0.0, 0.0, 0.0));
183 for (std::vector<Vector3d>::iterator i = Basis.begin(); i != Basis.end();
185 Points.push_back((*i) * RealType(n));
191 if (n < 2)
return Points;
193 for (std::vector<std::pair<int, int>>::iterator i = Edges.begin();
194 i != Edges.end(); ++i) {
195 Vector3d e1 = Basis[(*i).first] * RealType(n);
196 Vector3d e2 = Basis[(*i).second] * RealType(n);
198 for (
int j = 1; j <= n - 1; j++) {
199 Points.push_back(e1 + (e2 - e1) * RealType(j) / RealType(n));
206 if (n < 3)
return Points;
208 for (
const auto& [first, second, third] : Facets) {
209 Vector3d e1 = Basis[first] * RealType(n);
210 Vector3d e2 = Basis[second] * RealType(n);
211 Vector3d e3 = Basis[third] * RealType(n);
213 for (
int j = 1; j <= n - 2; j++) {
214 Vector3d v1 = e1 + (e2 - e1) * RealType(j + 1) / RealType(n);
215 Vector3d v2 = e1 + (e3 - e1) * RealType(j + 1) / RealType(n);
217 for (
int k = 1; k <= j; k++) {
218 Points.push_back(v1 + (v2 - v1) * RealType(k) / RealType(j + 1));