10#pragma GCC diagnostic push
11#pragma GCC diagnostic ignored "-Wfloat-equal"
15template <
typename T>
struct vec2;
21template <
typename T>
bool equals(T a, T b) {
return a == b; }
25template <
typename T,
typename U>
31 if (equals(value, in_min)) {
34 if (equals(value, in_max)) {
37 return map_range_math<T, U>::map(value, in_min, in_max, out_min, out_max);
40template <
typename T,
typename U>
46 value =
clamp(value, in_min, in_max);
53namespace map_range_detail {
57 static U
map(T value, T in_min, T in_max, U out_min, U out_max) {
61 (value - in_min) * (out_max - out_min) / (in_max - in_min);
66 static uint8_t
map(uint8_t value, uint8_t in_min, uint8_t in_max,
67 uint8_t out_min, uint8_t out_max) {
68 if (value == in_min) {
71 if (value == in_max) {
76 int16_t in_min16 = in_min;
77 int16_t in_max16 = in_max;
78 int16_t out_min16 = out_min;
79 int16_t out_max16 = out_max;
81 out_min16, out_max16);
84 }
else if (out16 > 255) {
87 return static_cast<uint8_t
>(out16);
95 if (in_min == in_max) {
99 T
scale = (value - in_min) / T(in_max - in_min);
101 V dx = out_max.
x - out_min.
x;
102 V dy = out_max.
y - out_min.
y;
104 V
x = out_min.
x + V(dx *
scale);
105 V
y = out_min.
y + V(dy *
scale);
117#pragma GCC diagnostic pop
UISlider scale("Scale", 1.0f, 0.0f, 1.0f, 0.01f)
#define FASTLED_FORCE_INLINE
#define ALMOST_EQUAL_FLOAT(a, b)
#define ALMOST_EQUAL_DOUBLE(a, b)
FASTLED_FORCE_INLINE U map_range_clamped(T value, T in_min, T in_max, U out_min, U out_max)
FASTLED_FORCE_INLINE T clamp(T value, T min, T max)
FASTLED_FORCE_INLINE U map_range(T value, T in_min, T in_max, U out_min, U out_max)
Implements a simple red square effect for 2D LED grids.
static vec2< V > map(T value, T in_min, T in_max, vec2< V > out_min, vec2< V > out_max)
static uint8_t map(uint8_t value, uint8_t in_min, uint8_t in_max, uint8_t out_min, uint8_t out_max)
static U map(T value, T in_min, T in_max, U out_min, U out_max)