ALFI
Advanced Library for Function Interpolation
Loading...
Searching...
No Matches
points.h
Go to the documentation of this file.
1#pragma once
2
3#include "../config.h"
4
5namespace alfi::points {
6 template <typename Number = DefaultNumber, template <typename, typename...> class Container = DefaultContainer>
7 void lin_map(Container<Number>& points, Number a, Number b, Number c, Number d) {
8 const auto mid1 = (a + b) / 2;
9 const auto mid2 = (c + d) / 2;
10 const auto scale = (d - c) / (b - a);
11 for (auto& point : points) {
12 point = mid2 + scale * (point - mid1);
13 }
14 }
15
16 template <typename Number = DefaultNumber, template <typename, typename...> class Container = DefaultContainer>
17 Container<Number> lin_mapped(const Container<Number>& points, Number a, Number b, Number c, Number d) {
18 auto mapped_points = points;
19 lin_map<Number,Container>(mapped_points, a, b, c, d);
20 return mapped_points;
21 }
22
23 template <typename Number = DefaultNumber, template <typename, typename...> class Container = DefaultContainer>
24 void stretch(Container<Number>& points, Number a, Number b) {
25 if (points.empty()) {
26 return;
27 }
28 if (points.size() == 1 || points.front() == points.back()) {
29 std::fill(points.begin(), points.end(), (a + b) / 2);
30 return;
31 }
32 lin_map<Number,Container>(points, points.front(), points.back(), a, b);
33 points.front() = a;
34 points.back() = b;
35 }
36
37 template <typename Number = DefaultNumber, template <typename, typename...> class Container = DefaultContainer>
38 Container<Number> stretched(const Container<Number>& points, Number a, Number b) {
39 auto stretched_points = points;
40 stretch<Number,Container>(stretched_points, a, b);
41 return stretched_points;
42 }
43}
Definition points.h:5
void lin_map(Container< Number > &points, Number a, Number b, Number c, Number d)
Definition points.h:7
Container< Number > stretched(const Container< Number > &points, Number a, Number b)
Definition points.h:38
void stretch(Container< Number > &points, Number a, Number b)
Definition points.h:24
Container< Number > lin_mapped(const Container< Number > &points, Number a, Number b, Number c, Number d)
Definition points.h:17
ALFI_DEFAULT_NUMBER DefaultNumber
Definition config.h:17
ALFI_DEFAULT_CONTAINER< Number > DefaultContainer
Definition config.h:20