drop templates in favor of vector sizes

This commit is contained in:
2019-09-16 00:49:18 -04:00
parent cddb3b56dc
commit 02611be11a
7 changed files with 28 additions and 18 deletions

View File

@@ -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")

View File

@@ -17,5 +17,3 @@ add_dependencies(cosets shaders)
target_link_libraries(${PROJECT_NAME}
PRIVATE glad glm glfw)
target_compile_options(${PROJECT_NAME} PRIVATE -O3)

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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) {