@@ -6,14 +6,14 @@ add_executable(${PROJECT_NAME}
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
PRIVATE glad glm glfw)
|
||||
|
||||
target_include_directories(${PROJECT_NAME}
|
||||
PRIVATE include)
|
||||
|
||||
add_custom_command(
|
||||
TARGET cosets POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/shaders
|
||||
${CMAKE_CURRENT_BINARY_DIR}/shaders
|
||||
TARGET cosets POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/shaders
|
||||
${CMAKE_CURRENT_BINARY_DIR}/shaders
|
||||
)
|
||||
|
||||
add_executable(coxeter src/tc.cpp)
|
||||
|
||||
add_executable(mirror src/mirror.cpp)
|
||||
target_link_libraries(mirror PRIVATE glm)
|
||||
|
||||
48
cosets/src/mirror.cpp
Normal file
48
cosets/src/mirror.cpp
Normal file
@@ -0,0 +1,48 @@
|
||||
#include <cmath>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtx/string_cast.hpp>
|
||||
#include <iomanip>
|
||||
|
||||
#include "util/numeric.hpp"
|
||||
|
||||
template<int N>
|
||||
std::vector<glm::vec4> mirror(const float (&arr)[N][N]) {
|
||||
static_assert(1 <= N and N <= 4, "Vector size is unsupported");
|
||||
|
||||
std::vector<glm::vec4> mirrors{};
|
||||
for (int p = 0; p < N; ++p) {
|
||||
glm::vec4 vp{};
|
||||
for (int m = 0; m < p; ++m) {
|
||||
glm::vec4 vq = mirrors[m];
|
||||
vp[m] = (cos(M_PI / arr[p][m]) - dot(m, vp, vq)) / vq[m];
|
||||
}
|
||||
vp[p] = std::sqrt(1 - glm::dot(vp, vp));
|
||||
|
||||
for (const auto &v : mirrors) {
|
||||
if (glm::dot(vp, v) > 0) {
|
||||
vp *= -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
mirrors.push_back(round(vp, 15));
|
||||
}
|
||||
|
||||
return mirrors;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
auto normals = mirror<3>({
|
||||
{},
|
||||
{4},
|
||||
{2, 3}
|
||||
});
|
||||
|
||||
for (const auto &normal : normals) {
|
||||
std::cout << glm::to_string(normal) << std::endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -98,7 +98,7 @@ struct Row {
|
||||
this->to = cos;
|
||||
}
|
||||
|
||||
bool learn(Table *table) {
|
||||
[[nodiscard]] bool learn(Table *table) {
|
||||
if (r - l == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
17
cosets/src/util/numeric.hpp
Normal file
17
cosets/src/util/numeric.hpp
Normal file
@@ -0,0 +1,17 @@
|
||||
#pragma once
|
||||
|
||||
#include <glm/glm.hpp>
|
||||
|
||||
glm::vec4 round(glm::vec4 f, int prec) {
|
||||
auto dec = (float) pow(10, prec);
|
||||
auto res = glm::trunc(f * dec + 0.5f) / dec;
|
||||
return res;
|
||||
}
|
||||
|
||||
float dot(int n, glm::vec4 a, glm::vec4 b) {
|
||||
float sum = 0;
|
||||
for (int i = 0; i < n; ++i) {
|
||||
sum += a[i] * b[i];
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
Reference in New Issue
Block a user