11#ifndef UTILS_RIPS_BUILDER_H_
12#define UTILS_RIPS_BUILDER_H_
14#include <boost/iterator/iterator_facade.hpp>
16#include <CGAL/Euclidean_distance.h>
17#include <CGAL/Orthogonal_k_neighbor_search.h>
18#include <CGAL/Search_traits_d.h>
20#include "utils/UI_utils.h"
21#include "model/Complex_typedefs.h"
23template<
typename SkBlComplex>
class Rips_builder {
25 SkBlComplex& complex_;
32 Rips_builder(SkBlComplex& complex,
double alpha) : complex_(complex) {
33 complex.keep_only_vertices();
34 if (alpha <= 0)
return;
39 double squared_eucl_distance(
const Point& p1,
const Point& p2)
const {
40 return Geometry_trait::Squared_distance_d()(p1, p2);
43 void compute_edges(
double alpha) {
44 auto vertices = complex_.vertex_range();
45 for (
auto p = vertices.begin(); p != vertices.end(); ++p) {
46 std::clog << *p <<
" ";
48 for (
auto q = p; ++q != vertices.end(); )
49 if (squared_eucl_distance(complex_.point(*p), complex_.point(*q)) < 4 * alpha * alpha)
50 complex_.add_edge_without_blockers(*p, *q);
52 std::clog << std::endl;