1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
#define CGAL_CHECK_EXPENSIVE
#define CGAL_CHECK_EXACTNESS
#include <CGAL/Kinetic/Default_simulator.h>
#include <CGAL/Polynomial/Sturm_root_stack_traits.h>
#include <CGAL/Polynomial/Sturm_root_stack.h>
#include <CGAL/Kinetic/Active_objects_vector.h>
#include <CGAL/Kinetic/Default_instantaneous_kernel.h>
#include <CGAL/Kinetic/Cartesian.h>
#include <CGAL/Kinetic/Handle_degeneracy_function_kernel.h>
#include <CGAL/Kinetic/Two_list_pointer_event_queue.h>
#include <CGAL/Kinetic/Active_objects_vector.h>
#include <CGAL/Kinetic/Delaunay_triangulation_2.h>
#include <CGAL/Cartesian.h>
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
template <class P>
struct Point_with_color: public P {
typedef P Base_point;
typedef typename P::Coordinate C;
Point_with_color(const P &p, int c): P(p), color(c){}
Point_with_color(const C &x, const C &y): P(x,y){}
Point_with_color(){}
int color;
};
template <class P>
std::istream &operator<<(std::istream &in, Point_with_color<P> &p) {
typename P::Base_point bp;
in >> bp;
int c;
in >> c;
p= Point_with_color<P>(bp, c);
return in;
}
template <class P>
std::ostream &operator>>(std::ostream &out, const Point_with_color<P> &p) {
out << static_cast<typename P::Base_point>(p) << " " << p.color;
return out;
}
struct My_simulation_traits {
typedef My_simulation_traits This;
typedef CGAL::Exact_predicates_exact_constructions_kernel Static_kernel;
//typedef CGAL::Regular_triangulation_euclidean_traits_3<Static_kernel_base> Static_kernel;
typedef CGAL::POLYNOMIAL::Polynomial<Static_kernel::FT> Function;
typedef CGAL::POLYNOMIAL::Sturm_root_stack_traits<Function> Root_stack_traits;
typedef CGAL::POLYNOMIAL::Sturm_root_stack<Root_stack_traits> Root_stack;
typedef CGAL::POLYNOMIAL::Kernel<Function, Root_stack> Function_kernel;
typedef CGAL::Kinetic::Handle_degeneracy_function_kernel<Function_kernel, false> Simulator_function_kernel_base;
struct Simulator_function_kernel: public Simulator_function_kernel_base{};
typedef CGAL::Kinetic::Cartesian<Simulator_function_kernel> Kinetic_kernel;
typedef CGAL::Kinetic::Two_list_pointer_event_queue<Function_kernel> Event_queue;
typedef CGAL::Kinetic::Default_simulator<Simulator_function_kernel, Event_queue > Simulator;
typedef Point_with_color<Kinetic_kernel::Point_2> Point_2;
typedef CGAL::Kinetic::Active_objects_vector<Kinetic_kernel::Point_1> Active_points_1_table;
typedef CGAL::Kinetic::Active_objects_vector<Point_2> Active_points_2_table;
typedef CGAL::Kinetic::Active_objects_vector<Kinetic_kernel::Point_3> Active_points_3_table;
// typedef Active_objects_vector<Kinetic_kernel::Weighted_point_3> Active_weighted_points_3_table;
typedef CGAL::Kinetic::Default_instantaneous_kernel<This> Instantaneous_kernel;
Active_points_1_table* active_points_1_table_handle() const { return ap1_.get();}
Active_points_2_table* active_points_2_table_handle() const {return ap2_.get();}
Active_points_3_table* active_points_3_table_handle() const {return ap3_.get();}
//Active_weighted_points_3_table* active_weighted_points_3_table_handle() const {return awp3_.get();}
Simulator* simulator_handle() const { return sim_.get();}
const Static_kernel& static_kernel_object() const {return k_;}
const Kinetic_kernel& kinetic_kernel_object() const {return kk_;}
Instantaneous_kernel instantaneous_kernel_object() const {
return Instantaneous_kernel(*this);
}
My_simulation_traits(const Simulator::Time &lb,
const Simulator::Time &ub): sim_(new Simulator(lb, ub)),
ap1_(new Active_points_1_table()),
ap2_(new Active_points_2_table()),
ap3_(new Active_points_3_table())
{}
bool is_exact() const {
return true;
}
protected:
Simulator::Handle sim_;
Active_points_1_table::Handle ap1_;
Active_points_2_table::Handle ap2_;
Active_points_3_table::Handle ap3_;
//Active_weighted_points_3_table::Handle awp3_;
Static_kernel k_;
Kinetic_kernel kk_;
Function_kernel fk_;
};
int main()
{
typedef CGAL::Kinetic::Delaunay_triangulation_2<My_simulation_traits> KDel;
My_simulation_traits tr(0, 10000);
My_simulation_traits::Simulator::Handle sp= tr.simulator_handle();
KDel kdel(tr);
kdel.set_has_certificates(false);
std::ifstream in("data/points_with_color_2");
in >> *tr.active_points_2_table_handle();
kdel.set_has_certificates(true);
std::cout << "Starting to run" << std::endl;
while (sp->next_event_time()
< sp->end_time()) {
sp->set_current_event_number(sp->current_event_number()+10);
std::cout << "At time " << sp->current_time() << ":\n";
std::cout << kdel.triangulation_data_structure();
}
return EXIT_SUCCESS;
}
|