Plasma effect
require('Imager')
class Plasma(width=400, height=400) {
has img = nil
method init {
img = %O|Imager|.new(xsize => width, ysize => height)
}
method generate {
for y=(^height), x=(^width) {
var hue = (4 + sin(x/19) + sin(y/9) + sin((x+y)/25) + sin(hypot(x, y)/8))
img.setpixel(x => x, y => y, color => Hash(hsv => [360 * hue / 8, 1, 1]))
}
}
method save_as(filename) {
img.write(file => filename)
}
}
var plasma = Plasma(256, 256)
plasma.generate
plasma.save_as('plasma.png')