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