FastLED 3.7.8
Loading...
Searching...
No Matches
Fast Trigonometry Functions

Detailed Description

Fast 8-bit and 16-bit approximations of sin(x) and cos(x).

Don't use these approximations for calculating the trajectory of a rocket to Mars, but they're great for art projects and LED displays.

On Arduino/AVR, the 16-bit approximation is more than 10X faster than floating point sin(x) and cos(x), while the 8-bit approximation is more than 20X faster.

const uint8_t b_m16_interleave [] = {0, 49, 49, 41, 90, 27, 117, 10}
 Pre-calculated lookup table used in sin8() and cos8() functions.
 
LIB8STATIC int16_t sin16_C (uint16_t theta)
 Fast 16-bit approximation of sin(x).
 
LIB8STATIC int16_t cos16 (uint16_t theta)
 Fast 16-bit approximation of cos(x).
 
LIB8STATIC uint8_t sin8_C (uint8_t theta)
 Fast 8-bit approximation of sin(x).
 
LIB8STATIC uint8_t cos8 (uint8_t theta)
 Fast 8-bit approximation of cos(x).
 
#define sin16   sin16_C
 Platform-independent alias of the fast sin implementation.
 
#define sin8   sin8_C
 Platform-independent alias of the fast sin implementation.
 

Macro Definition Documentation

◆ sin16

#define sin16   sin16_C

Platform-independent alias of the fast sin implementation.

Examples
Pacifica.ino, and Pride2015.ino.

Definition at line 91 of file trig8.h.

◆ sin8

#define sin8   sin8_C

Platform-independent alias of the fast sin implementation.

Examples
Pacifica.ino, and TwinkleFox.ino.

Definition at line 207 of file trig8.h.

Function Documentation

◆ cos16()

LIB8STATIC int16_t cos16 ( uint16_t theta)

Fast 16-bit approximation of cos(x).

This approximation never varies more than 0.69% from the floating point value you'd get by doing

float s = cos(x) * 32767.0;
Parameters
thetainput angle from 0-65535
Returns
cos of theta, value between -32767 to 32767.
Examples
XYMatrix.ino.

Definition at line 135 of file trig8.h.

◆ cos8()

LIB8STATIC uint8_t cos8 ( uint8_t theta)

Fast 8-bit approximation of cos(x).

This approximation never varies more than 2% from the floating point value you'd get by doing

float s = (cos(x) * 128.0) + 128;
Parameters
thetainput angle from 0-255
Returns
cos of theta, value between 0 and 255

Definition at line 257 of file trig8.h.

◆ sin16_C()

LIB8STATIC int16_t sin16_C ( uint16_t theta)

Fast 16-bit approximation of sin(x).

This approximation never varies more than 0.69% from the floating point value you'd get by doing

float s = sin(x) * 32767.0;
Parameters
thetainput angle from 0-65535
Returns
sin of theta, value between -32767 to 32767.

Definition at line 101 of file trig8.h.

◆ sin8_C()

LIB8STATIC uint8_t sin8_C ( uint8_t theta)

Fast 8-bit approximation of sin(x).

This approximation never varies more than 2% from the floating point value you'd get by doing

float s = (sin(x) * 128.0) + 128;
Parameters
thetainput angle from 0-255
Returns
sin of theta, value between 0 and 255

Definition at line 217 of file trig8.h.

Variable Documentation

◆ b_m16_interleave

const uint8_t b_m16_interleave[] = {0, 49, 49, 41, 90, 27, 117, 10}

Pre-calculated lookup table used in sin8() and cos8() functions.

Definition at line 142 of file trig8.h.