}
} else if (type == 1) {
for (int i = 0; i < config.leds.getCount(); i++) {
- double g = noise.getr(0, 0.5, 0.5, frame.xOf(i), frame.yOf(i), time / 5000.0);
- double b = noise.getr(0, 1, 1, frame.xOf(i), frame.yOf(i), time / 7000.0);
+ double x = frame.xOf(i);
+ double y = frame.yOf(i);
+ double g = Math.min(1, Math.max(0, noise.getr(-0.5, 0.5, 0.5, x, y, time / 5000.0)));
+ double b = Math.pow(Math.min(1, Math.max(0, noise.getr(0, 0.9, 1, x, y, time / 7000.0))), 2);
frame.setLedColor(i, Color.rgb(0, g, b));
}
+ } else if (type == 2) {
+ int ledCount = config.leds.getCount();
+ double hueOffset = time * 0.00001;
+ double hueLength = 1.0 / 6;
+ for (int i = 0; i < config.leds.getCount(); i++) {
+ double ledOffset = (i + (hueOffset * ledCount)) % ledCount;
+ double value = Math.abs((ledOffset * 2 - ledCount) / ledCount); // 1 to 0 to 1
+ frame.setLedColor(i, Color.hsv(value * hueLength + hueOffset, 1, 1));
+ }
}
}
return c;
}
+ public static Color hsv(double hue, double saturation, double value) {
+ double normalizedHue = hue - Math.floor(hue);
+ int h = (int)(normalizedHue * 6);
+ double f = normalizedHue * 6 - h;
+ double p = value * (1 - saturation);
+ double q = value * (1 - f * saturation);
+ double t = value * (1 - (1 - f) * saturation);
+
+ switch (h) {
+ case 0: return rgb(value, t, p);
+ case 1: return rgb(q, value, p);
+ case 2: return rgb(p, value, t);
+ case 3: return rgb(p, q, value);
+ case 4: return rgb(t, p, value);
+ case 5: return rgb(value, p, q);
+ default: throw new RuntimeException("Something went wrong when converting from HSV to RGB. Input was " + hue + ", " + saturation + ", " + value);
+ }
+ }
+
public int r() {
return r;
}