FastLED 3.9.15
Loading...
Searching...
No Matches
vec3.h
Go to the documentation of this file.
1#pragma once
2
3
4namespace sketch {
5
6template <typename T> struct vec3 {
7 // value_type
8 using value_type = T;
9 T x = 0;
10 T y = 0;
11 T z = 0;
12 constexpr vec3() = default;
13 constexpr vec3(T x, T y, T z) : x(x), y(y), z(z) {}
14
15 template <typename U> explicit constexpr vec3(U xyz) : x(xyz), y(xyz), z(xyz) {}
16
17 constexpr vec3(const vec3 &p) : x(p.x), y(p.y), z(p.z) {}
18 vec3 &operator*=(const float &f) {
19 x *= f;
20 y *= f;
21 z *= f;
22 return *this;
23 }
24 vec3 &operator/=(const float &f) {
25 x /= f;
26 y /= f;
27 z /= f;
28 return *this;
29 }
30 vec3 &operator*=(const double &f) {
31 x *= f;
32 y *= f;
33 z *= f;
34 return *this;
35 }
36 vec3 &operator/=(const double &f) {
37 x /= f;
38 y /= f;
39 z /= f;
40 return *this;
41 }
42
43 vec3 &operator/=(const uint16_t &d) {
44 x /= d;
45 y /= d;
46 z /= d;
47 return *this;
48 }
49
50 vec3 &operator/=(const int &d) {
51 x /= d;
52 y /= d;
53 z /= d;
54 return *this;
55 }
56
57 vec3 &operator/=(const vec3 &p) {
58 x /= p.x;
59 y /= p.y;
60 z /= p.z;
61 return *this;
62 }
63
64 vec3 &operator+=(const vec3 &p) {
65 x += p.x;
66 y += p.y;
67 z += p.z;
68 return *this;
69 }
70
71 vec3 &operator-=(const vec3 &p) {
72 x -= p.x;
73 y -= p.y;
74 z -= p.z;
75 return *this;
76 }
77
78 vec3 &operator=(const vec3 &p) {
79 x = p.x;
80 y = p.y;
81 z = p.z;
82 return *this;
83 }
84
85 vec3 operator-(const vec3 &p) const { return vec3(x - p.x, y - p.y, z - p.z); }
86
87 vec3 operator+(const vec3 &p) const { return vec3(x + p.x, y + p.y, z + p.z); }
88
89 vec3 operator*(const vec3 &p) const { return vec3(x * p.x, y * p.y, z * p.z); }
90
91 vec3 operator/(const vec3 &p) const { return vec3(x / p.x, y / p.y, z / p.z); }
92
93 template <typename NumberT> vec3 operator+(const NumberT &p) const {
94 return vec3(x + p, y + p, z + p);
95 }
96
97 template <typename U> vec3 operator+(const vec3<U> &p) const {
98 return vec3(x + p.x, y + p.y, z + p.z);
99 }
100
101 template <typename NumberT> vec3 operator-(const NumberT &p) const {
102 return vec3(x - p, y - p, z - p);
103 }
104
105 template <typename NumberT> vec3 operator*(const NumberT &p) const {
106 return vec3(x * p, y * p, z * p);
107 }
108
109 template <typename NumberT> vec3 operator/(const NumberT &p) const {
110 T a = x / p;
111 T b = y / p;
112 T c = z / p;
113 return vec3<T>(a, b, c);
114 }
115
116 bool operator==(const vec3 &p) const { return (x == p.x && y == p.y && z == p.z); }
117
118 bool operator!=(const vec3 &p) const { return (x != p.x || y != p.y || z != p.z); }
119
120 template <typename U> bool operator==(const vec3<U> &p) const {
121 return (x == p.x && y == p.y && z == p.z);
122 }
123
124 template <typename U> bool operator!=(const vec3<U> &p) const {
125 return (x != p.x || y != p.y || z != p.z);
126 }
127
128 vec3 getMax(const vec3 &p) const { return vec3(MAX(x, p.x), MAX(y, p.y), MAX(z, p.z)); }
129
130 vec3 getMin(const vec3 &p) const { return vec3(MIN(x, p.x), MIN(y, p.y), MIN(z, p.z)); }
131
132 template <typename U> vec3<U> cast() const {
133 return vec3<U>(static_cast<U>(x), static_cast<U>(y), static_cast<U>(z));
134 }
135
136 template <typename U> vec3 getMax(const vec3<U> &p) const {
137 return vec3<U>(MAX(x, p.x), MAX(y, p.y), MAX(z, p.z));
138 }
139
140 template <typename U> vec3 getMin(const vec3<U> &p) const {
141 return vec3<U>(MIN(x, p.x), MIN(y, p.y), MIN(z, p.z));
142 }
143
144 T distance(const vec3 &p) const {
145 T dx = x - p.x;
146 T dy = y - p.y;
147 T dz = z - p.z;
148 return sqrt(dx * dx + dy * dy + dz * dz);
149 }
150
151 bool is_zero() const { return (x == 0 && y == 0 && z == 0); }
152};
153
155
156} // namespace sketch
#define MIN(a, b)
Definition math_macros.h:15
#define MAX(a, b)
Definition math_macros.h:11
vec3< float > vec3f
Definition vec3.h:154
Definition vec3.h:4
static FASTLED_NAMESPACE_BEGIN uint8_t const p[]
Definition noise.cpp:30
bool operator!=(const vec3< U > &p) const
Definition vec3.h:124
vec3 & operator/=(const vec3 &p)
Definition vec3.h:57
vec3 operator-(const NumberT &p) const
Definition vec3.h:101
bool operator==(const vec3 &p) const
Definition vec3.h:116
vec3 operator-(const vec3 &p) const
Definition vec3.h:85
bool is_zero() const
Definition vec3.h:151
vec3 operator+(const vec3< U > &p) const
Definition vec3.h:97
constexpr vec3(T x, T y, T z)
Definition vec3.h:13
constexpr vec3(const vec3 &p)
Definition vec3.h:17
vec3 getMax(const vec3 &p) const
Definition vec3.h:128
vec3 operator/(const vec3 &p) const
Definition vec3.h:91
bool operator!=(const vec3 &p) const
Definition vec3.h:118
vec3 & operator/=(const int &d)
Definition vec3.h:50
vec3 getMin(const vec3< U > &p) const
Definition vec3.h:140
constexpr vec3()=default
vec3 & operator+=(const vec3 &p)
Definition vec3.h:64
vec3 getMin(const vec3 &p) const
Definition vec3.h:130
vec3 operator/(const NumberT &p) const
Definition vec3.h:109
vec3 & operator-=(const vec3 &p)
Definition vec3.h:71
T value_type
Definition vec3.h:8
T distance(const vec3 &p) const
Definition vec3.h:144
vec3 getMax(const vec3< U > &p) const
Definition vec3.h:136
vec3 & operator=(const vec3 &p)
Definition vec3.h:78
vec3 operator+(const NumberT &p) const
Definition vec3.h:93
vec3 operator*(const vec3 &p) const
Definition vec3.h:89
vec3 & operator*=(const double &f)
Definition vec3.h:30
vec3 & operator*=(const float &f)
Definition vec3.h:18
vec3 operator+(const vec3 &p) const
Definition vec3.h:87
vec3 & operator/=(const float &f)
Definition vec3.h:24
vec3 operator*(const NumberT &p) const
Definition vec3.h:105
vec3< U > cast() const
Definition vec3.h:132
vec3 & operator/=(const double &f)
Definition vec3.h:36
constexpr vec3(U xyz)
Definition vec3.h:15
vec3 & operator/=(const uint16_t &d)
Definition vec3.h:43
bool operator==(const vec3< U > &p) const
Definition vec3.h:120