summaryrefslogtreecommitdiff
path: root/lib/lib8tion
diff options
context:
space:
mode:
authorXScorpion2 <rcalt2vt@gmail.com>2019-05-19 11:19:46 -0500
committerDrashna Jaelre <drashna@live.com>2019-05-19 09:19:46 -0700
commit270b39b2eb44247cff75ddd216a8e67f8f264991 (patch)
treeafa46c2588ddbeff3b7820cef323251226f0536d /lib/lib8tion
parenta0d6c5a1136e2c56aa4a57eac08355c2b5d79ad5 (diff)
downloadqmk_firmware-270b39b2eb44247cff75ddd216a8e67f8f264991.tar.gz
qmk_firmware-270b39b2eb44247cff75ddd216a8e67f8f264991.zip
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')
-rw-r--r--lib/lib8tion/trig8.h25
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