FastLED 3.9.15
Loading...
Searching...
No Matches

◆ sin32()

FASTLED_FORCE_INLINE i32 fl::sin32 ( u32 angle)

Definition at line 59 of file sin32.h.

59 {
60 u8 angle256 = static_cast<u8>(angle >> 16); // 0..255
61 u32 t = angle & 0xFFFF; // 0..65535
62
63 u8 quadrant = angle256 >> 6; // 0..3
64 u8 pos = angle256 & 0x3F; // 0..63
65
66 // Branchless quarter-wave mapping
67 u8 mirror = quadrant & 1;
68 u8 qi = static_cast<u8>(pos + mirror * (64 - 2 * pos));
69 u8 qi_next = static_cast<u8>(qi + 1 - 2 * mirror);
70
71 i32 dmask = -static_cast<i32>(mirror);
72 i32 raw = sin32_interp(qi, qi_next, dmask, t);
73
74 // Branchless sign: negative in quadrants 2, 3
75 i32 vmask = -static_cast<i32>((quadrant >> 1) & 1);
76 return (i32)(((i64)raw ^ vmask) - vmask);
77}
uint8_t pos
Definition Blur.ino:11
unsigned char u8
Definition stdint.h:131
FASTLED_FORCE_INLINE i32 sin32_interp(u8 qi, u8 qi_next, i32 dmask, u32 t, u8 offset=0) FL_NOEXCEPT
Definition sin32.h:40
fl::i64 i64
Definition s16x16x4.h:222

References FASTLED_FORCE_INLINE, FL_NOEXCEPT, pos, sin32_interp(), and t.

Referenced by cos32(), easeOutSine16(), fl::fixed_point_base< Derived, IntBits, FracBits >::sin(), fl::s12x4::sin(), fl::s16x16::sin(), fl::s24x8::sin(), fl::s4x12::sin(), fl::s8x24::sin(), fl::s8x8::sin(), sin16lut(), fl::s12x4::sincos(), fl::s24x8::sincos(), fl::s4x12::sincos(), fl::s8x24::sincos(), and fl::s8x8::sincos().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: