14 uint32_t X = (uint32_t)
x << Q;
15 uint32_t
y = (1u << Q);
18 for (
int i = 0; i < 4; i++) {
19 y = (
y + (X /
y) ) >> 1;
21 return static_cast<int16_t
>(
y) >> 8;
96 int16_t *prev, int16_t *diff)
const {
101 *diff = *curr - *prev;
106 return static_cast<int8_t
>(
geti16(
x,
y) >> 8);
111 if (
sim->getHalfDuplex()) {
112 uint16_t v2 =
static_cast<uint16_t
>(value);
115 return half_duplex_blend_linear(v2);
117 return half_duplex_blend_sqrt_q15(v2);
120 return static_cast<uint8_t
>(((
static_cast<uint16_t
>(value) + 32768)) >> 8);
137 int dx =
static_cast<int>(i) - rad;
138 int dy =
static_cast<int>(j) - rad;
141 if (
ABS(dx) +
ABS(dy) > rad)
146 if (
sim->has(xx, yy)) {
147 sim->seti16(xx, yy, v16);
215 return static_cast<int16_t
>(sum /
multiplier);
225 return static_cast<int16_t
>(sum /
multiplier);
229 int16_t *diff)
const {
234 *diff = *curr - *prev;
239 return static_cast<int8_t
>(
geti16(
x) >> 8);
258 if (
sim->getHalfDuplex()) {
259 uint16_t v2 =
static_cast<uint16_t
>(value);
262 return half_duplex_blend_linear(v2);
264 return half_duplex_blend_sqrt_q15(v2);
267 return static_cast<uint8_t
>(((
static_cast<uint16_t
>(value) + 32768)) >> 8);
UISlider dampening("Dampening", 6.0f, 0.0f, 10.0f, 0.1f)
void setf(size_t x, float value)
void init(uint32_t length, SuperSample factor, float speed, int dampening)
WaveSimulation1D(uint32_t length, SuperSample factor=SuperSample::SUPER_SAMPLE_NONE, float speed=0.16f, int dampening=6)
int8_t geti8(size_t x) const
int16_t geti16(size_t x) const
float getf(size_t x) const
int getDampenening() const
void setSpeed(float speed)
void setDampening(int damp)
void setExtraFrames(uint8_t extra)
uint8_t getu8(size_t x) const
fl::scoped_ptr< WaveSimulation1D_Real > sim
int16_t geti16Previous(size_t x) const
bool geti16All(size_t x, int16_t *curr, int16_t *prev, int16_t *diff) const
uint32_t getLength() const
int16_t geti16(size_t x, size_t y) const
uint32_t getWidth() const
void init(uint32_t width, uint32_t height, SuperSample factor, float speed, int dampening)
int getDampenening() const
void setExtraFrames(uint8_t extra)
uint32_t getHeight() const
int8_t geti8(size_t x, size_t y) const
void setSpeed(float speed)
bool geti16All(size_t x, size_t y, int16_t *curr, int16_t *prev, int16_t *diff) const
float getf(size_t x, size_t y) const
uint8_t getu8(size_t x, size_t y) const
void seti16(size_t x, size_t y, int16_t value)
fl::scoped_ptr< WaveSimulation2D_Real > sim
void setf(size_t x, size_t y, float value)
bool has(size_t x, size_t y) const
void setDampening(int damp)
WaveSimulation2D(uint32_t W, uint32_t H, SuperSample factor=SuperSample::SUPER_SAMPLE_NONE, float speed=0.16f, float dampening=6.0f)
int16_t geti16Previous(size_t x, size_t y) const
Implements the FastLED namespace macros.
uint8_t half_duplex_blend_sqrt_q15(uint16_t x)
uint8_t half_duplex_blend_linear(uint16_t x)
int16_t float_to_fixed(float f)
Implements a simple red square effect for 2D LED grids.