43 float t = alpha * 2.0f *
PI;
56 float t = alpha * 2.0f *
PI;
59 float x = 16.0f * powf(sinf(t), 3);
63 float y = -(13.0f * cosf(t) - 5.0f * cosf(2.0f * t) -
64 2.0f * cosf(3.0f * t) - cosf(4.0f * t));
90 float theta = alpha * 2.0f *
PI *
mTurns;
97 float x = r * cosf(theta);
98 float y = r * sinf(theta);
122 float theta = alpha * 2.0f *
PI *
params().
n;
133 float x = r * cosf(theta);
134 float y = r * sinf(theta);
141 const float N =
static_cast<float>(
params().
c);
148 constexpr float goldenAngle =
PI * (3.0f - 1.6180339887498948f);
151 float r = sqrtf(n / N);
154 float theta = n * goldenAngle;
157 float x = r * cosf(theta);
158 float y = r * sinf(theta);
165 constexpr float kTwoPi = 6.283185307179586f;
166 float theta = alpha * kTwoPi;
180 float t2 = m * theta / 4.0f;
181 float part1 = powf(fabsf(cosf(t2) / a), n2);
182 float part2 = powf(fabsf(sinf(t2) / b), n3);
183 float r = powf(part1 + part2, -1.0f / n1);
186 float x = r * cosf(theta);
187 float y = r * sinf(theta);
220 return "ArchimedeanSpiralPath";
279 if (points.size() < 2) {
281 return vec2f(0.0f, 0.0f);
285 if (points.size() == 2) {
286 return vec2f(points[0].
x + alpha * (points[1].
x - points[0].
x),
287 points[0].
y + alpha * (points[1].
y - points[0].
y));
292 float scaledAlpha = alpha * (points.size() - 1);
295 int segment =
static_cast<int>(scaledAlpha);
298 if (segment >=
static_cast<int>(points.size()) - 1) {
299 segment = points.size() - 2;
300 scaledAlpha =
static_cast<float>(segment) + 1.0f;
304 float t = scaledAlpha -
static_cast<float>(segment);
307 vec2f p0, p1, p2, p3;
315 p3 = (points.size() > 2) ? points[2] : points[1];
316 }
else if (segment ==
static_cast<int>(points.size()) - 2) {
318 p0 = (segment > 0) ? points[segment - 1] : points[0];
319 p1 = points[segment];
320 p2 = points[segment + 1];
321 p3 = points[segment + 1];
324 p0 = points[segment - 1];
325 p1 = points[segment];
326 p2 = points[segment + 1];
327 p3 = points[segment + 2];
345 float a = -0.5f * p0.
x + 1.5f * p1.
x - 1.5f * p2.
x + 0.5f * p3.
x;
346 float b = p0.
x - 2.5f * p1.
x + 2.0f * p2.
x - 0.5f * p3.
x;
347 float c = -0.5f * p0.
x + 0.5f * p2.
x;
350 float x = a * t3 + b * t2 + c * t + d;
352 a = -0.5f * p0.
y + 1.5f * p1.
y - 1.5f * p2.
y + 0.5f * p3.
y;
353 b = p0.
y - 2.5f * p1.
y + 2.0f * p2.
y - 0.5f * p3.
y;
354 c = -0.5f * p0.
y + 0.5f * p2.
y;
357 float y = a * t3 + b * t2 + c * t + d;
const Str name() const override
void setRadius(float radius)
ArchimedeanSpiralPath(uint8_t turns=3, float radius=1.0f)
vec2f compute(float alpha) override
void setTurns(uint8_t turns)
HeapVector< vec2f > points
CatmullRomParams & params()
void clear()
Clear all control points.
vec2f interpolate(const vec2f &p0, const vec2f &p1, const vec2f &p2, const vec2f &p3, float t) const
CatmullRomPath(const Ptr< CatmullRomParams > &p=NewPtr< CatmullRomParams >())
vec2f compute(float alpha) override
Ptr< CatmullRomParams > mParams
const Str name() const override
size_t size() const
Get the number of control points.
void addPoint(vec2f p)
Add a point in [0,1]² to the path.
const Str name() const override
vec2f compute(float alpha) override
Ptr< GielisCurveParams > mParams
GielisCurveParams & params()
const Str name() const override
vec2f compute(float alpha) override
GielisCurvePath(const Ptr< GielisCurveParams > &p=NewPtr< GielisCurveParams >())
const Str name() const override
vec2f compute(float alpha) override
void set(float x0, float y0, float x1, float y1)
vec2f compute(float alpha) override
const Str name() const override
LinePath(const LinePathParamsPtr ¶ms=NewPtr< LinePathParams >())
LinePathParams & params()
Ptr< LinePathParams > mParams
PhyllotaxisPath(const Ptr< PhyllotaxisParams > &p=NewPtr< PhyllotaxisParams >())
PhyllotaxisParams & params()
vec2f compute(float alpha) override
Ptr< PhyllotaxisParams > mParams
const Str name() const override
vec2f compute(float alpha) override
const Str name() const override
void set(float x, float y)
PointPath(float x, float y)
RosePath(const Ptr< RosePathParams > &p=NewPtr< RosePathParams >())
const Str name() const override
RosePathParams & params()
vec2f compute(float alpha) override
Ptr< RosePathParams > mParams
Ptr< T > NewPtr(Args... args)
Implements a simple red square effect for 2D LED grids.
static FASTLED_NAMESPACE_BEGIN uint8_t const p[]
#define FASTLED_UNUSED(x)