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(new int16_t[(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) {
237 for (
size_t i = 0; i <
width + 2; ++i) {
244 int32_t mCourantSq32 =
static_cast<int32_t
>(
mCourantSq);
247 for (
size_t j = 1; j <=
height; ++j) {
248 for (
size_t i = 1; i <=
width; ++i) {
249 int index = j *
stride + i;
251 int32_t laplacian = (int32_t)curr[index + 1] + curr[index - 1] +
253 ((int32_t)curr[index] << 2);
257 int32_t term = (mCourantSq32 * laplacian) >> 15;
259 -(int32_t)next[index] + ((int32_t)curr[index] << 1) + term;
262 f = f - (f / dampening_factor);
270 next[index] = (int16_t)f;
276 for (
size_t j = 1; j <=
height; ++j) {
277 for (
size_t i = 1; i <=
width; ++i) {
278 int index = j *
stride + i;
279 if (next[index] < 0) {
UISlider speed("Speed", 1.0f, -20.0f, 20.0f, 0.01f)
UISlider dampening("Dampening", 6.0f, 0.0f, 10.0f, 0.1f)
void set(size_t x, float value)
fl::scoped_array< int16_t > grid2
int16_t geti16(size_t x) const
int getDampenening() const
int16_t geti16Previous(size_t x) const
void setSpeed(float something)
fl::scoped_array< 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::scoped_array< int16_t > grid1
void setf(size_t x, size_t y, float value)
int16_t geti16(size_t x, size_t y) const
int getDampenening() const
fl::scoped_array< int16_t > grid2
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)
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.