11#define FIXED_SCALE (1 << 15)
12#define FIXED_ONE (FIXED_SCALE)
27using namespace wave_detail;
101 int32_t mCourantSq32 =
static_cast<int32_t
>(
mCourantSq);
103 for (
size_t i = 1; i <
length + 1; i++) {
107 (int32_t)curr[i + 1] - ((int32_t)curr[i] << 1) + curr[i - 1];
110 int32_t term = (mCourantSq32 * lap) >> 15;
114 int32_t f = -(int32_t)next[i] + ((int32_t)curr[i] << 1) + term;
117 f = f - (f / dampening_factor);
125 next[i] = (int16_t)f;
130 for (
size_t i = 1; i <
length + 1; i++) {
144 grid1(new int16_t[(W + 2) * (H + 2)]()),
178 return curr[(
y + 1) *
stride + (
x + 1)];
187 return prev[(
y + 1) *
stride + (
x + 1)];
205 curr[(
y + 1) *
stride + (
x + 1)] = value;
213 for (
size_t j = 0; j <
height + 2; ++j) {
219 for (
size_t i = 0; i <
width + 2; ++i) {
226 int32_t mCourantSq32 =
static_cast<int32_t
>(
mCourantSq);
229 for (
size_t j = 1; j <=
height; ++j) {
230 for (
size_t i = 1; i <=
width; ++i) {
231 int index = j *
stride + i;
233 int32_t laplacian = (int32_t)curr[index + 1] + curr[index - 1] +
235 ((int32_t)curr[index] << 2);
239 int32_t term = (mCourantSq32 * laplacian) >> 15;
241 -(int32_t)next[index] + ((int32_t)curr[index] << 1) + term;
244 f = f - (f / dampening_factor);
252 next[index] = (int16_t)f;
258 for (
size_t j = 1; j <=
height; ++j) {
259 for (
size_t i = 1; i <=
width; ++i) {
260 int index = j *
stride + i;
261 if (next[index] < 0) {
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)
Implements a simple red square effect for 2D LED grids.