diff --git a/BaseLib/Subdivision.cpp b/BaseLib/Subdivision.cpp index a2141d04d7728022f8e9ec9eacd5f343959a9e38..b9ba827c5bc01619bf6da6eff0be2f6149588d70 100644 --- a/BaseLib/Subdivision.cpp +++ b/BaseLib/Subdivision.cpp @@ -9,6 +9,9 @@ #include "Subdivision.h" +#include <algorithm> +#include <cmath> + #include <BaseLib/Error.h> namespace BaseLib @@ -31,6 +34,29 @@ GradualSubdivision::GradualSubdivision(const double L, } } +std::vector<double> GradualSubdivision::operator()() const +{ + std::vector<double> vec_x; + + double x = 0; + unsigned i = 0; + do { + vec_x.push_back(x); + x += std::min(_max_dL, + _dL0 * std::pow(_multiplier, static_cast<double>(i))); + i++; + } while (x < _length); + + if (vec_x.back() < _length) { + double last_dx = vec_x[vec_x.size() - 1] - vec_x[vec_x.size() - 2]; + if (_length - vec_x.back() < last_dx) + vec_x[vec_x.size() - 1] = _length; + else + vec_x.push_back(_length); + } + return vec_x; +} + GradualSubdivisionFixedNum::GradualSubdivisionFixedNum( const double L, const std::size_t num_subdivisions, const double multiplier) : _length{L}, _num_subdivisions{num_subdivisions}, _multiplier{multiplier} diff --git a/BaseLib/Subdivision.h b/BaseLib/Subdivision.h index f6c87e869849466482acf4d33c3f1cea957e3ae5..442fb514af91b15994e98aa057a3e4a41aaab0c6 100644 --- a/BaseLib/Subdivision.h +++ b/BaseLib/Subdivision.h @@ -9,7 +9,6 @@ #pragma once -#include <cmath> #include <vector> namespace BaseLib @@ -77,27 +76,7 @@ public: const double multiplier); /// Returns a vector of subdivided points - std::vector<double> operator()() const override - { - std::vector<double> vec_x; - - double x = 0; - unsigned i=0; - do { - vec_x.push_back(x); - x += std::min(_max_dL, _dL0*std::pow(_multiplier, static_cast<double>(i))); - i++; - } while (x<_length); - - if (vec_x.back() < _length) { - double last_dx = vec_x[vec_x.size()-1] - vec_x[vec_x.size()-2]; - if (_length-vec_x.back()<last_dx) - vec_x[vec_x.size()-1] = _length; - else - vec_x.push_back(_length); - } - return vec_x; - } + std::vector<double> operator()() const override; private: const double _length;