codac 2.0.0
Loading...
Searching...
No Matches
codac2_CtcBinaryImage.h
Go to the documentation of this file.
1
9
10#pragma once
11
12#include <iomanip>
13#include "codac2_Ctc.h"
14#include "codac2_BinaryImage.h"
15
16namespace codac2
17{
18 template<size_t N=2>
19 class CtcBinaryImage : public Ctc<CtcBinaryImage<N>,IntervalVector>
20 {
21 public:
22
23 CtcBinaryImage(const BinaryImage<N>& img)
24 : Ctc<CtcBinaryImage<N>,IntervalVector>(N), _img(img), _real_box(img.real_box())
25 { }
26
27 inline BinaryImage<N>& image()
28 {
29 return _img;
30 }
31
32 const IntervalVector& real_box() const
33 {
34 return _real_box;
35 }
36
37 inline void contract(IntervalVector& x) const
38 {
39 if(!x.intersects(_real_box))
40 return;
41
42 else
43 {
44 if(!_img.data_has_been_loaded())
45 _img.load_data();
46 _img.convert_as_integrale_img();
47
48 if(x.is_subset(_real_box))
49 {
50 GridBox i = _img.to_grid(x);
51 _img.contract_indices(i);
52 x &= _img.to_reals(i);
53 }
54
55 else
56 {
57 // Only the part inside the real_box is contracted
58 auto x_img = x & _real_box;
59 contract(x_img);
60 for(const auto& yi : x.diff(_real_box))
61 x_img |= yi;
62 x = x_img;
63 }
64 }
65 }
66
67 //protected:
68
69 mutable BinaryImage<N> _img;
70 const IntervalVector _real_box;
71 };
72}
Definition codac2_OctaSym.h:21
Eigen::Matrix< Interval,-1, 1 > IntervalVector
Alias for a dynamic-size column vector of intervals.
Definition codac2_IntervalVector.h:25