#pragma once #include #include namespace kel { namespace impl { struct ico_surface_helper { /** * On each triangle we assume a ccw order and we start on the top-left part of the * triangle. The orientation of the triangle is determined by the horizontal line * (on the 2D foldout of the icosahedron) which is the down direction. */ static constexpr std::array, 20u> neighbour_map { {1,4,5},//0 {2,0,6},//1 {3,1,7},//2 {4,2,8},//3 {0,3,9},//4 {14,10,0},//5 {10,11,1},//6 {11,12,2},//7 {12,13,3},//8 {13,14,4},//9 {6,5,15},//10 {7,6,16},//11 {8,7,17},//12 {9,8,18},//13 {5,9,19},//14 {19,16,10},//15 {15,17,11},//16 {16,18,12},//17 {17,19,13},//18 {18,15,14} //19 }; }; } template class ico_addr { private: std::array vals_; public: template ico_addr
slice() const { return {}; } }; template class ico_triangle { private: std::array> subdivs_; public: }; template class ico_triangle final { private: T val_; public: }; template class icosahedron final { private: std::array,20u> surfaces_; public: }; }