#define BOOST_PENDING_INTEGER_LOG2_HPP
#include <boost/integer/integer_log2.hpp>
#include <iostream>
#include <gudhi/Coxeter_triangulation.h>
#include <gudhi/Functions/Function_affine_plane_in_Rd.h>
#include <gudhi/Functions/Function_Sm_in_Rd.h>
#include <gudhi/Functions/Cartesian_product.h>
#include <gudhi/Functions/Linear_transformation.h>
#include <gudhi/Implicit_manifold_intersection_oracle.h>
#include <gudhi/Manifold_tracing.h>
#include <gudhi/Coxeter_triangulation/Cell_complex/Cell_complex.h>
#include <gudhi/Functions/random_orthogonal_matrix.h>
#include <gudhi/IO/build_mesh_from_cell_complex.h>
#include <gudhi/IO/output_meshes_to_medit.h>
using namespace Gudhi::coxeter_triangulation;
int main(int argc, char** argv) {
double radius = 1.0;
Function_Sm_in_Rd fun_circle(radius, 1);
auto matrix = random_orthogonal_matrix(4);
Eigen::VectorXd seed = fun_flat_torus_rotated.seed();
Eigen::MatrixXd normal_matrix = Eigen::MatrixXd::Zero(4, 1);
for (std::size_t i = 0; i < 4; i++) normal_matrix(i, 0) = -seed(i);
Function_affine_plane_in_Rd fun_bound(normal_matrix, -seed / 2);
auto oracle =
make_oracle(fun_flat_torus_rotated, fun_bound);
double lambda = 0.2;
Coxeter_triangulation<> cox_tr(oracle.amb_d());
cox_tr.change_offset(Eigen::VectorXd::Random(oracle.amb_d()));
cox_tr.change_matrix(lambda * cox_tr.matrix());
using MT = Manifold_tracing<Coxeter_triangulation<> >;
using Out_simplex_map = typename MT::Out_simplex_map;
std::vector<Eigen::VectorXd> seed_points(1, seed);
Out_simplex_map interior_simplex_map, boundary_simplex_map;
std::size_t intr_d = oracle.amb_d() - oracle.cod_d();
Cell_complex<Out_simplex_map> cell_complex(intr_d);
cell_complex.construct_complex(interior_simplex_map, boundary_simplex_map);
Configuration(true, true, true, 2, 13, 14)));
return 0;
}
void manifold_tracing_algorithm(const Point_range &seed_points, const Triangulation &triangulation, const Intersection_oracle &oracle, Out_simplex_map &out_simplex_map)
Static method for Manifold_tracing<Triangulation_>::manifold_tracing_algorithm that computes the set ...
Definition: Manifold_tracing.h:223
Implicit_manifold_intersection_oracle< Function_, Domain_function_ > make_oracle(const Function_ &function, const Domain_function_ &domain_function)
Static constructor of an intersection oracle from a function with a domain.
Definition: Implicit_manifold_intersection_oracle.h:240
void output_meshes_to_medit(std::size_t amb_d, std::string file_name, const Meshes &... meshes)
Outputs a text file with specified meshes that can be visualized in Medit.
Definition: output_meshes_to_medit.h:81
Mesh_medit build_mesh_from_cell_complex(const Cell_complex &cell_complex, Configuration i_configuration=Configuration(), Configuration b_configuration=Configuration())
Builds a Gudhi::coxeter_triangulation::Mesh_medit from a Gudhi::coxeter_triangulation::Cell_complex.
Definition: build_mesh_from_cell_complex.h:122
Cartesian_product< Functions... > make_product_function(const Functions &... functions)
Static constructor of a Cartesian product function.
Definition: Cartesian_product.h:149
Linear_transformation< Function_ > make_linear_transformation(const Function_ &function, const Eigen::MatrixXd &matrix)
Static constructor of a linearly transformed function.
Definition: Linear_transformation.h:80