The plasma effect is a visual effect created by applying various functions, notably sine and cosine, to the color values of screen pixels. When animated (not a task requirement) the effect may give the impression of a colorful flowing liquid.



Task
Create a plasma effect.




See also
 Computer Graphics Tutorial (lodev.org)
 Plasma (bidouille.org)


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')