8template <
typename T>
struct vec3 {
14 constexpr vec3() =
default;
18 explicit constexpr vec3(U xyz) :
x(xyz),
y(xyz),
z(xyz) {}
128 return (
x ==
p.x &&
y ==
p.y &&
z ==
p.z);
132 return (
x !=
p.x ||
y !=
p.y ||
z !=
p.z);
136 return (
x ==
p.x &&
y ==
p.y &&
z ==
p.z);
140 return (
x !=
p.x ||
y !=
p.y ||
z !=
p.z);
152 return vec3<U>(
static_cast<U
>(
x),
static_cast<U
>(
y),
static_cast<U
>(
z));
167 return sqrt(dx * dx + dy * dy + dz * dz);
170 bool is_zero()
const {
return (
x == 0 &&
y == 0 &&
z == 0); }
175template <
typename T>
struct vec2 {
286 return (
x ==
p.x &&
y ==
p.y);
290 return (
x !=
p.x ||
y !=
p.y);
298 return vec2<U>(
static_cast<U
>(
x),
static_cast<U
>(
y));
312 return sqrt(dx * dx + dy * dy);
345 line_xy(T start_x, T start_y, T end_x, T end_y)
346 :
start(start_x, start_y),
end(end_x, end_y) {}
351 vec2<T> *out_projected =
nullptr)
const {
361 vec2<T> &out_proj = out_projected ? *out_projected : maybe;
362 float dx = b.
x - a.
x;
363 float dy = b.
y - a.
y;
364 float len_sq = dx * dx + dy * dy;
366#pragma GCC diagnostic push
367#pragma GCC diagnostic ignored "-Wfloat-equal"
368 const bool is_zero = (len_sq == 0.0f);
369#pragma GCC diagnostic pop
376 return sqrt(dx * dx + dy * dy);
380 float t = ((
p.x - a.
x) * dx + (
p.y - a.
y) * dy) / len_sq;
389 out_proj.
x = a.
x + t * dx;
390 out_proj.
y = a.
y + t * dy;
392 dx =
p.x - out_proj.
x;
393 dy =
p.y - out_proj.
y;
394 return sqrt(dx * dx + dy * dy);
398template <
typename T>
struct rect {
405 rect(T min_x, T min_y, T max_x, T max_y)
406 :
mMin(min_x, min_y),
mMax(max_x, max_y) {}
447 return !(*
this == r);
unsigned int xy(unsigned int x, unsigned int y)
vec2< float > pair_xy_float
vec3< float > pair_xyz_float
Implements a simple red square effect for 2D LED grids.
static FASTLED_NAMESPACE_BEGIN uint8_t const p[]
static float distance_to_line_with_point(vec2< T > p, vec2< T > a, vec2< T > b, vec2< T > *out_projected)
float distance_to(const vec2< T > &p, vec2< T > *out_projected=nullptr) const
line_xy(const vec2< T > &start, const vec2< T > &end)
line_xy(T start_x, T start_y, T end_x, T end_y)
pair_xy(const vec2< T > &p)
bool operator==(const rect &r) const
rect(const vec2< T > &min, const vec2< T > &max)
bool operator!=(const rect< U > &r) const
void expand(const rect &r)
rect(T min_x, T min_y, T max_x, T max_y)
bool contains(const vec2< T > &p) const
void expand(const vec2< T > &p)
bool operator==(const rect< U > &r) const
bool operator!=(const rect &r) const
bool contains(const T &x, const T &y) const
bool operator==(const vec2< U > &p) const
vec2 operator/(const vec2 &p) const
vec2 operator/(const NumberT &p) const
vec2 & operator/=(const double &f)
vec2 operator-(const NumberT &p) const
vec2 & operator/=(const float &f)
vec2 getMin(const vec2 &p) const
T distance(const vec2 &p) const
vec2 operator*(const vec2 &p) const
vec2 operator+(const NumberT &p) const
vec2 & operator=(const vec2 &p)
vec2 getMax(const vec2< U > &p) const
vec2 getMax(const vec2 &p) const
vec2 & operator/=(const vec2 &p)
vec2 operator-(const vec2 &p) const
constexpr vec2(const vec2 &p)
vec2 operator+(const vec2 &p) const
bool operator==(const vec2 &p) const
bool operator!=(const vec2 &p) const
vec2 & operator*=(const double &f)
vec2 & operator/=(const uint16_t &d)
vec2 & operator+=(const vec2 &p)
vec2 operator*(const NumberT &p) const
vec2 getMin(const vec2< U > &p) const
vec2 & operator-=(const vec2 &p)
vec2 & operator*=(const float &f)
vec2 operator+(const vec2< U > &p) const
vec2 & operator/=(const int &d)
bool operator!=(const vec2< U > &p) const
constexpr vec3(const vec3 &p)
vec3 operator-(const vec3 &p) const
vec3 getMin(const vec3 &p) const
vec3 operator+(const vec3< U > &p) const
vec3 & operator/=(const vec3 &p)
vec3 operator-(const NumberT &p) const
vec3 operator*(const vec3 &p) const
constexpr vec3(T x, T y, T z)
vec3 getMax(const vec3 &p) const
vec3 & operator=(const vec3 &p)
bool operator==(const vec3< U > &p) const
bool operator!=(const vec3 &p) const
vec3 operator/(const vec3 &p) const
vec3 & operator/=(const double &f)
bool operator==(const vec3 &p) const
vec3 operator/(const NumberT &p) const
vec3 operator*(const NumberT &p) const
vec3 & operator/=(const uint16_t &d)
vec3 & operator*=(const double &f)
vec3 & operator/=(const int &d)
vec3 operator+(const vec3 &p) const
T distance(const vec3 &p) const
vec3 & operator*=(const float &f)
vec3 & operator/=(const float &f)
vec3 & operator-=(const vec3 &p)
vec3 operator+(const NumberT &p) const
vec3 & operator+=(const vec3 &p)
vec3 getMin(const vec3< U > &p) const
bool operator!=(const vec3< U > &p) const
vec3 getMax(const vec3< U > &p) const