#pragma once #include #include #include namespace mbgl { namespace style { namespace expression { class ExponentialInterpolator { public: ExponentialInterpolator(double base_) : base(base_) {} double base; double interpolationFactor(const Range& inputLevels, const double input) const { return util::interpolationFactor(base, Range { static_cast(inputLevels.min), static_cast(inputLevels.max) }, input); } bool operator==(const ExponentialInterpolator& rhs) const { return base == rhs.base; } }; class CubicBezierInterpolator { public: CubicBezierInterpolator(double x1_, double y1_, double x2_, double y2_) : ub(x1_, y1_, x2_, y2_) {} double interpolationFactor(const Range& inputLevels, const double input) const { return ub.solve(util::interpolationFactor(1.0, Range { static_cast(inputLevels.min), static_cast(inputLevels.max) }, input), 1e-6); } bool operator==(const CubicBezierInterpolator& rhs) const { return ub == rhs.ub; } util::UnitBezier ub; }; using Interpolator = variant; } // namespace expression } // namespace style } // namespace mbgl