drop templates in favor of vector sizes
This commit is contained in:
@@ -14,3 +14,8 @@ option(GLM_TEST_ENABLE OFF)
|
||||
add_subdirectory(vendor/glm)
|
||||
|
||||
add_subdirectory(cosets)
|
||||
|
||||
if (NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE Release)
|
||||
endif ()
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
|
||||
|
||||
@@ -17,5 +17,3 @@ add_dependencies(cosets shaders)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
PRIVATE glad glm glfw)
|
||||
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE -O3)
|
||||
|
||||
@@ -9,8 +9,11 @@ struct Table;
|
||||
struct IRow;
|
||||
|
||||
struct Mults {
|
||||
int num_gens;
|
||||
std::map<std::tuple<int, int>, int> mults;
|
||||
|
||||
Mults();
|
||||
|
||||
void set(int a, int b, int mult);
|
||||
|
||||
[[nodiscard]] int get(int a, int b) const;
|
||||
|
||||
@@ -45,23 +45,24 @@ public:
|
||||
u_view = glGetUniformLocation(program, "view");
|
||||
u_color = glGetUniformLocation(program, "color");
|
||||
|
||||
const int N = 4;
|
||||
const Mults &mults = schlafli({3, 4, 3});
|
||||
const Mults &mults = schlafli({4, 3});
|
||||
std::cout << mults.num_gens << std::endl;
|
||||
|
||||
std::cout << "Generation times: " << std::endl;
|
||||
|
||||
auto gen_start = std::chrono::high_resolution_clock::now();
|
||||
|
||||
vert_data = vertices<N>(mults, {5, .1, .1});
|
||||
vert_data = vertices(mults, {1, .1, .1, .1});
|
||||
auto gen_vert = std::chrono::high_resolution_clock::now();
|
||||
std::chrono::duration<double> vert_time = gen_vert - gen_start;
|
||||
std::cout << "Vertices: " << vert_time.count() << std::endl;
|
||||
|
||||
edge_data = edges<N>(mults);
|
||||
edge_data = edges(mults);
|
||||
auto gen_edge = std::chrono::high_resolution_clock::now();
|
||||
std::chrono::duration<double> edge_time = gen_edge - gen_vert;
|
||||
std::cout << " Edges: " << edge_time.count() << std::endl;
|
||||
|
||||
face_data = faces<N>(mults);
|
||||
face_data = faces(mults);
|
||||
auto gen_face = std::chrono::high_resolution_clock::now();
|
||||
std::chrono::duration<double> face_time = gen_face - gen_edge;
|
||||
std::cout << " Faces: " << face_time.count() << std::endl;
|
||||
|
||||
@@ -1,7 +1,13 @@
|
||||
#include "coxeter.hpp"
|
||||
|
||||
Mults::Mults() {
|
||||
num_gens = 0;
|
||||
mults = std::map<std::tuple<int, int>, int>();
|
||||
}
|
||||
|
||||
void Mults::set(int a, int b, int mult) {
|
||||
if (a > b) std::swap(a, b);
|
||||
if (b + 1 > num_gens) num_gens = b + 1;
|
||||
mults[std::make_tuple(a, b)] = mult;
|
||||
}
|
||||
|
||||
|
||||
@@ -13,20 +13,18 @@ std::vector<std::vector<int>> coxeter_rels() {
|
||||
return rels;
|
||||
}
|
||||
|
||||
template<int N>
|
||||
glm::vec4 identity(const std::vector<glm::vec4> &normals, const float(&coords)[N]) {
|
||||
glm::vec4 identity(const std::vector<glm::vec4> &normals, const std::vector<float> &coords) {
|
||||
const std::vector<glm::vec4> corners = plane_intersections(normals);
|
||||
const std::vector<float> coords_vec(coords, coords + N);
|
||||
const glm::vec4 identity = barycentric(corners, coords_vec);
|
||||
const glm::vec4 identity = barycentric(corners, coords);
|
||||
return glm::normalize(identity);
|
||||
}
|
||||
|
||||
template<int N>
|
||||
std::vector<glm::vec4>
|
||||
vertices(const Mults &mults, const float (&coords)[N]) {
|
||||
vertices(const Mults &mults, std::vector<float> coords) {
|
||||
int N = mults.num_gens;
|
||||
Table *table = solve(all_gens(N), {}, mults);
|
||||
|
||||
const std::vector<glm::vec4> normals = mirror<N>(mults);
|
||||
const std::vector<glm::vec4> normals = mirror(mults);
|
||||
glm::vec4 ident = identity(normals, coords);
|
||||
|
||||
std::vector<glm::vec4> verts{};
|
||||
@@ -41,10 +39,10 @@ vertices(const Mults &mults, const float (&coords)[N]) {
|
||||
return verts;
|
||||
}
|
||||
|
||||
template<int N>
|
||||
std::vector<int> edges(const Mults &mults) {
|
||||
std::vector<int> res{};
|
||||
|
||||
int N = mults.num_gens;
|
||||
Table *t_vert = solve(all_gens(N), {}, mults);
|
||||
|
||||
for (const auto &subgens : combinations(N, 1)) {
|
||||
@@ -64,9 +62,9 @@ std::vector<int> edges(const Mults &mults) {
|
||||
return res;
|
||||
}
|
||||
|
||||
template<int N>
|
||||
std::vector<int> faces(const Mults &mults) {
|
||||
std::vector<int> res{};
|
||||
int N = mults.num_gens;
|
||||
|
||||
Table *t_vert = solve(all_gens(N), {}, mults);
|
||||
|
||||
|
||||
@@ -10,9 +10,8 @@
|
||||
#include "numeric.hpp"
|
||||
#include "coxeter.hpp"
|
||||
|
||||
template<int N>
|
||||
std::vector<glm::vec4> mirror(const Mults &mults) {
|
||||
static_assert(1 <= N and N <= 4, "Vector size is unsupported");
|
||||
int N = mults.num_gens;
|
||||
|
||||
std::vector<glm::vec4> mirrors{};
|
||||
for (int p = 0; p < N; ++p) {
|
||||
|
||||
Reference in New Issue
Block a user