18 class Data2D_nlinfo_interpolator;
34 typedef std::pair<difference_type,difference_type>
coords;
38 Data2D() noexcept : scalefactor() { }
55 friend std::ostream& operator<<(std::ostream&, const
Data2D&);
58 friend
void save(const
Data2D&, std::ofstream&);
72 std::string
size_string()
const {
return std::to_string(A_ptr->size()); }
77 void chk_scalefactor()
const;
78 void chk_data_roi_same_size()
const;
82 std::shared_ptr<Array2D<double>> A_ptr;
86 class Data2D_nlinfo_interpolator final {
94 Data2D_nlinfo_interpolator() noexcept : scalefactor(), nlinfo_top(), nlinfo_left() { }
95 Data2D_nlinfo_interpolator(
const Data2D_nlinfo_interpolator&) =
default;
96 Data2D_nlinfo_interpolator(Data2D_nlinfo_interpolator&&) =
default;
97 Data2D_nlinfo_interpolator& operator=(
const Data2D_nlinfo_interpolator&) =
default;
98 Data2D_nlinfo_interpolator& operator=(Data2D_nlinfo_interpolator&&) =
default;
99 ~Data2D_nlinfo_interpolator() noexcept = default;
102 Data2D_nlinfo_interpolator(const Data2D&, difference_type,
INTERP);
104 double operator()(
double p1,
double p2)
const {
return sub_data_interp(p1_unscaled(p1), p2_unscaled(p2)); }
105 const Array2D<double>& first_order(
double p1,
double p2)
const {
106 const auto &fo_unscaled = sub_data_interp.first_order(p1_unscaled(p1), p2_unscaled(p2));
107 first_order_buf(0) = fo_unscaled(0);
108 first_order_buf(1) = fo_unscaled(1) / scalefactor;
109 first_order_buf(2) = fo_unscaled(2) / scalefactor;
111 return first_order_buf;
116 double p1_unscaled(
double p1)
const {
return (p1 / scalefactor) - nlinfo_top + border; }
117 double p2_unscaled(
double p2)
const {
return (p2 / scalefactor) - nlinfo_left + border; }
119 std::shared_ptr<Array2D<double>> sub_data_ptr;
120 Array2D<double>::interpolator sub_data_interp;
121 mutable Array2D<double> first_order_buf;
const Array2D< double > & get_array() const
details::Data2D_nlinfo_interpolator nlinfo_interpolator
const ROI2D & get_roi() const
friend bool isequal(const Data2D &, const Data2D &)
difference_type get_scalefactor() const
std::ptrdiff_t difference_type
Data2D(const Data2D &)=default
static Data2D load(std::ifstream &)
difference_type data_width() const
nlinfo_interpolator get_nlinfo_interpolator(difference_type, INTERP) const
std::string size_string() const
std::pair< difference_type, difference_type > coords
Data2D(Data2D &&) noexcept=default
difference_type data_height() const
friend void save(const Data2D &, std::ofstream &)
std::string size_2D_string() const
friend void imshow(const Data2D &, difference_type delay)
ROI2D::difference_type difference_type