diff options
author | XScorpion2 <rcalt2vt@gmail.com> | 2019-05-19 11:19:46 -0500 |
---|---|---|
committer | Drashna Jaelre <drashna@live.com> | 2019-05-19 16:02:26 -0700 |
commit | 2e08096ba636e1db29dbbb7fcf481dc0ee1a0bc7 (patch) | |
tree | 24ec5950923901037dd41a4d32a940b488ecdb5b /lib/lib8tion/trig8.h | |
parent | 5b69491bacc6b4520e3875fd3badf04fb20e77a0 (diff) |
Spirals, Pinwheels, and Documentation....Oh My! RGB Matrix Effects (#5877)
* Spirals, Pinwheels, and Documentation....Oh My!
* Spiral effect band thickness adjustments
* Fixing animation spin directions
Diffstat (limited to 'lib/lib8tion/trig8.h')
-rw-r--r-- | lib/lib8tion/trig8.h | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/lib8tion/trig8.h b/lib/lib8tion/trig8.h index 6ef3ce625f..cfba6373fb 100644 --- a/lib/lib8tion/trig8.h +++ b/lib/lib8tion/trig8.h @@ -255,5 +255,30 @@ LIB8STATIC uint8_t cos8( uint8_t theta) return sin8( theta + 64); } +/// Fast 16-bit approximation of atan2(x). +/// @returns atan2, value between 0 and 255 +LIB8STATIC uint8_t atan2_8(int16_t dy, int16_t dx) +{ + if (dy == 0) + { + if (dx >= 0) + return 0; + else + return 128; + } + + int16_t abs_y = dy > 0 ? dy : -dy; + int8_t a; + + if (dx >= 0) + a = 32 - (32 * (dx - abs_y) / (dx + abs_y)); + else + a = 96 - (32 * (dx + abs_y) / (abs_y - dx)); + + if (dy < 0) + return -a; // negate if in quad III or IV + return a; +} + ///@} #endif |