13#define INT16_POS (32767)
14#define INT16_NEG (-32768)
45using namespace wave_detail;
119 int32_t mCourantSq32 =
static_cast<int32_t
>(
mCourantSq);
121 for (
size_t i = 1; i <
length + 1; i++) {
125 (int32_t)curr[i + 1] - ((int32_t)curr[i] << 1) + curr[i - 1];
128 int32_t term = (mCourantSq32 * lap) >> 15;
132 int32_t f = -(int32_t)next[i] + ((int32_t)curr[i] << 1) + term;
135 f = f - (f / dampening_factor);
143 next[i] = (int16_t)f;
148 for (
size_t i = 1; i <
length + 1; i++) {
162 grid1((W + 2) * (H + 2)),
196 return curr[(
y + 1) *
stride + (
x + 1)];
205 return prev[(
y + 1) *
stride + (
x + 1)];
223 curr[(
y + 1) *
stride + (
x + 1)] = value;
231 for (
size_t j = 0; j <
height + 2; ++j) {
242 for (
size_t i = 0; i <
width + 2; ++i) {
249 int32_t mCourantSq32 =
static_cast<int32_t
>(
mCourantSq);
252 for (
size_t j = 1; j <=
height; ++j) {
253 for (
size_t i = 1; i <=
width; ++i) {
254 int index = j *
stride + i;
256 int32_t laplacian = (int32_t)curr[index + 1] + curr[index - 1] +
258 ((int32_t)curr[index] << 2);
262 int32_t term = (mCourantSq32 * laplacian) >> 15;
264 -(int32_t)next[index] + ((int32_t)curr[index] << 1) + term;
267 f = f - (f / dampening_factor);
275 next[index] = (int16_t)f;
281 for (
size_t j = 1; j <=
height; ++j) {
282 for (
size_t i = 1; i <=
width; ++i) {
283 int index = j *
stride + i;
284 if (next[index] < 0) {
UISlider dampening("Dampening", 6.0f, 0.0f, 10.0f, 0.1f)
void set(size_t x, float value)
int16_t geti16(size_t x) const
int getDampenening() const
int16_t geti16Previous(size_t x) const
fl::vector< int16_t > grid2
void setSpeed(float something)
fl::vector< int16_t > grid1
float getf(size_t x) const
WaveSimulation1D_Real(uint32_t length, float speed=0.16f, int dampening=6)
void setDampening(int damp)
int16_t geti16Previous(size_t x, size_t y) const
bool has(size_t x, size_t y) const
fl::vector< int16_t, fl::allocator_psram< int16_t > > grid2
void setf(size_t x, size_t y, float value)
int16_t geti16(size_t x, size_t y) const
int getDampenening() const
void setSpeed(float something)
void seti16(size_t x, size_t y, int16_t value)
WaveSimulation2D_Real(uint32_t W, uint32_t H, float speed=0.16f, float dampening=6.0f)
fl::vector< int16_t, fl::allocator_psram< int16_t > > grid1
float getf(size_t x, size_t y) const
void setDampening(int damp)
Implements the FastLED namespace macros.
float fixed_to_float(int16_t f)
int16_t float_to_fixed(float f)
FASTLED_FORCE_INLINE T clamp(T value, T min, T max)
Implements a simple red square effect for 2D LED grids.