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